info:
title: Platform Functions API
version: '1.0'
description: This API documentation is intended to provide comprehensive information for admin users
of the Punchh platform. Many of the settings and available actions depend on an appropriate level
of access to Platform Functions APIs.
contact:
name: Punchh DevSupport
url: https://developers.punchh.com
paths:
/api2/dashboard/locations:
get:
responses:
'200':
$ref: '#/components/responses/locations-object'
'400':
description: ''
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
client:
type: string
examples:
default:
value:
errors:
client: Required parameter missing or the value is empty.
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Get Locations List
description: Returns a list of locations and their details. The `page` and `per` request parameters
determine the page(s) returned and the number of locations returned per page.
operationId: dashboard_get_location_list
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
default: '306082'
in: query
name: location_id
required: true
description: Unique ID of a particular location. This is generated by Punchh. If both `location_id`
and `store_number` are provided, `location_id` will be given priority.
- schema:
type: string
in: query
name: store_number
description: Unique store number provided by the business. If both `location_id` and `store_number`
are provided, `location_id` will be given priority.
- schema:
type: integer
default: 1
in: query
name: page
description: Page number. If this parameter is not provided with the request, the default is to
return all. If `page` is specified, only that page will be returned using the value of `per`
as the number of locations returned on that page.
- schema:
type: integer
default: 25
in: query
name: per
description: Number of locations per page. If `per` is not specified, the default is 25.
x-stoplight:
id: 8b8d1f327d630
post:
responses:
'200':
$ref: '#/components/responses/locations-object'
'400':
description: ''
content:
application/json:
schema:
type: object
properties:
error:
type: string
status:
type: string
x-stoplight:
id: p1u7l5eyuc9k0
examples:
A null value passed in the url parameter in the additional_url array object:
value:
error: 'Required parameter missing or the value is empty: additional_url_3'
Required parameter missing:
value:
error: 'Required parameter missing or the value is empty: location'
Invalid JSON:
value:
status: 400
error: data was not valid JSON
'401':
$ref: '#/components/responses/401-unauthorized'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: 52wiu7ve9pe4h
examples:
Additional URL label not configured in Punchh platform:
value:
errors:
additional_url: Given additional URL label is not present in the business configuration.
An invalid URL is passed in additional_url array object:
value:
base:
- Reservation URL is an invalid URL
summary: Create Location
description: "Creates a location in the database\n\n### Permissions Requirement\nAn admin account\
\ with Business Manager permission is required. Accounts without required permission will receive\
\ a 302 error response.\n\n#### Need help with permissions? \nReach out to your Punchh representative.\
\ \n\n#### Need a Punchh admin account? \nYour business will already have an admin with the necessary\
\ permissions to create an additional account if needed. If additional help is needed, your Punchh\
\ representative can assist."
operationId: dashboard_create_location
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/content-type'
- $ref: '#/components/parameters/accept'
x-stoplight:
id: 8613cc1d7011c
requestBody:
content:
application/json:
schema:
type: object
properties:
location:
type: object
properties:
address:
type: string
description: Full address of a particular business location
city:
type: string
description: City of a particular business location
country:
type: string
description: Country of a particular business location
external_store_id:
type: string
description: External POS identifier configured in the Punchh platform under location
attributes via Store Locations > All Store Locations > [choose location] > POS
> External POS Store Identifier
latitude:
type: number
description: Latitude coordinate of a particular business location
format: float
longitude:
type: number
description: Longitude coordinate of a particular business location
format: float
name:
type: string
description: Name of a particular business location
phone_number:
type: string
description: Phone number of a particular business location
loc_email:
type: string
description: Email address of a particular business location
post_code:
type: string
description: Zip code of a particular business location
state:
type: string
description: State where a particular business is located
store_number:
type: string
description: Unique store number of a particular location, as provided by the business
location_groups:
type: array
description: Contains the ID and name of all location groups to which a location
belongs. A location in business can belong to multiple location groups.
items:
type: object
properties:
location_group_id:
type: string
description: Unique ID that identifies a location group for the business.
This ID is assigned to the location group at the time of creation.
store_tags:
type: string
description: Tags that provide additional details about a particular business location
location_extra_attributes:
type: object
description: Additional information about the location
properties:
brand:
type: string
description: Brand name of a subcategory of a business. A parent business may
own multiple brands under one umbrella company. For example, Yum! Brands,
Inc. owns KFC, Pizza Hut, and Taco Bell.
store_times:
type: array
description: Business hours of a particular location
items:
type: object
properties:
day:
type: string
description: Day of week when a store is open for business
start_time:
type: string
description: Time of day when a store opens
end_time:
type: string
description: Time of day when a store closes
additional_url:
type: array
x-stoplight:
id: 8n46yip7lir3e
items:
x-stoplight:
id: r7lxikgkqc8xn
type: object
properties:
label:
type: string
x-stoplight:
id: suynyomesoxdc
description: Label for the additional URL. This additional URL label must
be configured for the business in the Punchh platform; otherwise, the
API will return an error. Contact your Punchh representative for more
information about this Punchh platform configuration.
url:
type: string
x-stoplight:
id: 1v2oirhxsjofv
description: 'Custom URL configured for the additional URL. This URL can
link to a location-specific brand webpage, such as catering information,
discounts, private events, reservations, or other custom content beyond
the standard call, order, and directions links. Note: The API returns
an error if you pass a null value in the parameter. This information
is added to the Punchh platform under Store Locations > All Store Locations
> [choose location] > Mobile App.'
alternate_store_number:
type: string
x-stoplight:
id: kirpq5cyfae1s
description: Alphanumeric alternate store identifier for a specific location,
as provided by the business. Punchh does not validate that they are unique
across each location. This information is added to the Punchh platform under
Store Locations > All Store Locations > [choose location] > Location > Alternate
Store Number/Identifier.
enable_multiple_redemptions:
type: boolean
x-stoplight:
id: oke04os31yo1b
description: 'Enables processing of multiple redemptions for a location. Possible
values: true, false. A value of true means multiple redemptions are allowed.
This setting is configured in the Punchh platform under Store Locations >
All Store Locations > [Choose a location] > Location > Allow Location for
Multiple Redemption.'
time_zone:
type: string
description: Time zone in which the business is located
validation_type:
type: string
description: The method of check-in used by a user (e.g., barcode, qr_code, receipt_image,
etc.). A blank string indicates the default value of the business.
franchisee_id:
type: integer
description: Unique ID of the franchisee who owns the location. This ID is generated
by Punchh.
ncr_store_id:
type: string
x-stoplight:
id: vc07yjtvsfqed
description: This is required only for businesses that use NCR Silver. This value
can be mapped against the location ID or store number of the location.
enable_weekly_redemption_report:
type: boolean
x-stoplight:
id: 86tmm12ampuxf
description: Enables sharing the weekly redemption report to the location email
(applicable only for the franchisee model)
examples:
location:
value:
address: ADDRESS_GOES_HERE
city: Mountain View
country: United States
external_store_id: 46ede9b5-287c-4ac5-84f4-86cb0927c96d
latitude: 37.406658
longitude: -122.109061
name: Headquarter
phone_number: '1111111111'
loc_email: test@example.com
post_code: '94040'
state: California
store_number: ABCDXYZ
location_groups:
- location_group_id: '2051'
- location_group_id: '2052'
- location_group_id: '2053'
store_tags: WiFi,DriveThru,GiftCard
location_extra_attributes:
brand: Punchh
alternate_store_number: UK@8907
enable_multiple_redemptions: true
additional_url:
- label: reservation
url: URL_GOES_HERE
store_times:
- day: Mon
start_time: 5:30 AM
end_time: 7:00 PM
- day: Tue
start_time: 5:30 AM
end_time: 8:00 PM
- day: Wed
start_time: 5:30 AM
end_time: 8:00 PM
- day: Thu
start_time: 5:30 AM
end_time: 8:00 PM
- day: Fri
start_time: 5:30 AM
end_time: 8:00 PM
- day: Sat
start_time: 6:30 AM
end_time: 8:00 PM
- day: Sun
start_time: 6:30 AM
end_time: 6:00 PM
time_zone: America/Los_Angeles
validation_type: qrcode
franchisee_id: 1234
enable_weekly_redemption_report: false
description: ''
patch:
responses:
'200':
$ref: '#/components/responses/locations-object'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
x-stoplight:
id: hvz641m9mar4x
examples:
Invalid JSON:
value:
status: 400
error: data was not valid JSON
Required parameter missing:
value:
error: 'Required parameter missing or the value is empty: location'
A null value passed in the url parameter in the additional_url array object:
value:
error: 'Required parameter missing or the value is empty: additional_url_(array number)'
'401':
$ref: '#/components/responses/401-unauthorized'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: wphk9ft06qxyg
examples:
An invalid URL is passed in additional_url array:
value:
base:
- Reservation URL is an invalid URL
Additional URL label not configured in Punchh platform:
value:
errors:
additional_url: Given additional URL label is not present in the business configuration.
summary: Update Location
description: Edits a location in the database
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
operationId: dashboard_update_location
tags:
- Locations
x-stoplight:
id: 74736d5611d92
requestBody:
content:
application/json:
schema:
type: object
properties:
location_id:
type: integer
description: Unique of a particular location. Either `location_id` or `store_number`
should be provided. If both are provided, `store_number` will be given priority.
store_number:
type: string
description: Unique store number provided by the business. Either `location_id` or `store_number`
should be provided. If both are provided, `store_number` will be given priority.
location:
type: object
properties:
address:
type: string
description: Full address of a particular business location
city:
type: string
description: City of a particular business location
country:
type: string
description: Country of a particular business location
external_store_id:
type: string
description: External POS identifier configured in the Punchh platform under location
attributes via Store Locations > All Store Locations > [choose location] > POS
> External POS Store Identifier.
latitude:
type: number
description: Latitude coordinate of a particular business location
format: float
longitude:
type: number
description: Longitude coordinate of a particular business location
format: float
name:
type: string
description: Name of a particular business location
phone_number:
type: string
description: Phone number of a particular business location
location_groups:
type: array
description: Contains the ID and name of all location groups to which a location
belongs. A location in business can belong to multiple location groups.
items:
type: object
properties:
location_group_id:
type: string
description: Unique ID that identifies a location group for the business.
This ID is assigned to the location group at the time of creation.
store_tags:
type: string
description: Tags that provide additional details about a particular business location
location_extra_attributes:
type: object
description: Additional information about the location
properties:
brand:
type: string
description: Brand name of a subcategory of a business. A parent business may
own multiple brands under one umbrella company. For example, Yum! Brands,
Inc. owns KFC, Pizza Hut, and Taco Bell.
store_times:
type: array
description: Business hours of a particular location
items:
type: object
properties:
day:
type: string
description: Day of week when a store is open for business
start_time:
type: string
description: Time of day when a store opens
end_time:
type: string
description: Time of day when a store closes
online_order_url:
type: string
description: Online ordering URL of a particular business location
' additional_url':
type: array
x-stoplight:
id: yotebzzvgcolv
items:
x-stoplight:
id: fsga27oktsddh
type: object
properties:
label:
type: string
x-stoplight:
id: ue6vv7t7w1o4t
description: Label for the additional URL. This additional URL label must
be configured for the business in the Punchh platform; otherwise, the
API will return an error. Contact your Punchh representative for more
information about this Punchh platform configuration.
url:
type: string
x-stoplight:
id: dxs424weyvhyv
description: Custom URL configured for the additional URL. This URL can
link to a location-specific brand webpage, such as catering information,
discounts, private events, reservations, or other custom content beyond
the standard call, order, and directions links. This information is
added to the Punchh platform under Store Locations > All Store Locations
> [choose location] > Mobile App.
alternate_store_number:
type: string
x-stoplight:
id: km7yd9xrz15dz
description: Alphanumeric alternate store identifier for a specific location,
as provided by the business. Punchh does not validate that they are unique
across each location. This information is added to the Punchh platform under
Store Locations > All Store Locations > [choose location] > Location > Alternate
Store Number/Identifier.
enable_multiple_redemptions:
type: boolean
x-stoplight:
id: hm8mjc8uqse8v
description: 'Enables processing of multiple redemptions for a location. Possible
values: true, false. A value of true means multiple redemptions are allowed.
This setting is configured in the Punchh platform under Store Locations >
All Store Locations > [Choose a location] > Location > Allow Location for
Multiple Redemption.'
time_zone:
type: string
description: Time zone in which the business is located
generate_barcodes:
type: boolean
description: Whether barcodes are generated on the receipt or not
loc_email:
type: string
description: Email address of a particular business location
post_code:
type: string
description: Zip code of a particular business location
state:
type: string
description: State where a particular business is located
status:
type: string
description: 'Whether the location is enabled for check-ins or not. `approved`:
Enabled for check-ins. `disapproved`: Disabled for check-ins.'
franchise_id:
type: integer
description: Unique ID of the franchisee who owns the location. This ID is generated
by Punchh.
ncr_store_id:
type: string
description: This is required only for businesses that use NCR Silver. This value
can be mapped against the location ID or store number of the location.
enable_weekly_redemption_report:
description: Enables sharing the weekly redemption report to the location email (applicable
only for the franchisee model)
type: boolean
examples:
default:
value:
location_id: 306248
store_number: ABCDXYZ
location:
address: ADDRESS_GOES_HERE
city: Mountain View
country: United States
external_store_id: 46ede9b5-287c-4ac5-84f4-86cb0927c96d
latitude: 37.406658
longitude: -122.109061
name: Headquarter7
phone_number: '1111111111'
location_groups:
- location_group_id: '2051'
- location_group_id: '2052'
- location_group_id: '2053'
loc_email: test@example.com
post_code: '94040'
state: California
store_tags: WiFi,DriveThru,GiftCard
location_extra_attributes:
brand: Punchh
online_order_url: https://example.com
alternate_store_number: UK@8907
enable_multiple_redemptions: true
additional_url:
- label: reservation
url: https://example1.com
store_times:
- day: Mon
start_time: 5:30 AM
end_time: 7:00 PM
- day: Tue
start_time: 5:30 AM
end_time: 8:00 PM
- day: Wed
start_time: 5:30 AM
end_time: 8:00 PM
- day: Thu
start_time: 5:30 AM
end_time: 8:00 PM
- day: Fri
start_time: 5:30 AM
end_time: 8:00 PM
- day: Sat
start_time: 6:30 AM
end_time: 8:00 PM
- day: Sun
start_time: 6:30 AM
end_time: 6:00 PM
time_zone: America/Los_Angeles
generate_barcodes: true
delete:
responses:
'204':
description: A successful response is a blank response with HTTP status code 204.
content:
application/json:
schema:
type: object
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Delete Location
description: Deletes a business location from the database
operationId: dashboard_delete_location
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: f3dd8a2ae9d4e
requestBody:
content:
application/json:
schema:
type: object
properties:
location_id:
type: integer
description: Unique ID of a particular location. This is generated by Punchh.
store_number:
type: string
description: Unique store number provided by the business
examples:
default:
value:
location_id: 306248
store_number: ABCDXYZ
/api2/dashboard/location_groups:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
location_group_id:
type: integer
description: Unique ID that identifies a location group for the business. This ID
is assigned to the location group at the time of creation.
name:
type: string
description: Name of the location group that is assigned by the admin who created
it
locations:
type: array
items:
type: object
properties:
location_id:
type: integer
description: Unique ID of a particular location. This is generated by Punchh.
store_number:
type: string
description: Unique store number provided by the business
examples:
default:
value:
- location_group_id: 1234
name: Group 1
locations:
- location_id: 312301
store_number: 005806
- location_id: 312302
store_number: 028462
- location_group_id: 1235
name: Group 2
locations:
- location_id: 312303
store_number: 005807
- location_id: 312304
store_number: 028463
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Get Location Group List
description: Returns a list of all location groups in the business, including details about the
specific locations in each location group. A location in a business can belong to multiple location
groups.
operationId: dashboard_get_location_group_list
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: location_group_id
description: Unique ID that identifies a location group for the business. This ID is assigned
to the location group at the time of creation.
x-stoplight:
id: 68e83bb9538b3
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: integer
description: Unique ID that identifies a location group for the business. This ID
is assigned to the location group at the time of creation.
name:
type: string
description: Name of the location group that is assigned by the admin who created
it
locations:
type: array
items:
type: object
properties:
location_id:
type: integer
description: Unique ID of a particular location. This is generated by Punchh.
store_number:
type: string
description: Unique store number provided by the business
examples:
default:
value:
location_group_id: 2142
name: Location Group 1
locations:
- location_id: 312362
store_number: '317111'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Create Location Group
description: Creates a location group with one location. More locations can be included by using
the [Add Location to Location Group](/docs/dev-portal-platform-functions/13dd7ab9d1483-add-location-to-location-group)
API.
operationId: dashboard_create_location_group
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 8953dba5c68a3
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Name of the location group
store_number:
type: string
description: Unique store number provided by the business
location_id:
type: string
description: Unique ID of a particular location. This is generated by Punchh.
examples:
default:
value:
name: Location Group 1
store_number: '317111'
location_id: '312362'
delete:
responses:
'204':
description: A successful response is a blank response with HTTP status code 204.
content:
application/json:
schema: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Delete Location Group
description: Deletes a location group. Deleting a location group does not delete the locations that
make up the location group.
operationId: dashboard_delete_location_group
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 21afa37b6b92f
requestBody:
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: string
description: ID of the location group that the business admin can access
examples:
default:
value:
location_group_id: '2142'
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: integer
description: Unique ID that identifies a location group for the business. This ID
is assigned to the location group at the time of creation.
name:
type: string
description: Name of the location group that is assigned by the admin who created
it
locations:
type: array
items:
type: object
properties:
location_id:
type: integer
description: Unique ID of a particular location. This is generated by Punchh.
store_number:
type: string
description: Unique store number provided by the business
examples:
default:
value:
location_group_id: 2140
name: UpdatedGroupName
locations:
- location_id: 312362
store_number: '317111'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Update Location Group
description: Updates the name of an existing location group
operationId: dashboard_update_location_group
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 38c6714be45aa
requestBody:
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: string
description: Unique ID that identifies a location group for the business. This ID is
assigned to the location group at the time of creation.
name:
type: string
description: Name of the location group that is assigned by the admin who created it
examples:
default:
value:
location_group_id: '2140'
name: CurrentGroupName
/api2/dashboard/location_groups/add_location:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: integer
description: Unique ID that identifies a location group for the business. This ID
is assigned to the location group at the time of creation.
name:
type: string
description: Name of the location group that is assigned by the admin who created
it
locations:
type: array
items:
type: object
properties:
location_id:
type: integer
description: Unique ID of a particular location. This is generated by Punchh.
store_number:
type: string
description: Unique store number provided by the business
examples:
default:
value:
location_group_id: 2140
name: Group 1
locations:
- location_id: 312350
store_number: '316864'
- location_id: 312362
store_number: '317111'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Add Location to Location Group
description: Adds a location to an existing location group
operationId: dashboard_add_location_to_location_group
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 13dd7ab9d1483
requestBody:
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: string
description: Unique ID that identifies a location group for the business. This ID is
assigned to the location group at the time of creation.
store_number:
type: string
description: Unique store number provided by the business
location_id:
type: string
description: Unique ID of a particular location. This is generated by Punchh.
examples:
default:
value:
location_group_id: '2140'
store_number: '317111'
location_id: '312362'
/api2/dashboard/location_groups/remove_location:
delete:
responses:
'204':
description: A successful response is a blank response with HTTP status code 204.
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Delete Location From a Location Group
description: Removes a location from a location group. This does not delete the location from the
business.
operationId: dashboard_delete_from_location_group
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: dae38f54c04df
requestBody:
content:
application/json:
schema:
type: object
properties:
location_group_id:
type: string
description: ID of the location group that the business admin can access
store_number:
type: string
description: Unique store number provided by the business
location_id:
type: string
description: Unique ID of a particular location. This is generated by Punchh.
examples:
default:
value:
location_group_id: '2140'
store_number: '317111'
location_id: '312362'
/api2/dashboard/redemptions:
get:
responses:
'200':
$ref: '#/components/responses/redemption-detail'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Search Redemption Code
operationId: dashboard_search_redemption_code
tags:
- Redemptions
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: location_id
description: Unique ID of a particular location. This is generated by Punchh.
- schema:
type: string
in: query
name: redemption_code
description: Redemption code of the user as generated on the app or web.
x-stoplight:
id: ac8e06639a62c
patch:
responses:
'200':
$ref: '#/components/responses/redemption-detail'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Process Redemption
description: Marks a redemption as processed
operationId: dashboard_process_redemption
tags:
- Redemptions
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: d91b52fceaed2
requestBody:
content:
application/json:
schema:
type: object
properties:
redemption_code:
type: string
description: Redemption code of the user as generated on the app or web
location_id:
type: integer
description: Unique ID of a particular business location. This is generated by Punchh.
store_number:
type: string
description: Unique store number of a particular location, as provided by the business
examples:
default:
value:
redemption_code: REDEMPTION_CODE_GOES_HERE
location_id: 304731
store_number: MNBVC
/api2/dashboard/users/ban:
post:
responses:
'202':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Ban a User
description: Bans a user in the Punchh system to disallow check-ins, redemptions, emails, etc.
operationId: dashboard_ban_user
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 2286ecbc280af
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: User ID of the guest in the Punchh system that will be banned. You can
get this value from the [User object](/docs/dev-portal-platform-functions/z6d3vh41qnftr-user-object).
reason:
type: string
description: Reason that the guest is being banned. This is required for auditing and
tracking purposes.
ban_all_associated_devices:
type: boolean
default: false
description: Optional boolean parameter. When set to true, all device IDs linked to
the banned user are blocked. This prevents future logins from those devices. If anyone,
including the banned user under a new account, attempts to log in from a blocked device,
the [login API](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/users/post/api2/mobile/users/login)
(/api2/mobile/users/login) returns a 422 response with a customizable "Device Banned"
message.
required:
- user_id
- reason
examples:
default:
value:
user_id: '111111111'
reason: Fraudulent activity
ban_all_associated_devices: false
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Unban a User
description: Removes a user ban to resume check-ins, redemptions, emails, etc.
operationId: dashboard_unban_user
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: user_id
description: User ID of the guest in the Punchh system that will be unbanned
x-stoplight:
id: eaa76bc1f8e96
/api2/dashboard/redemptions/force_redeem:
post:
operationId: dashboard_force_redeem
tags:
- Redemptions
summary: Force Redeem
parameters:
- $ref: '#/components/parameters/authorization-header'
responses:
'201':
$ref: '#/components/responses/redemption-object'
'401':
$ref: '#/components/responses/401-unauthorized'
x-stoplight:
id: 6d3f5e310b96d
description: 'The Force Redemption API allows administrators (e.g., restaurant managers, support
staff, or corporate team members) to override normal redemption flows and manually or programmatically
redeem an offer or promotion on behalf of a guest. This functionality is particularly useful in
various customer support, operational, and exception-handling scenarios.
Note: The Force Redemption API is intended primarily for support-related scenarios where
offers need to be redeemed on a limited scale. It should not be used for bulk expirations or large-scale
force redemptions. For example, if a brand has distributed offers through a campaign and later
runs out of stock for the promotion, this API should not be used to bulk-expire the offers already
available to guests in order to discontinue the campaign.
Usage Limit: Permissible usage is capped at 500 requests per minute (RPM), with a daily
limit of up to 100,000 requests. If you need to process more than 100,000 requests in a single
day, contact your Punchh representative.'
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: integer
description: ID that identifies the user
redemption:
type: object
properties:
requested_punches:
type: integer
force_message:
type: string
reward_id:
type: integer
format: int64
description: Unique ID of the reward
fuel_redemption:
type: boolean
examples:
default:
value:
user_id: 111111111
redemption:
requested_punches: 50
force_message: This is a test
/api2/dashboard/users/send_message:
post:
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: zqebh3bcoo2bc
properties:
base:
type: array
x-stoplight:
id: xy4qo4anemb3z
items: {}
examples:
'Missing challenge campaign ID ':
value:
errors:
base:
- There must be a purpose to this note to the guest
Sending an invalid challenge campaign ID:
value:
errors:
base:
- Sorry. Either this is an invalid campaign ID or the campaign has a start date
in future, is a draft, is deactivated or expired.
summary: Send Message to a User
description: Sends a message to a user along with gift points, visits, rewards, or progress of a
challenge. This also allows you to gift the user different types of rewards at once.
operationId: dashboard_send_message_to_user
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 56ecbfacce14e
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: integer
description: Unique ID of the user to whom you want to send the message. This is a unique
ID assigned to the user by Punchh.
subject:
type: string
description: Subject of the message that you want to send to the user. If no value is
provided, the default system value will be picked.
message:
type: string
description: The message that will be sent to the user. Messaging is optional. You can
send either a message only or a gift only. However, at least one of the two should
be sent.
gift_reason:
type: string
description: The reason these points, visits, or rewards are being gifted to the user.
If no value is provided, the default system value of "Support Activity" will be provided.
gift_count:
type: integer
description: In a points-based business, the gift count is the number of points that
will be gifted to guests. In a visit-based business, it is the number of visits that
will be gifted. Gifting is optional. You can send either a message only or a gift
only. However, at least one of the two should be sent.
reward_amount:
type: integer
description: Currency amount that will be gifted to the user. Gifting is optional. You
can send either a message only or a gift only. However, at least one of the two should
be sent.
redeemable_id:
type: integer
description: Unique ID of the redeemable that you want to gift to the user. Gifting
is optional. You can send either a message only or a gift only. However, at least
one of the two should be sent.
end_date:
type: string
format: date
description: The date on which you want the gifted redeemable to expire. If this date
is provided and there is an expiry configured on the redeemable, it will expire on
the earlier date.
fuel_amount:
type: number
description: Fuel amount that you want to gift to the user
location_id:
type: integer
description: Unique ID of the location associated with the gift. This is for reference
purposes. If no location ID is provided, the ID of the headquarters location will
be used.
reset_guest_last_activity:
type: boolean
x-stoplight:
id: ukavl0wchvhnx
description: Resets the guest's last activity which is the expiry date to the current
time
challenge_campaign_id:
type: integer
x-stoplight:
id: xd5up4hxiltx6
description: Unique ID of the challenge in a campaign for which progress will be gifted
'progress_count ':
type: integer
x-stoplight:
id: kafeeg0r6dc70
description: 'Number of steps that will be gifted to the user for the challenge ID specified
in `challenge_campaign_id`. If the API call is successful, the progress made in the
challenge is shown in the Challenges tab on the user timeline in the Punchh
platform. Challenges must be enabled for the business in the Punchh platform, and
the bearer token for admin authorization passed in the Authorization header must have
the Dashboard API Access and Gift or Force Redeem permissions for the
API to send the user notification of the progress for a challenge successfully. Contact
your Punchh representative to update this Punchh platform configuration. '
examples:
default:
value:
user_id: 111111111
subject: Gifts from us.
message: Thank you for contacting us. Here are 50 extra points to make your day.
gift_reason: Admin Generosity
gift_count: 50
reward_amount: 21
redeemable_id: 106
end_date: '2017-07-01'
fuel_amount: 5.5
location_id: 310969
challenge_campaign_id: 48770
progress_count: 1
description: ''
/api2/dashboard/migration_users:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
address_line1:
type: string
description: Address of the user
birthday:
type: string
format: date
description: Date of birth of the user, in YYYY-MM-DD format
city:
type: string
description: City where the user lives
email:
type: string
description: Email address of the user that will be added to the migration data. Migration
can be based on this value as well.
first_name:
type: string
description: First name of the user
gifted_value:
type: integer
description: Value of points gifted to the user at the time of migration. This is
the product of `original_points` and `rate_of_conversion`. This does not include
the initial points.
initial_points:
type: integer
description: Number of points that will be used to determine a guest’s membership
tier during migration. Contact your Punchh representative for more information.
last_name:
type: string
description: Last name of the user
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
migrated_redeemables:
type: array
items:
type: object
properties:
redeemable_id:
type: integer
format: int32
description: ID of the redeemable migrated for the user. This redeemable should
be active on the platform. After the user has been migrated, the user will
be able to use this redeemable.
rewards_count:
type: integer
format: int32
description: Number of redeemables that will be migrated for the guest
migrated_rewards:
type: integer
description: Currency value of rewards that will be migrated from the incumbent loyalty
program
migrated_rewards_expiration_date:
type: string
format: date
description: 'Expiration date of the currency value of rewards that will be migrated
from the incumbent loyalty program. Note: This expiration date will be applicable
only on the currency value passed in the `migrated_rewards` parameter.'
name:
type: string
description: Name of the loyalty program of the business
original_membership_no:
type: integer
description: Membership number of the user as per the incumbent loyalty program. Migration
can be based on this value as well.
original_phone:
type: integer
description: Phone number of the user. This value may contain special characters (e.g.,
hyphen, etc.).
original_points:
type: number
description: Number of points that will be migrated from the incumbent loyalty program
format: float
phone:
type: integer
description: Phone number of the user. This is used as the unique identifier for migration
of the user. This should be a 10-digit value without special characters (e.g., hyphen,
etc.).
preferred_location:
type: integer
description: Favorite location ID of the user
registration_date:
type: string
format: date-time
description: 'Registration date of the loyalty program. Accepted formats: YYYY-MM-DD
or YYYY-MM-DDTHH:mm:ssZ. If only a date is provided, the time defaults to 00:00:00.'
state:
type: string
description: State where the user lives
street_address:
type: string
description: Address of the user
user_relations:
type: array
items:
type: object
properties:
name:
type: string
description: Name of the relative
relation:
type: string
description: Relation to the user. Valid values are "spouse" and "kid".
birthday:
type: string
format: date
description: Birthday of the relative, in YYYY-MM-DD format
zip_code:
type: string
description: Zip code where the user lives
gift_cards:
type: array
items:
type: object
properties:
card_number:
type: string
description: 'Gift card number. Gift cards that meet the validation criteria
stated in the description of the `card_number` request parameter are returned
in the response. '
card_design_id:
type: string
x-stoplight:
id: lr6z0pgcip5ky
description: ID of a particular gift card design. See the `card_design_id` request
parameter description.
epin:
type: string
description: EPIN of the gift card. Leave this blank if a PIN is not available
or not required.
challenge_progress:
type: array
items:
type: object
properties:
challenge_campaign_id:
type: integer
description: ID of the campaign generated by Punchh
progress_count:
type: integer
description: Value of progress that the user has made toward the challenge while
in the incumbent system
migration_user_id:
type: integer
description: Unique ID assigned to the user by Punchh at the time of migration
fb_uid:
type: string
x-stoplight:
id: ak5hezpjl5u21
description: Facebook ID that identifies the user
loyalty_cards:
$ref: '#/components/schemas/loyalty-cards'
examples:
default:
value:
address_line1: ADDRESS_GOES_HERE
birthday: '1999-01-01'
city: Mountain View
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
gifted_value: 97
initial_points: 3
last_name: LAST_NAME_GOES_HERE
marketing_email_subscription: false
marketing_pn_subscription: true
migrated_redeemables:
- redeemable_id: 2329
rewards_count: 2
migrated_rewards: 10.9
migrated_rewards_expiration_date: '2020-01-31'
name: Incumbent Loyalty Program
original_membership_no: 123456789
original_phone: 1111111111
original_points: 97
phone: '1111111111'
preferred_location: 311031
registration_date: '2008-10-26T23:59:59-07:00'
state: California
street_address: ADDRESS_GOES_HERE
user_relations:
- name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
relation: spouse
birthday: '1999-01-01'
- name: FIRST_NAME_GOES_HERE
relation: kid
birthday: '1999-01-01'
zip_code: '94040'
gift_cards:
- card_number: CARD_NUMBER_GOES_HERE
card_design_id: '2'
epin: EPIN_GOES_HERE
- card_number: CARD_NUMBER_GOES_HERE
card_design_id: '2'
epin: EPIN_GOES_HERE
challenge_progress:
- challenge_campaign_id: 21571
progress_count: 2
loyalty_cards:
- card_number: CARD_NUMBER_GOES_HERE
status: ACTIVE
card_signup_date: '2021-05-03'
- card_number: CARD_NUMBER_GOES_HERE
status: SUSPENDED
card_signup_date: '2021-03-03'
migration_user_id: 12345678
fb_uid: ''
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Create Business Migration User
description: Creates a business migration user in the system
operationId: dashboard_create_business_migration_user
tags:
- Business Migration Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: e3f5573f9451c
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Name of the loyalty program of the business
birthday:
type: string
description: Date of birth of the user, in YYYY-MM-DD format
format: date
phone:
type: integer
description: Phone number of the user. This is used as the unique identifier for migration
of the user. This should be a 10-digit value without special characters (e.g., hyphen,
etc.).
format: int32
email:
type: string
description: Email address of the user that will be added to the migration data. Migration
can be based on this value as well.
original_membership_no:
type: integer
description: Membership number of the user as per the incumbent loyalty program. Migration
can be based on this value as well.
format: int32
registration_date:
type: string
format: date-time
description: 'Registration date of the loyalty program. Accepted formats: YYYY-MM-DD
or YYYY-MM-DDTHH:mm:ssZ. If only a date is provided, the time defaults to 00:00:00.'
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
original_phone:
type: string
description: Phone number of the user. This value may contain special characters (e.g.,
hyphen, etc.).
original_points:
type: number
description: Number of points that will be migrated from the incumbent loyalty program
format: float
fb_uid:
type: string
description: Facebook ID that identifies the user
initial_points:
type: integer
format: int32
description: Number of points that will be used to determine a guest’s membership tier
during migration. Contact your Punchh representative for more information.
migrated_rewards:
type: integer
format: int32
description: Currency value of rewards that will be migrated from the incumbent loyalty
program
migrated_rewards_expiration_date:
type: string
format: date
description: 'Expiration date of the currency value of rewards that will be migrated
from the incumbent loyalty program. Note: This expiration date will be applicable
only on the currency value passed in the `migrated_rewards` parameter.'
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
address_line1:
type: string
description: Address of the user
city:
type: string
description: City where the user lives
state:
type: string
description: State where the user lives
zip_code:
type: string
description: Zip code where the user lives
preferred_location:
type: string
description: Favorite location ID of the user
migrated_redeemables:
type: array
items:
type: object
properties:
redeemable_id:
type: integer
format: int32
description: ID of the redeemable that will be migrated for the user. This redeemable
should be active on the platform. After the user has been migrated, the user
will be able to use this redeemable.
rewards_count:
type: integer
format: int32
description: Number of redeemables that will be migrated for the guest
user_relations:
type: array
items:
type: object
properties:
name:
type: string
description: Name of the relative
relation:
type: string
description: Relation to the user. Valid values are "spouse" and "kid".
birthday:
type: string
format: date
description: Birthday of the relative, in YYYY-MM-DD format
gift_cards:
type: array
items:
type: object
properties:
card_number:
type: string
description: "Gift card number. There are validations when adding gift cards to\
\ migration data. If the gift card data is blank for a business migration user,\
\ then the user is created, but the gift card data is skipped from getting uploaded\
\ with the rest of the data provided for the business migration user. If gift\
\ cards with both valid details and blank card details exist in the Punchh system\
\ for a business migration user, then when the user signs up with their email\
\ address, only gift cards that have valid details are added to the user’s account.\
\ \n\nGift cards are added to the business migration user account if 1) gift\
\ card details are valid or 2) only the gift card number is provided without\
\ the epin of the gift card. If one gift card has valid details and another\
\ gift card either has invalid or blank card details, then the gift card with\
\ valid card details is added to the user’s account.\n\nGift cards are not added\
\ to the business migration user account if 1) the gift card number and epin\
\ are passed blank, passed as an empty string, or passed with a value nil in\
\ the string, 2) one gift card is passed with blank card details and another\
\ with invalid card details, 3) multiple gift cards with invalid card numbers\
\ are passed, 4) the gift card number is invalid, but the epin of the gift card\
\ is valid, 5) the gift card number is valid, but epin for the gift card is\
\ invalid, and 6) the gift card number is blank and only epin of the gift card\
\ is passed."
card_design_id:
type: string
x-stoplight:
id: lh77s8wibpwkj
description: ID of a particular gift card design. Punchh checks if the card_design_id
value is valid or not. If the design is valid, the system assigns it to all
gift cards; otherwise, the system checks whether the recently added design is
active or not. If an active design is found, the system assigns the design to
gift cards. If the recently added design is found inactive, the system checks
for the latest design out of all active designs and assigns it to all gift cards.
epin:
type: string
description: EPIN of the gift card. Leave this blank if a PIN is not available
or not required.
challenge_progress:
type: array
items:
type: object
properties:
challenge_campaign_id:
type: integer
description: ID of the campaign generated by Punchh
progress_count:
type: integer
description: Value of progress that the user has made toward the challenge while
in the incumbent system
rate_of_conversion:
type: number
x-stoplight:
id: y6vwxnuqqtxp2
description: Rate of conversion of loyalty points from the incumbent loyalty program
format: float
loyalty_cards:
$ref: '#/components/schemas/loyalty-cards'
examples:
default:
value:
name: Incumbent Loyalty Program
birthday: '1999-01-01'
phone: 1111111111
email: test@example.com
original_membership_no: 123456789
registration_date: '2008-10-26T23:59:59-07:00'
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
original_phone: '1111111111'
original_points: 97
fb_uid: ''
initial_points: 3
migrated_rewards: 10.9
migrated_rewards_expiration_date: '2020-01-31'
marketing_pn_subscription: true
marketing_email_subscription: false
address_line1: ADDRESS_GOES_HERE
city: Mountain View
state: California
zip_code: '94040'
preferred_location: '311031'
migrated_redeemables:
- redeemable_id: 2329
rewards_count: 2
user_relations:
- name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
relation: spouse
birthday: '1999-01-01'
- name: FIRST_NAME_GOES_HERE
relation: kid
birthday: '1999-01-01'
gift_cards:
- card_number: CARD_NUMBER_GOES_HERE
card_design_id: '2'
epin: EPIN_GOES_HERE
- card_number: CARD_NUMBER_GOES_HERE
card_design_id: '2'
epin: EPIN_GOES_HERE
challenge_progress:
- challenge_campaign_id: 21571
progress_count: 2
rate_of_conversion: 1
loyalty_cards:
- card_number: CARD_NUMBER_GOES_HERE
status: ACTIVE
card_signup_date: '2021-05-03'
- card_number: CARD_NUMBER_GOES_HERE
status: SUSPENDED
card_signup_date: '2021-03-03'
description: ''
/api2/dashboard/migration_users/{ID}:
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
address_line1:
type: string
description: Address of the user
birthday:
type: string
format: date
description: Date of birth of the user, in YYYY-MM-DD format
city:
type: string
description: City where the user lives
email:
type: string
description: Email address of the user that will be added to the migration data. Migration
can be based on this value as well.
first_name:
type: string
description: 'First name of the user
'
gifted_value:
type: integer
description: The value of gifted points to guest at the time of migration. This is
the product of `original_points` and `rate_of_conversion`. This does not include
the initial points.
initial_points:
type: integer
description: Number of points that will be used to determine a guest’s membership
tier during migration. Contact your Punchh representative for more information.
last_name:
type: string
description: Last name of the user
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
migrated_redeemables:
type: array
items:
type: object
properties:
redeemable_id:
type: string
description: ID of the redeemable that will be migrated for the user. This redeemable
should be active on the platform. After the user has been migrated, the user
will be able to use this redeemable.
rewards_count:
type: string
description: Number of redeemables that will be migrated for the guest
migrated_rewards:
type: integer
description: Currency value of rewards that will be migrated from the incumbent loyalty
program
migrated_rewards_expiration_date:
type: string
format: date
description: 'Expiration date of the currency value of rewards that will be migrated
from the incumbent loyalty program. Note: This expiration date will be applicable
only on the currency value passed in the `migrated_rewards` parameter.'
name:
type: string
description: Name of the loyalty program of the business
original_membership_no:
type: integer
description: Membership number of the user as per the incumbent loyalty program. Migration
can be based on this value as well.
original_phone:
type: integer
description: Phone number of the user. This value may contain special characters (e.g.,
hyphen, etc.).
original_points:
type: number
format: float
description: Number of points that will be migrated from the incumbent loyalty program
phone:
type: integer
description: Phone number of the user. This is used as the unique identifier for migration
of the user. This should be a 10-digit value without special characters (e.g., hyphen,
etc.).
preferred_location:
type: integer
description: Favorite location ID of the user
registration_date:
type: string
format: date-time
description: 'Registration date of the loyalty program. Accepted formats: YYYY-MM-DD
or YYYY-MM-DDTHH:mm:ssZ. If only a date is provided, the time defaults to 00:00:00.'
state:
type: string
description: State where the user lives
street_address:
type: string
description: Address of the user
user_relations:
type: array
items:
type: object
properties:
name:
type: string
description: Name of the relative
relation:
type: string
description: Relation to the user. Valid values are "spouse" and "kid".
birthday:
type: string
description: Birthday of the relative, in YYYY-MM-DD format
zip_code:
type: string
description: Zip code where the user lives
gift_cards:
type: array
items:
type: object
properties:
card_number:
type: string
description: 'Gift card number. Gift cards that meet the validation criteria
stated in the description of the `card_number` request parameter are returned
in the response. '
epin:
type: string
description: EPIN of the gift card. Leave this blank if a PIN is not available
or not required.
migration_user_id:
type: integer
description: Unique ID assigned to the user by Punchh at the time of migration
fb_uid:
type: string
x-stoplight:
id: 2ncw0y7gw3h9j
description: Facebook ID that identifies the user
challenge_progress:
type: array
items:
type: object
properties:
challenge_campaign_id:
type: integer
description: ID of the campaign generated by Punchh
progress_count:
type: integer
description: Value of progress that the user has made toward the challenge while
in the incumbent system
loyalty_cards:
$ref: '#/components/schemas/loyalty-cards'
examples:
default:
value:
address_line1: ADDRESS_GOES_HERE
birthday: '1999-01-01'
city: Mountain View
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
gifted_value: 97
initial_points: 3
last_name: LAST_NAME_GOES_HERE
marketing_email_subscription: false
marketing_pn_subscription: true
migrated_redeemables:
- redeemable_id: '2329'
rewards_count: '2'
migrated_rewards: 10.9
migrated_rewards_expiration_date: '2020-01-31'
name: Incumbent Loyalty Program
original_membership_no: 123456789
original_phone: 1111111111
original_points: 97
phone: 1111111111
preferred_location: 311031
registration_date: '2017-12-23T19:39:54+00:00'
state: California
street_address: ADDRESS_GOES_HERE
user_relations:
- name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
relation: spouse
birthday: '1999-01-01'
- name: FIRST_NAME_GOES_HERE
relation: kid
birthday: '1999-01-01'
zip_code: '94040'
gift_cards:
- card_number: CARD_NUMBER_GOES_HERE
epin: EPIN_GOES_HERE
- card_number: CARD_NUMBER_GOES_HERE
epin: ''
migration_user_id: 14017338
fb_uid: ''
challenge_progress:
- challenge_campaign_id: 21571
progress_count: 2
loyalty_cards:
- card_number: CARD_NUMBER_GOES_HERE
status: ACTIVE
card_signup_date: '2021-05-03'
- card_number: CARD_NUMBER_GOES_HERE
status: SUSPENDED
card_signup_date: '2021-03-03'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Update Business Migration User
description: Updates a business migration user in the Punchh system. The user attributes in the
[Create Business Migration User](/docs/dev-portal-platform-functions/apis/platform-functions-api/paths/~1api2~1dashboard~1migration_users/post)
API can be updated by invoking the Update Business Migration User API. Append the value of the
`migration_user_id` parameter to the endpoint path.
operationId: dashboard_update_business_migration_user
tags:
- Business Migration Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: 2c80a36d0db41
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Name of the loyalty program of the business
birthday:
type: string
format: date
description: Date of birth of the user, in YYYY-MM-DD format
phone:
type: integer
format: int32
description: Phone number of the user. This is used as the unique identifier for migration
of the user. This should be a 10-digit value without special characters (e.g., hyphen,
etc.).
email:
type: string
description: Email address of the user that will be added to the migration data. Migration
can be based on this value as well.
original_membership_no:
type: integer
format: int32
description: Membership number of the user as per the incumbent loyalty program. Migration
can be based on this value as well.
registration_date:
type: string
format: date-time
description: 'Registration date of the loyalty program. Accepted formats: YYYY-MM-DD
or YYYY-MM-DDTHH:mm:ssZ. If only a date is provided, the time defaults to 00:00:00.'
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
original_phone:
type: string
description: Phone number of the user. This value may contain special characters (e.g.,
hyphen, etc.).
original_points:
type: number
format: float
description: Number of points that will be migrated from the incumbent loyalty program
rate_of_conversion:
type: number
format: float
description: Rate of conversion of loyalty points from the incumbent loyalty program.
This must be sent with the request when updating original points for a migration user.
fb_uid:
type: string
description: Facebook ID that identifies the user
initial_points:
type: integer
format: int32
description: Number of points that will be used to determine a guest’s membership tier
during migration. Contact your Punchh representative for more information.
migrated_rewards:
type: integer
format: int32
description: Number of points that will be added to the migrated points from the incumbent
loyalty program
migrated_rewards_expiration_date:
type: string
enum:
- YYYY-MM-DD
format: date
description: 'Expiration date of the currency value of rewards that will be migrated
from the incumbent loyalty program. Note: This expiration date will be applicable
only on the currency value passed in the `migrated_rewards` parameter.'
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
address_line1:
type: string
description: Address of the user
city:
type: string
description: City where the user lives
state:
type: string
description: State where the user lives
zip_code:
type: string
description: Zip code where the user lives
preferred_location:
type: string
description: Favorite location ID of the user
migrated_redeemables:
type: array
items:
type: object
properties:
redeemable_id:
type: integer
format: int32
description: ID of the redeemable that will be migrated for the user. This redeemable
should be active on the platform. After the user has been migrated, the user
will be able to use this redeemable.
rewards_count:
type: integer
format: int32
description: Number of redeemables that will be migrated for the guest
user_relations:
type: array
items:
type: object
properties:
name:
type: string
description: Name of the relative
relation:
type: string
description: Relation to the user. Valid values are "spouse" and "kid".
birthday:
type: string
format: date
description: Birthday of the relative, in YYYY-MM-DD format
gift_cards:
type: array
items:
type: object
properties:
card_number:
type: string
description: "Gift card number. There are validations when adding gift cards to\
\ migration data. If the gift card data is blank for a business migration user,\
\ then the user is created, but the gift card data is skipped from getting uploaded\
\ with the rest of the data provided for the business migration user. If gift\
\ cards with both valid details and blank card details exist in the Punchh system\
\ for a business migration user, then when the user signs up with their email\
\ address, only gift cards that have valid details are added to the user’s account.\
\ \n\nGift cards are added to the business migration user account if 1) gift\
\ card details are valid or 2) only the gift card number is provided without\
\ the epin of the gift card. If one gift card has valid details and another\
\ gift card either has invalid or blank card details, then the gift card with\
\ valid card details is added to the user’s account.\n\nGift cards are not added\
\ to the business migration user account if 1) the gift card number and epin\
\ are passed blank, passed as an empty string, or passed with a value nil in\
\ the string, 2) one gift card is passed with blank card details and another\
\ with invalid card details, 3) multiple gift cards with invalid card numbers\
\ are passed, 4) the gift card number is invalid, but the epin of the gift card\
\ is valid, 5) the gift card number is valid, but epin for the gift card is\
\ invalid, and 6) the gift card number is blank and only epin of the gift card\
\ is passed."
epin:
type: string
description: EPIN of the gift card. Leave this blank if a PIN is not available
or not required.
challenge_progress:
type: array
items:
type: object
properties:
challenge_campaign_id:
type: integer
description: ID of the campaign generated by Punchh
progress_count:
type: integer
description: Value of progress that the user has made toward the challenge while
in the incumbent system
loyalty_cards:
$ref: '#/components/schemas/loyalty-cards'
examples:
default:
value:
name: Incumbent Loyalty Program
birthday: '1999-01-01'
phone: 1111111111
email: test@example.com
original_membership_no: 123456789
registration_date: '2017-12-23T19:39:54+00:00'
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
original_phone: '1111111111'
original_points: 97
rate_of_conversion: 1
fb_uid: ''
initial_points: 3
migrated_rewards: 10.9
migrated_rewards_expiration_date: '2020-01-31'
marketing_pn_subscription: true
marketing_email_subscription: false
address_line1: ADDRESS_GOES_HERE
city: Mountain View
state: California
zip_code: '94040'
preferred_location: '311031'
migrated_redeemables:
- redeemable_id: 2329
rewards_count: 2
user_relations:
- name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
relation: spouse
birthday: '1999-01-01'
- name: FIRST_NAME_GOES_HERE
relation: kid
birthday: '1999-01-01'
gift_cards:
- card_number: CARD_NUMBER_GOES_HERE
epin: EPIN_GOES_HERE
- card_number: CARD_NUMBER_GOES_HERE
epin: ''
challenge_progress:
- challenge_campaign_id: 21571
progress_count: 2
loyalty_cards:
- card_number: CARD_NUMBER_GOES_HERE
status: ACTIVE
card_signup_date: '2021-05-03'
- card_number: CARD_NUMBER_GOES_HERE
status: SUSPENDED
card_signup_date: '2021-03-03'
description: ''
parameters:
- schema:
type: string
name: ID
in: path
required: true
description: The value of the `migration_user_id` parameter returned in the response of the [Create
Business Migration User](/docs/dev-portal-platform-functions/e3f5573f9451c-create-business-migration-user)
API
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Delete Business Migration User
description: Deletes a business migration user from the Punchh system. Append the value of the `migration_user_id`
parameter to the endpoint path.
operationId: dashboard_delete_business_migration_user
tags:
- Business Migration Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
x-stoplight:
id: 59118e4ea4723
/api2/dashboard/meta:
get:
responses:
'200':
description: 'Note: The response will include these additional parameters only when the
option to include additional loyalty configurations in platform Meta API is enabled in the
Punchh platform for the business:
- program_type
- points_conversion_type
- guest_identity_code_type
- points_conversion_threshold
- guest_lookup_type
- membership_levels
Contact your Punchh representative for more information about this Punchh platform configuration.
'
content:
application/json:
schema:
type: object
properties:
redeemables:
$ref: '#/components/schemas/redeemables'
program_type:
type: string
x-stoplight:
id: tevmc290uchgx
description: 'Provides information about the program type configured for the business
in the Punchh platform. Possible values:
- points_unlock_redeemables - Indicates the program is Points Unlock Redeemables
based
- points - Indicates the program is points convert to rewards or currency
- visit - Indicates the program is Visit-based
- points_and_visits - Indicates the program is hybrid and includes both points and
visits
- none - Indicates no loyalty program
See [Punchh Offers and Program Types](/docs/dev-portal-developer-resources/150fedd8daa77-punchh-offers-and-program-types#program-types).
You must log in to the developer portal to access the topic.'
points_conversion_type:
type: string
x-stoplight:
id: tqup6rbzipvg8
description: "Provides information about the conversion type configured for the business\
\ based on the program type selected for the business in the Punchh platform. Possible\
\ values: \n- staged - Applicable when `program_type` is points_unlock_redeemables\
\ or points. The staged value indicates that points are earned normally (check-ins,\
\ purchases, etc.), but when you redeem, the system does not deduct points immediately\
\ at the time of generating a redemption code or SSF code.\n- none - Applicable\
\ when `program_type` is points. The none value indicates points do not get converted\
\ into any entity, such as rewards or currency.\n- currency - Applicable when `program_type`\
\ is points. The currency value indicates that earned points are automatically converted\
\ to currency at predefined point thresholds.\n- rewards - Applicable when `program_type'\
\ is points. The rewards value indicates that earned points are automatically converted\
\ to rewards at predefined point thresholds.\nSee [Punchh Offers and Program Types](/docs/dev-portal-developer-resources/150fedd8daa77-punchh-offers-and-program-types#program-types).\
\ You must log in to the developer portal to access the topic."
guest_identity_code_type:
type: string
x-stoplight:
id: jobacfplrht51
description: How a user is identified at the POS (the POS scanner type - e.g., barcode,
qr_code, etc.)
points_conversion_threshold:
type: integer
x-stoplight:
id: b0w1gnizsv6zo
description: The threshold value at which a user's accumulated points get converted
to banked rewards. For example, after accumulating 100 points, the points get converted
to dollars.
guest_lookup_type:
type: string
x-stoplight:
id: 0u3cuzh9sdlrh
description: An identifier in the mobile app and iFrame used for guest look-up at
the POS. If the bar code is configured as the guest’s identity in the Punchh platform
for the business, the mobile app and iFrame will only support phone number for guest
look-up. Contact your Punchh representative for more information about this Punchh
platform configuration.
membership_levels:
$ref: '#/components/schemas/Membership-Levels'
examples:
default:
value:
redeemables:
- redeemable_image_url: IMAGE_URL_GOES_HERE
redeemable_properties: Merchandise
redeemable_id: 106
name: Unlock redeemable at 200 points.
description: Free with the purchase of an entree.
points_required_to_redeem: 200
- redeemable_image_url: IMAGE_URL_GOES_HERE
redeemable_properties: null
redeemable_id: 2397
name: 'Free Brownie for Birthday '
description: 'Free Brownie '
points_required_to_redeem: 0
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Dashboard Meta
parameters:
- $ref: '#/components/parameters/authorization-header'
operationId: dashboard_meta_api
description: 'Returns a list of redeemables created in the business
>Any update made to the configuration in the Punchh platform will be reflected in the API response
after a 15-minute delay, instead of in real time, to improve performance.'
x-stoplight:
id: a72ad65058b7c
tags:
- Meta
/api2/dashboard/roles:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
role_id:
type: integer
description: Unique ID assigned by Punchh to a role created by an admin from the
Punchh platform
name:
type: string
description: Name of a role created by an admin from the Punchh platform
examples:
default:
value:
- role_id: 214
name: Business Owner
- role_id: 215
name: Business Manager
- role_id: 216
name: Site Admin
- role_id: 511
name: Limited Site Admin
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Get Admin Roles List
description: Returns the list of roles created in a business
parameters:
- $ref: '#/components/parameters/authorization-header'
operationId: dashboard_get_admin_roles_list
tags:
- Business Admin Users
x-stoplight:
id: baf04e66e4da3
/api2/dashboard/business_admins:
post:
responses:
'201':
description: ''
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: First name of the business admin
last_name:
type: string
description: Last name of the business admin
timezone:
type: string
description: Time zone displayed (e.g., "America/Los_Angeles") when the business admin
views stats and events in the Punchh platform
role_id:
type: integer
description: Unique ID of the role assigned to the business admin. This ID is generated
by Punchh.
business_admin_id:
type: integer
description: Unique ID assigned to the business admin
read_only:
type: boolean
description: Whether the business admin is read-only or not
suspend:
type: boolean
description: Whether the business admin has been suspended or not
franchisee_id:
type: integer
description: Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
locations:
type: array
description: Locations that the business admin can access in the Punchh platform
items:
type: object
properties:
location_id:
type: integer
description: ID of the location that the business admin can access
store_number:
type: string
description: Store number of the location that the business admin can access
location_groups:
type: array
description: Location groups that the business admin can access in the Punchh platform
items:
type: object
properties:
location_group_id:
type: integer
description: ID of the location group that the business admin can access
name:
type: string
description: Name of the location group that the business admin can access
examples:
default:
value:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 214
business_admin_id: 5399
read_only: false
suspend: false
franchisee_id: 12
locations:
- location_id: 310969
store_number: ' 68'
- location_id: 310971
store_number: ' 70'
location_groups:
- location_group_id: 1619
name: Location Group 1
- location_group_id: 2086
name: Location Group 2
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Create Business Admin
description: Creates a business admin in the Punchh platform
operationId: dashboard_create_business_admin
tags:
- Business Admin Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: 3f287a66ea2d0
requestBody:
content:
application/json:
schema:
type: object
properties:
business_admin:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: 'First name of the business admin
'
last_name:
type: string
description: 'Last name of business admin
'
timezone:
type: string
description: "Time zone displayed (e.g., \"America/Los_Angeles\") when the business\
\ admin views data in the Punchh platform \n"
location_ids:
type: array
description: 'Location IDs to which the business admin will be granted access. Preference
is given to `store_numbers` if both `location_ids` and `store_numbers` are provided.
'
items:
type: integer
store_numbers:
type: array
description: 'Store numbers of the locations to which the business admin will be
granted access. Preference is given to `store_numbers` if both `location_ids`
and `store_numbers` are provided.
'
items:
type: integer
role_id:
type: integer
description: Fetch from the response of the [Get Admin Roles List](/docs/dev-portal-platform-functions/b3A6NTAyODA0Nzc-get-admin-roles-list)
API
location_group_ids:
type: array
description: 'Location group IDs to which the business admin will be granted access
'
items:
type: integer
read_only:
type: boolean
description: 'Makes the business admin read-only
'
suspend:
type: boolean
description: 'Suspends the business admin
'
franchisee_id:
type: integer
description: 'Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
'
skip_notifications:
type: boolean
description: Send this parameter with a value of "true" if you want to skip any
notifications to be sent to the business admin for this event
examples:
business_admin:
value:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
location_ids:
- 310969
- 310971
store_numbers:
- 68
- 70
role_id: 214
location_group_ids:
- 2086
- 1619
read_only: false
suspend: false
franchisee_id: 12
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: First name of the business admin
last_name:
type: string
description: Last name of the business admin
timezone:
type: string
description: Time zone displayed (e.g., "America/Los_Angeles") when the business admin
views stats and events in the Punchh platform
role_id:
type: integer
description: Unique ID of the role assigned to the business admin. This ID is generated
by Punchh.
business_admin_id:
type: integer
description: Unique ID assigned to the business admin
read_only:
type: boolean
description: Whether the business admin is read-only or not
suspend:
type: boolean
description: Whether the business admin has been suspended or not
franchisee_id:
type: integer
description: Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
locations:
type: array
description: Locations that the business admin can access in the Punchh platform
items:
type: object
properties:
location_id:
type: integer
description: ID of the location that the business admin can access
store_number:
type: string
description: Store number of the location that the business admin can access
location_groups:
type: array
description: Location groups that the business admin can access in the Punchh platform
items:
type: object
properties:
location_group_id:
type: integer
description: ID of the location group that the business admin can access
name:
type: string
description: Name of the location group that the business admin can access
examples:
default:
value:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 11
business_admin_id: 30803
read_only: false
suspend: false
franchisee_id: 12
locations:
- location_id: 9
store_number: '21'
- location_id: 10
store_number: '10'
location_groups:
- location_group_id: 1
name: New Business Location group
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Update Business Admin
operationId: dashboard_update_business_admin
tags:
- Business Admin Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: e3392b2acaf40
description: Updates a business admin in the Punchh platform
requestBody:
content:
application/json:
schema:
type: object
properties:
business_admin_id:
type: string
description: ID of the business admin to be updated
business_admin:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: First name of the business admin
last_name:
type: string
description: Last name of the business admin
timezone:
type: string
description: Time zone displayed (e.g., "America/Los_Angeles") when the business
admin views data in the Punchh platform
role_id:
type: integer
description: Unique ID of the role assigned to the business admin. This ID is generated
by Punchh.
location_ids:
type: array
description: Location IDs to which the business admin will be granted access. Preference
is given to `store_numbers` if both `location_ids` and `store_numbers` are provided.
items:
type: integer
store_numbers:
type: array
description: Store numbers of the locations to which the business admin will be
granted access. Preference is given to `store_numbers` if both `location_ids`
and `store_numbers` are provided.
items:
type: string
location_group_ids:
type: array
description: Location group IDs to which the business admin will be granted access
items:
type: string
read_only:
type: boolean
description: Makes the business admin read-only
suspend:
type: boolean
description: Suspends the business admin
franchisee_id:
type: integer
description: Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
examples:
default:
value:
business_admin_id: '30803'
business_admin:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 11
location_ids:
- 9
- 10
store_numbers:
- '21'
- '10'
location_group_ids:
- '1'
read_only: false
suspend: false
franchisee_id: 12
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: First name of the business admin
last_name:
type: string
description: Last name of the business admin
timezone:
type: string
description: Time zone displayed (e.g., "America/Los_Angeles") when the business admin
views stats and events in the Punchh platform
role_id:
type: integer
description: Unique ID of the role assigned to the business admin. This ID is generated
by Punchh.
business_admin_id:
type: integer
description: Unique ID assigned to the business admin
franchisee_id:
type: integer
description: Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
locations:
type: array
description: Locations that the business admin can access in the Punchh platform
items:
type: object
properties:
location_id:
type: integer
description: ID of the location that the business admin can access
store_number:
type: string
description: Store number of the location that the business admin can access
location_groups:
type: array
description: Location groups that the business admin can access in the Punchh platform
items:
type: object
properties:
location_group_id:
type: integer
description: ID of the location group that the business admin can access
name:
type: string
description: Name of the location group that the business admin can access
examples:
default:
value:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 11
business_admin_id: 30803
franchisee_id: 12
locations:
- location_id: 9
store_number: '21'
- location_id: 10
store_number: '10'
location_groups:
- location_group_id: 1
name: New Business Location group
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Show Business Admin
operationId: dashboard_show_business_admin
tags:
- Business Admin Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: 84d3dba781bcd
description: Gets the details of a business admin in the Punchh platform
requestBody:
content:
application/json:
schema:
type: object
properties:
business_admin_id:
type: string
description: ID of the business admin whose details you want to fetch
examples:
default:
value:
business_admin_id: '30803'
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Delete Business Admin
operationId: dashboard_delete_business_admin
tags:
- Business Admin Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: d0849f41e3c4c
description: Deletes a business admin from the Punchh platform
requestBody:
content:
application/json:
schema:
type: object
properties:
business_admin_id:
type: string
description: ID of the business admin to be deleted
examples:
default:
value:
business_admin_id: '30803'
/api2/dashboard/business_admins/invite:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: First name of the business admin
last_name:
type: string
description: Last name of the business admin
timezone:
type: string
description: Time zone displayed (e.g., "America/Los_Angeles") when the business admin
views stats and events in the Punchh platform
role_id:
type: integer
description: Unique ID of the role assigned to the business admin. This ID is generated
by Punchh.
business_admin_id:
type: integer
description: Unique ID assigned to the business admin
read_only:
type: boolean
description: Whether the business admin is read-only or not
suspend:
type: boolean
description: Whether the business admin has been suspended or not
franchisee_id:
type: integer
description: Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
wants_notify_for_campaign_approval_email:
type: boolean
description: Allows the business admin to receive notifications for campaign approval
emails. The business admin must have Workflow Management permission. Otherwise,
the business admin will be notified but will not have access to campaigns that are
pending approval.
locations:
type: array
description: Locations that the business admin can access in the Punchh platform
items:
type: object
properties:
location_id:
type: integer
description: ID of the location that the business admin can access
store_number:
type: string
description: Store number of the location that the business admin can access
location_groups:
type: array
description: Location groups that the business admin can access in the Punchh platform
items:
type: object
properties:
location_group_id:
type: integer
description: ID of the location group that the business admin can access
name:
type: string
description: Name of the location group that the business admin can access
examples:
default:
value:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 214
business_admin_id: 5399
read_only: false
suspend: false
franchisee_id: 11
wants_notify_for_campaign_approval_email: true
locations:
- location_id: 310969
store_number: ' 68'
- location_id: 310971
store_number: ' 70'
location_groups:
- location_group_id: 1619
name: Location Group 1
- location_group_id: 2086
name: Location Group 2
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Invite Business Admin
description: Invites a business admin to use the Punchh platform
operationId: dashboard_invite_business_admin
tags:
- Business Admin Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: af32eb740fd58
requestBody:
content:
application/json:
schema:
type: object
properties:
business_admin:
type: object
properties:
email:
type: string
description: Email address of the business admin
first_name:
type: string
description: First name of the business admin
last_name:
type: string
description: Last name of the business admin
timezone:
type: string
description: Time zone displayed (e.g., "America/Los_Angeles") when the business
admin views data in the Punchh platform
location_ids:
type: array
description: Location IDs to which the business admin will be granted access. Preference
is given to `store_numbers` if both `location_ids` and `store_numbers` are provided.
items:
type: integer
store_numbers:
type: array
description: Store numbers of the locations to which the business admin will be
granted access. Preference is given to `store_numbers` if both `location_ids`
and `store_numbers` are provided.
items:
type: integer
role_id:
type: integer
description: Unique ID of the role assigned to the business admin. This ID is generated
by Punchh.
location_group_ids:
type: array
description: Location group IDs to which the business admin will be granted access
items:
type: integer
read_only:
type: boolean
description: Makes the business admin read-only
suspend:
type: boolean
description: Suspends the business admin
franchisee_id:
type: integer
description: Unique franchisee ID associated with the business admin (enabled for
the franchisee model only)
wants_notify_for_campaign_approval_email:
type: boolean
description: Allows the business admin to receive notifications for campaign approval
emails. The business admin must have Workflow Management permission. Otherwise,
the business admin will be notified but will not have access to campaigns that
are pending approval.
examples:
business_admin:
value:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
location_ids:
- 310969
- 310971
store_numbers:
- 68
- 70
role_id: 214
location_group_ids:
- 2086
- 1619
read_only: false
suspend: false
franchisee_id: 11
wants_notify_for_campaign_approval_email: true
/api2/dashboard/custom_segments:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
custom_segment_id:
type: integer
description: Unique ID of a custom segment. This is generated by Punchh.
name:
type: string
description: Name of the custom segment as given by the admin user when creating
the custom segment
description:
type: string
description: Description of the custom segment as given by the admin user when creating
the custom segment
created_at:
type: string
description: Date/time when the custom segment was created in the system, in [ISO
8601](https://en.wikipedia.org/wiki/ISO_8601) format
updated_at:
type: string
description: Date/time when the custom segment was last updated in the system, in
[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format
examples:
default:
value:
- custom_segment_id: 1778
name: Example Custom Segment One
description: This segment is created as an example of custom segments.
created_at: '2015-06-09T13:24:02Z'
updated_at: '2015-06-09T14:18:14Z'
- custom_segment_id: 2008
name: Example Custom Segment two
description: This segment is created as second example of custom segments.
created_at: '2015-07-27T09:50:40Z'
updated_at: '2015-07-27T09:50:40Z'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: List All Custom Segments
description: Returns a list of all custom segments created by a business
operationId: dashboard_list_all_custom_segments
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- schema:
type: string
default: '15402'
name: ID
in: path
required: true
description: The value of the `custom_segment_id` parameter returned in the response of the [Create
a Custom Segment](/docs/dev-portal-platform-functions/1fd466d125efd-create-a-custom-segment)
API
x-stoplight:
id: 081af5761130d
post:
responses:
'201':
description: ''
content:
application/json:
schema:
type: object
properties:
custom_segment_id:
type: integer
description: Unique ID of the custom segment. This is generated by Punchh.
name:
type: string
description: Name of the custom segment as given by the admin user when creating the
custom segment
description:
type: string
description: Description of the custom segment as given by the admin user when creating
the custom segment
created_at:
type: string
description: Date/time when the custom segment was created in the system, in [ISO
8601](https://en.wikipedia.org/wiki/ISO_8601) format
updated_at:
type: string
description: Date/time when custom segment was last updated in the system, in [ISO
8601](https://en.wikipedia.org/wiki/ISO_8601) format
examples:
default:
value:
custom_segment_id: 15376
name: Dummy Custom Segment
description: Testing Creation of Custom Segment.
created_at: '2018-01-10T10:06:39Z'
updated_at: '2018-01-10T10:06:39Z'
'401':
$ref: '#/components/responses/401-unauthorized'
'422':
description: ''
content:
application/json:
schema:
type: object
properties:
name:
type: array
items:
type: string
examples:
default:
value:
name:
- Name has already been taken
summary: Create a Custom Segment
description: Creates an empty custom segment for a business. Users have to be added later to an
empty segment.
operationId: dashboard_create_custom_segment
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
x-stoplight:
id: 1fd466d125efd
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Name of the custom segment that will be created
description:
type: string
description: Description of the custom segment that will be created
examples:
default:
value:
name: Dummy Custom Segment
description: Testing Creation of Custom Segment.
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
custom_segment_id:
type: integer
description: Unique ID of the custom segment. This is generated by Punchh.
name:
type: string
description: Name of the custom segment as given by the admin user when creating the
custom segment
description:
type: string
description: Description of the custom segment as given by the admin user when creating
the custom segment
created_at:
type: string
description: Date/time when the custom segment was created in the system, in [ISO
8601](https://en.wikipedia.org/wiki/ISO_8601) format
updated_at:
type: string
description: Date/time when the custom segment was last updated in the system, in
[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format
examples:
default:
value:
custom_segment_id: 15401
name: Updated Name - Dummy Custom Segment
description: Updated Description - Request to create dummy custom segment.
created_at: '2018-01-10T10:33:14Z'
updated_at: '2018-01-10T10:37:21Z'
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Update a Custom Segment
description: Updates the name and/or description of a custom segment
operationId: dashboard_update_custom_segment
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: name
description: Updated name of the custom segment
- schema:
type: string
in: query
name: description
description: Updated description of the custom segment
- schema:
type: string
in: query
name: custom_segment_id
description: Unique ID of the custom segment that will be updated. This ID is generated by Punchh
when the custom segment is created.
- $ref: '#/components/parameters/accept'
x-stoplight:
id: c70c06b464328
delete:
responses:
'202':
description: ''
content:
application/json:
schema:
type: object
properties:
accepted:
type: string
examples:
default:
value:
accepted: Custom Segment Dummy Custom Segment has been marked for deletion
'401':
$ref: '#/components/responses/401-unauthorized'
'404':
description: ''
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
not_found:
type: string
examples:
default:
value:
errors:
not_found: Custom Segment not found.
summary: Delete a Custom Segment
description: Deletes a custom segment from the database
operationId: dashboard_delete_custom_segment
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: custom_segment_id
description: Unique ID of the custom segment that will be deleted
- $ref: '#/components/parameters/accept'
x-stoplight:
id: c1c3e6c17e5ab
/api2/dashboard/custom_segments/members:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
custom_segment_member_id:
description: Unique alphanumeric ID assigned to the user when the user becomes a
member of a particular custom segment. One user can belong to multiple custom
segments. This is not the Punchh identifier.
type: string
custom_segment_id:
type: integer
description: Unique ID of the custom segment. This is generated by Punchh.
email:
type: string
description: Email address of the user
user_id:
type: integer
description: Unique ID of the user. This is generated by Punchh.
created_at:
type: string
description: Date/time when the user was added to the custom segment, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
updated_at:
type: string
description: Date/time when the user was last updated as a part of the custom segment,
in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format
examples:
default:
value:
- custom_segment_member_id: 84767860
custom_segment_id: 15402
email: test@example.com
user_id: 111111111
created_at: '2018-01-10T11:54:11Z'
updated_at: '2018-01-10T11:54:11Z'
'400':
description: ''
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: 'Required parameter missing or the value is empty: user_id'
'401':
$ref: '#/components/responses/401-unauthorized'
'404':
description: ''
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
not_found:
type: string
examples:
default:
value:
errors:
not_found: Member not found.
summary: Search If User Exists in a Custom Segment
description: Determines if a specific user belongs to a custom segment. Either `email` or `user_id`
should be provided in the request to search for the user; `user_id` will be preferred if both
are provided.
operationId: dashboard_search_user_in_custom_segment
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: custom_segment_id
description: Unique ID of the custom segment
- schema:
type: string
in: query
name: email
description: Email address of the user
- $ref: '#/components/parameters/accept'
- schema:
type: integer
format: int64
in: query
name: user_id
description: Unique ID of the user. This is generated by Punchh.
x-stoplight:
id: ccb989674e456
post:
responses:
'201':
description: User exists in Punchh.
content:
application/json:
schema:
type: object
properties:
custom_segment_member_id:
type: string
description: Unique alphanumeric ID assigned to the user when the user becomes a member
of a particular custom segment. One user can belong to multiple custom segments.
This is not the Punchh identifier.
custom_segment_id:
type: integer
description: Unique ID of the custom segment. This is generated by Punchh.
email:
type: string
description: Email address of the user who was added to the custom segment
user_id:
type: integer
description: Unique ID of the user who was added to the custom segment. This is generated
by Punchh.
created_at:
type: string
description: Date/time when the user was added to the custom segment, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
updated_at:
type: string
description: Date/time when the user was last updated as a part of the custom segment,
in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format
examples:
default:
value:
custom_segment_member_id: 84767857
custom_segment_id: 15401
email: test@example.com
user_id: 111111111
created_at: '2018-01-10T10:53:43Z'
updated_at: '2018-01-10T10:53:43Z'
'400':
description: ''
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: 'Required parameter missing or the value is empty: user_id'
'401':
$ref: '#/components/responses/401-unauthorized'
'404':
description: ''
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
not_found:
type: string
examples:
default:
value:
errors:
not_found: User does not exist.
summary: Add User to a Custom Segment
description: Adds a user to a custom segment. Either `email` or `user_id` should be provided in
the request; `user_id` will be preferred if both are provided.
operationId: dashboard_add_user_to_custom_segment
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
x-stoplight:
id: 58a8f70354885
requestBody:
content:
application/json:
schema:
type: object
properties:
custom_segment_id:
type: integer
description: Unique ID of the custom segment to which the user will be added
format: int64
email:
type: string
description: Email address of the user
user_id:
type: integer
description: Unique ID of the user. This is generated by Punchh.
format: int64
examples:
default:
value:
custom_segment_id: 15401
email: test@example.com
delete:
responses:
'204':
description: You will receive a 204 blank response.
content:
application/json:
schema:
type: object
properties: {}
summary: Remove User From a Custom Segment
description: Removes a user from a custom segment. Either `email` or `user_id` should be provided
in the request; `user_id` will be preferred if both are provided.
operationId: dashboard_remove_user_from_custom_segment
tags:
- Custom Segments
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: integer
format: int64
in: query
name: custom_segment_id
description: Unique ID of the custom segment from which the user will be removed. This is assigned
by Punchh.
- schema:
type: string
in: query
name: email
description: Email address of the user
- $ref: '#/components/parameters/accept'
- schema:
type: integer
format: int64
in: query
name: user_id
description: Unique ID of the user. This is generated by Punchh.
x-stoplight:
id: 0cc855124a01f
/api2/dashboard/users/reactivate:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
summary: Reactivate a User
description: Reactivates a user to resume check-ins, redemptions, emails, etc.
operationId: dashboard_reactivate_user
tags:
- Users
parameters:
- schema:
type: string
in: query
name: user_id
description: User ID of the guest in the Punchh system that will be reactivated. You can get this
value from the [User object](/docs/dev-portal-platform-functions/z6d3vh41qnftr-user-object).
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 7b42c4848257a
/api2/dashboard/users/deactivate:
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
summary: Deactivate a User
description: Deactivates a user in the Punchh system to disallow check-ins, redemptions, emails
etc.
operationId: dashboard_deactivate_user
tags:
- Users
parameters:
- schema:
type: string
in: query
name: user_id
description: User ID of the guest in the Punchh system that will be deactivated. You can get this
value from the [User object](/docs/dev-portal-platform-functions/z6d3vh41qnftr-user-object).
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 6008eab85b864
/api2/dashboard/users:
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
message:
type: string
examples:
default:
value:
message: Guest marked for deletion. Data will be automatically deleted within 7 days.
'404':
description: ''
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
user_not_found:
type: string
examples:
default:
value:
errors:
user_not_found: 'Cannot find corresponding user with ID: 1219017'
'422':
description: 'The following error is inaccurate: "Gift card(s) found! Please cashout/remove
from account before deletion". As we work to resolve this issue, note that this indicates
that the account you are attempting to delete has not been deactivated yet. Ensure that you
use the [Deactivate a User API](/docs/dev-portal-platform-functions/b3A6NTAyODA0OTI-deactivate-a-user)
before deleting the user.'
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: Gift card(s) found! Please cashout/remove from account before deletion.
summary: Delete a User
description: "Marks a deactivated user for deletion from the Punchh platform\n\n**Note**: Before\
\ deleting the user, deactivate the user via the [Deactivate a User API](/docs/dev-portal-platform-functions/b3A6NTAyODA0OTI-deactivate-a-user).\
\ \n\nThe number of days within which Punchh will delete a user can be configured for a business\
\ in the Punchh platform. The default value is set to 7 days. Contact your Punchh representative\
\ to update this configuration. After an API call is made to delete a user, the system waits for\
\ the configured number of days before actually deleting the user. For example, if the configured\
\ days to delete the user is 7 days, the system will delete the user on the 8th day (i.e., after\
\ waiting a full 7 days).\n\n\
\n\n**Note: Once a guest is marked for deletion, there is no API available to reverse the action.**\n\
\nWhen deleting a user, include one of the following deletion reasons: \n- delete_general\n- delete_test_data\
\ \n- anonymize_forget_me \n- anonymize_inactivity \n\nIf you don’t include a reason, the system\
\ does not fully delete the user’s data; instead it anonymizes the user's account email to \"\
@archive.com\" and retains the user's data. Although there are multiple reasons for both deletion\
\ and anonymization, the operation for each is the same. The reason is used solely for documentation\
\ and tracking purposes. \n\n### **Delete**\nDeletes the user and all associated transaction data\
\ permanently:\n\n* We recommend this option when deleting a test user or some other valid reason\
\ for also purging transaction history\n\n* 'General' and 'Test Data' sub-reasons have the same\
\ functionality. It is important to provide the accurate reason for analysis purposes.\n\n**{\"\
reason\": \"delete_general\"}**\n*Use this option to permanately delete a guest account.*\n\n\
**{\"reason\": \"delete_test_data\"}**\n\n### **Anonymize**\n Deletes all of the user's PII (personally\
\ identifiable information), while keeping anonymized transaction data for reporting integrity.\
\ This is in compliance with GDPR/CCPA standards: \n * We recommend this option by default to\
\ keep accurate transaction history for valid guests while still respecting their privacy\n\n\
* 'Forget Me' and 'Inactivity' sub-reasons have the same functionality. It is important to provide\
\ the accurate reason for analysis purposes. \n\n**{\"reason\": \"anonymize_forget_me\"}**\n\
\n**{\"reason\": \"anonymize_inactivity\"}**"
operationId: dashboard_delete_user
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 991dd7066310b
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: User ID of the guest in the Punchh system that will be deleted. You can
get this value from the [User object](/docs/dev-portal-platform-functions/z6d3vh41qnftr-user-object).
reason:
type: string
description: 'Reason for deletion: delete_general, delete_test_data, anonymize_forget_me,
anonymize_inactivity'
required:
- user_id
examples:
default:
value:
user_id: '111111111'
reason: delete_general
patch:
operationId: dashboard_users_update
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/content-type'
- $ref: '#/components/parameters/accept'
- schema:
type: string
in: header
name: User-Agent
description: For more information, see [User Agent](/docs/dev-portal-online-ordering/ZG9jOjQ0OTU0NzY3-user-agent).
summary: Update a User
description: 'Updates any information contained within the User object
Note: Due to fraud protections, guests are permitted to update their birthdays only once. Subsequent
attempts to modify the birthday parameter using the API will fail. In such a case, even though
the API returns a 200 response, the user''s birthday is not updated in Punchh.
If you are updating custom profile fields, see [Updating Custom Profile Fields With the Punchh
Platform API](/docs/dev-portal-platform-functions/ebc7b58d69e82-updating-custom-profile-fields-with-the-punchh-platform-api)
for details. '
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/User'
examples:
default:
value:
address: ''
anniversary: null
avatar_remote_url: null
birthday: null
city: ''
communicable_email: test@example.com
created_at: '2019-04-24T12:39:06Z'
email: test@example.com
email_verified: false
facebook_signup: null
apple_signup: null
apple_uid: null
favourite_location_ids: ''
favourite_store_numbers: ''
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
gender: ''
has_generated_fb_email: false
last_name: LAST_NAME_GOES_HERE
marketing_email_subscription: true
marketing_pn_subscription: true
migrate_status: false
passcode_configured_for_giftcards: false
phone: '1111111111'
profile_field_answers: {}
referral_code: REFERRAL_CODE_GOES_HERE
referral_path: URL_GOES_HERE
secondary_email: ''
state: ''
superuser: false
terms_and_conditions: true
title: ''
updated_at: '2020-05-06T14:52:24Z'
user_as_qrcode: QR_CODE_GOES_HERE
user_code: P11111111
user_id: 111111111
preferred_locale: ''
user_relations: []
zip_code: null
verification_mode: null
sms_subscription: false
privacy_policy: false
age_verified_status: true
'422':
description: 'Unprocessable Entity: Current email address mismatch'
content:
application/json:
schema:
type: object
properties:
errors:
type: string
x-stoplight:
id: 5xrqhahqiy5j7
examples:
' Current email address mismatch':
value:
errors: Incorrect information submitted
x-stoplight:
id: 6351feaf591aa
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Punchh ID of the user
x-stoplight:
id: 9l24svmon26vm
email:
type: string
description: 'Current email address of the user. The value must match the current email
address stored on the Punchh platform for the `id` for the call to be successful. '
user:
$ref: '#/components/schemas/user-input'
required:
- id
- email
- user
examples:
Update a user:
value:
id: '111111111'
email: current@example.com
user:
email: new@example.com
last_name: LAST_NAME_GOES_HERE
first_name: FIRST_NAME_GOES_HERE
preferred_location_ids:
- 75
- 86
- 87
profile_field_answers:
upf0: Lemonade
upf1: Pink
age_verified_status: true
Update access token for an external IDP user:
value:
id: 111111111
email: test@example.com
user:
email: test@example.com
external_source: customer_id
external_source_id: '11111111111111111111'
/api2/dashboard/eclub_guests:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'400':
description: Invalid data
content:
application/json:
examples:
default:
value:
status: 400
error: data was not valid JSON
'401':
$ref: '#/components/responses/401-unauthorized'
'404':
description: Location not found based on store_number
content:
application/json:
examples:
default:
value:
errors:
location_not_found: 'Cannot find corresponding location with store_number: 1234512345'
'422':
description: 'Error returned in case of Invalid source
'
content:
application/json:
examples:
default:
value:
message: Invalid source! Please check configuration for valid source.
summary: eClub Guest Upload
description: "Allows you to upload a list of eClub guests along with their details\n\n#### eClub\
\ Update\nUse the eClub Guest Upload API to update the user information as well. The eClub user\
\ information that can be updated and other eClub settings are configured in the Punchh platform.\
\ This determines which parameters in the `user` object can be updated. The eClub user information\
\ can also be updated manually via the Punchh platform. Contact your Punchh representative to\
\ update these Punchh platform configuration settings. \n\
\n**Note:** \n\n1\\. If the \"Explicit-Opt in\" flag is enabled, `marketing_email_subscription`\
\ is a required parameter. The value can be 0 / 1 / true / false. The values 'true' and 'false'\
\ are string, and 0 and 1 can be a string or an integer.\n\n2\\. If the business has “source”\
\ defined in the Punchh platform, only the source configured in the Punchh platform is considered\
\ valid in the API request and the user is created. If a “source” that is not configured for the\
\ business is passed in the API request, an error message is returned. If no “source” is passed,\
\ the user gets created (as an earlier functionality) as it is a non-mandatory parameter. \n\n3\\. If `active_registration` is sent\
\ as 'false' but `send_compliance_sms` is sent as 'true' in the API request, this call will be\
\ treated as a bulk upload and no campaigns or compliance/opt-in SMS will be triggered for the\
\ user uploaded through this API call.\n\n4\\. Either `email` or `phone` can be sent in the API\
\ request. The schema indicates that both are required; however if one is sent, then the other\
\ is not required."
operationId: dashboard_eclub_guest_upload
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: bf43962d4c609
tags:
- eClub
requestBody:
content:
application/json:
schema:
type: object
properties:
store_number:
type: string
description: Store number of the location
source:
type: string
description: Name of the source from where guests are coming. The source for eClub widgets
is defined in the Punchh platform. Contact your Punchh representative to update this
Punchh platform configuration.
user:
type: object
properties:
email:
type: string
description: Email address of the user
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
phone:
type: string
description: Phone number of the user
address_line1:
type: string
description: Address of the user
state:
type: string
description: State where the user lives
zip_code:
type: string
description: Zip code where the user lives
birthday:
type: string
description: Date of birth of the user, in YYYY-MM-DD format
program_anniversary:
type: string
description: Registration date of the loyalty program, in ISO 8601 YYYY-MM-DDTHH:mm:SSZ
format
marketing_email_subscription:
type: string
description: Whether the user has subscribed to receive marketing emails or not.
If the "Explicit-Opt in" flag is enabled, `marketing_email_subscription` is required.
The values 'true' and 'false' are string, and 0 and 1 can be a string or an integer.
active_registration:
type: string
description: Send 'true' if the user is signing up directly (instead of as part
of a bulk upload)
send_compliance_sms:
type: string
description: Send 'true' to trigger compliance/opt-in SMS for the user
title:
type: string
description: Salutation as selected by the user
gender:
type: string
description: Gender of the user
code:
type: string
description: Profile field question code configured in the Punchh platform. It is
used to submit answers to profile field questions configured in the Punchh platform.
A total of 25 answers can be submitted. The keys range from 'upf0' to 'upf24'.
If questions have multiple answers, the values should be separated by a | character
(pipe).
external_source:
type: string
description: External source name (third-party IDP). Possible values for `external_source`
are salesforce, customer_id, mparticle, azure, aws_cognito, auth0, and ext_idp.
If you are using a different one, please reach out to your implementation manager
to add a new value. The values are case-sensitive.
external_source_id:
type: string
description: ID of the customer in the mentioned external source name (provided
in the `external_source` request parameter), a unique identifier generated by
the third-party IDP (GUID format).
' terms_and_conditions':
type: boolean
description: Whether the terms and conditions of a business have been accepted by
the user or not
privacy_policy:
type: boolean
description: Whether the user has agreed to the privacy policy to use the app as
per the configuration or not
required:
- email
- first_name
- last_name
- phone
- marketing_email_subscription
required:
- store_number
examples:
default:
value:
store_number: '3'
source: Test
user:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
phone: '1111111111'
address_line1: ''
state: ''
zip_code: '302001'
birthday: '1999-01-01'
program_anniversary: '2008-10-26T23:59:59-07:00'
marketing_email_subscription: '1'
active_registration: '0'
send_compliance_sms: '0'
title: Mr.
gender: Male
Test2: Oreo|Kit Kat
external_source: SOURCE_GOES_HERE
external_source_id: SOURCE_ID_GOES_HERE
terms_and_conditions: true
privacy_policy: true
description: ''
/api2/dashboard/franchisees:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
description: The Franchisee object returns the details of the franchisee.
properties:
name:
type: string
description: Name of the franchisee
email:
type: string
description: Email address of the franchisee
phone:
type: string
description: Phone number of the franchisee
address:
type: string
description: Address of the franchisee
state:
type: string
description: State where the franchisee is located
zip_code:
type: string
description: Zip code where the franchisee is located
created_by:
type: string
description: Admin user who created the franchisee
enable_guest_upload:
type: boolean
description: Whether to allow uploading a list of guests for the franchisee or not
examples:
default:
value:
name: New Franchisee
email: test@example.com
phone: '1111111111'
address: New Franchisee Address
state: New Franchisee State
zip_code: '909887'
created_by: test@example.com
enable_guest_upload: true
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Create Franchisee
description: Allows a business admin user to create franchisees for accessible locations
operationId: dashboard_create_franchisee
tags:
- Franchisee
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 6d431b40f1d51
requestBody:
content:
application/json:
schema:
type: object
properties:
franchisee:
type: object
properties:
name:
type: string
description: Name of the franchisee
email:
type: string
description: Email address of the franchisee
phone:
type: string
description: Phone number of the franchisee
address:
type: string
description: Address of the franchisee
state:
type: string
description: State where the franchisee is located
zip_code:
type: string
description: Zip code where the franchisee is located
enable_guest_upload:
type: boolean
description: Whether to allow uploading a list of guests for the franchisee or not
examples:
franchisee:
value:
name: New Franchisee
email: test@example.com
phone: '1111111111'
address: New Franchisee Address
state: New Franchisee State
zip_code: '909887'
enable_guest_upload: true
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
description: The Franchisee object returns the details of the franchisee.
properties:
name:
type: string
description: Name of the franchisee
email:
type: string
description: Email address of the franchisee
phone:
type: string
description: Phone number of the franchisee
address:
type: string
description: Address of the franchisee
state:
type: string
description: State where the franchisee is located
zip_code:
type: string
description: State where the franchisee is located
created_by:
type: string
description: Admin user who created the franchisee
enable_guest_upload:
type: boolean
description: Whether to allow uploading a list of guests for the franchisee or not
examples:
default:
value:
name: New Franchisee
email: test@example.com
phone: '1111111111'
address: New Franchisee Address
state: New Franchisee State
zip_code: '909887'
created_by: test@example.com
enable_guest_upload: true
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Update Franchisee
description: Allows a business admin user to update franchisees for accessible locations
operationId: dashboard_update_franchisee
tags:
- Franchisee
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 00e564e476a17
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: ID of the franchisee that will be updated
franchisee:
type: object
properties:
name:
type: string
description: Name of the franchisee
email:
type: string
description: Name of the franchisee
phone:
type: string
description: Name of the franchisee
address:
type: string
description: Address of the franchisee
state:
type: string
description: State where the franchisee is located
zip_code:
type: string
description: Zip code where the franchisee is located
enable_guest_upload:
type: boolean
description: Whether to allow uploading a list of guests for the franchisee or not
examples:
default:
value:
id: '3'
franchisee:
name: New Franchisee
email: test@example.com
phone: '1111111111'
address: New Franchisee Address
state: New Franchisee State
zip_code: '909887'
enable_guest_upload: true
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Delete Franchisee
description: Allows a business admin user to delete franchisees for accessible locations
operationId: dashboard_delete_franchisee
tags:
- Franchisee
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 5a0df9f35557f
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: ID of the franchisee that will be deleted
examples:
default:
value:
id: '3'
/api2/dashboard/social_cause_campaigns:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
social_cause_id:
type: integer
description: Unique ID assigned to the social cause campaign. This ID is generated
by Punchh when the social cause campaign is created in the Punchh platform.
name:
type: string
description: Name of the social cause campaign as defined by the business admin when
creating the social cause campaign in the Punchh platform
description:
type: string
description: Description of the social cause campaign as defined by the business admin
image_url:
type: string
description: URL of the image that is attached to the social cause campaign by the
business admin
miscellaneous:
type: 'null'
description: Returns miscellaneous response string as configured in the Punchh platform
city:
type: string
description: City
state:
type: string
description: State
street:
type: string
description: Street name
zip:
type: string
description: Zip code
phone_number:
type: string
description: Phone number
email:
type: string
description: Email address
address:
type: string
description: Address
activated:
type: boolean
description: Status of the social cause campaign
examples:
default:
value:
social_cause_id: 745
name: social_cause_campaign_19
description: social_cause_campaign_description_19
image_url: IMAGE_URL_GOES_HERE
miscellaneous: null
city: test_city
state: Rajasthan
street: ADDRESS_GOES_HERE
zip: '302001'
phone_number: '1111111111'
email: test@example.com
address: ADDRESS_GOES_HERE
activated: true
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Create Social Cause Campaign
description: Allows an admin user to create a social cause campaign on the Punchh platform
operationId: dashboard_create_social_cause_campaigns
tags:
- Social Cause Campaigns
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: ad1a1e17cd024
requestBody:
content:
application/json:
schema:
type: object
properties:
social_cause_campaign:
type: object
properties:
name:
type: string
description: Name of the social cause campaign as defined by the business admin
when creating the social cause campaign in the Punchh platform
description:
type: string
description: Description of the social cause campaign as defined by the business
admin
city:
type: string
description: City
state:
type: string
description: State
street:
type: string
description: Street name
zip:
type: string
description: Zip code
phone_number:
type: string
description: Phone number
email:
type: string
description: Email address
address:
type: string
description: Address
start_date:
type: string
description: Start date of the social cause campaign
end_date:
type: string
description: End date of the social cause campaign
remote_image_url:
type: string
description: URL of the image that is attached to the social cause campaign by the
business admin
examples:
social_cause_campaign:
value:
name: social_cause_campaign_19
description: social_cause_campaign_description_19
city: test_city
state: Rajasthan
street: ADDRESS_GOES_HERE
zip: '302001'
phone_number: '1111111111'
email: test@example.com
address: ADDRESS_GOES_HERE
start_date: '2019-06-26'
end_date: '2019-06-26'
remote_image_url: IMAGE_URL_GOES_HERE
/api2/dashboard/users/send_user_details_export:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Get User Export
description: Emails a guest export to the guest as well as the requester
operationId: dashboard_get_user_export
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 8a3865cae4903
requestBody:
content:
application/json:
schema:
type: object
properties:
email_admin_only:
type: boolean
description: When true, the email will be sent only to the admin.
user_id:
type: integer
description: User ID of the guest in the Punchh system. You can get this value from
the [User object](/docs/dev-portal-platform-functions/z6d3vh41qnftr-user-object).
examples:
default:
value:
email_admin_only: true
user_id: 111111111
/api2/wifi/users:
get:
responses:
'200':
description: User already exists either as a Loyalty Guest or as an eClub Member for the business.
'202':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
'403':
description: You do not have acccess to this feature.
content:
application/json:
examples:
default:
value:
errors:
unauthorized: you do not have acccess to this feature
'404':
description: User does not exist either as a Loyalty Guest or an eClub Member for the business.
summary: Guest Look-up for WiFi Enrollment
description: Returns whether a user exists in the business or not. Either `email` or `phone` should
be provided with the request.
operationId: dashboard_guest_lookup_for_wifi_enrollment
tags:
- WiFi Acquisition
parameters:
- schema:
type: string
in: query
name: client
description: Client key of the business
- schema:
type: string
in: query
name: email
description: Email address of the user that will be looked up
- schema:
type: string
in: query
name: phone
description: Phone number of the user that will be looked up
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 550dfb3d50f7b
post:
responses:
'202':
description: The user was added to the business as a WiFi-enrolled guest. If this call is made
accidentally for a user that already exists in the business, the record will be skipped and
the response will still be `202` accepted.
content:
application/json:
schema:
type: object
properties: {}
'401':
$ref: '#/components/responses/401-unauthorized'
summary: Enroll Guests via WiFi
description: Enrolls guests for eClub using WiFi as the acquisition channel. If both `location_id`
and `store_number` are provided, `store_number` will be preferred.
operationId: dashboard_enroll_guests_for_wifi
tags:
- WiFi Acquisition
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 6482652874a19
requestBody:
content:
application/json:
schema:
type: object
properties:
client:
type: string
description: Client key of the business
location_id:
type: integer
description: ID of the location where the user enrolls via WiFi
store_number:
type: integer
description: Store number of the location where the user enrolls via WiFi
user:
type: object
properties:
email:
type: string
description: Email address of the enrolling user
first_name:
type: string
description: First name of the enrolling user
last_name:
type: string
description: Last name of the enrolling user
phone:
type: string
description: Phone number of the enrolling user
address_line1:
type: string
description: Address of the enrolling user
state:
type: string
description: State where the enrolling user lives
zip_code:
type: string
description: Zip code where the enrolling user lives
birthday:
type: string
description: Birthday of the enrolling user
marketing_email_subscription:
type: string
description: Whether the enrolling user has subscribed to receive marketing emails
or not. If the "Explicit-Opt in" flag is enabled, `marketing_email_subscription`
is required. The values ''true'' and ''false'' are string, and 0 and 1 can be
a string or an integer.
examples:
default:
value:
client: CLIENT_GOES_HERE
location_id: 311031
store_number: 4
user:
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
phone: '1111111111'
address_line1: ADDRESS_GOES_HERE
state: California
zip_code: '94040'
birthday: '1999-01-01'
marketing_email_subscription: '1'
/api2/dashboard/business_admins/authorizations:
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
admin_id:
type: integer
description: ID of the admin whose permissions were updated
email:
type: string
description: Email address of the admin whose permissions were updated
first_name:
type: string
description: First name of the admin whose permissions were updated
last_name:
type: string
description: Last name of the admin whose permissions were updated
timezone:
type: string
description: Time zone of the admin whose permissions were updated
role_id:
type: integer
description: Role ID of the admin whose permissions were updated
accessible_locations:
type: object
properties:
location_ids:
type: array
description: Location IDs to which the admin was granted access
items:
type: integer
store_numbers:
type: array
description: Store numbers to which the admin was granted access
items:
type: string
accessible_location_groups:
type: object
properties:
location_group_id:
type: integer
description: ID of the location group to which the admin was granted access
name:
type: string
description: Name of the location group to which the admin was granted access
examples:
default:
value:
admin_id: 3803
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 10
accessible_locations:
location_ids:
- 542
- 3940
store_numbers:
- s10
- w12
accessible_location_groups:
location_group_id: 45
name: East Cost
summary: Allow Admin To Access a Location or Location Group
operationId: dashboard_allow_admin_to access_particular_location
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
x-private: true
x-stoplight:
id: 7abaae5b58d6a
description: Updates the permission settings of an admin user to allow the admin to access a store
number, location, or location group
requestBody:
content:
application/json:
schema:
type: object
properties:
admin_id:
type: string
description: ID of the admin whose permissions will be updated
business_admins:
type: object
properties:
accessible_store_numbers:
type: array
description: Permits the admin to access a given store number. If both location
ID and store number are provided, store number will be given priority.
items:
type: string
accessible_location_group_ids:
type: array
description: Permits the admin to access a given location group ID. If other attributes
are provided (e.g., location ID and store number), location group ID will be given
priority.
items:
type: integer
accessible_location_id:
type: integer
description: Permits the admin to access a given location ID. If both location ID
and store number are provided, store number will be given priority.
examples:
default:
value:
admin_id: '3803'
business_admins:
accessible_store_numbers:
- s10
- w12
accessible_location_group_ids:
- 45
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
admin_id:
type: integer
description: ID of the admin whose permissions were updated
email:
type: string
description: Email address of the admin whose permissions were updated
first_name:
type: string
description: First name of the admin whose permissions were updated
last_name:
type: string
description: Last name of the admin whose permissions were updated
timezone:
type: string
description: Time zone of the admin whose permissions were updated
role_id:
type: integer
description: Role ID of the admin whose permissions were updated
accessible_locations:
type: object
properties:
location_ids:
type: array
description: Location IDs to which access was revoked
items:
type: integer
store_numbers:
type: array
description: Store numbers to which access was revoked
items:
type: string
accessible_location_groups:
type: object
properties:
location_group_id:
type: integer
description: ID of the location group to which access was revoked
name:
type: string
description: Name of the location group to which access was revoked
examples:
default:
value:
admin_id: 3803
email: test@example.com
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
timezone: America/Los_Angeles
role_id: 10
accessible_locations:
location_ids:
- 542
- 3940
store_numbers:
- s10
- w12
accessible_location_groups:
location_group_id: 45
name: East Cost
summary: Revoke Admin Access From a Location or Location Group
x-private: true
tags:
- Locations
operationId: dashboard_revoke_admin_to access_particular_location
parameters:
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/content-type'
x-stoplight:
id: 025784998dc8f
description: Updates the permission settings of an admin user to remove the admin's access to a
store number, location, or location group
requestBody:
content:
application/json:
schema:
type: object
properties:
admin_id:
type: string
description: ID of the admin whose permissions will be updated
business_admins:
type: object
properties:
accessible_store_number:
type: string
description: Revokes the admin's access to a given store number. If both location
ID and store number are provided, store number will be given priority.
accessible_location_group_ids:
type: array
description: Revokes the admin's access to a given location group ID. If other attributes
are provided (e.g., location ID and store number), location group ID will be given
priority.
items:
type: integer
accessible_location_id:
type: integer
description: Revokes the admin's access to a given location ID. If both location
ID and store number are provided, store number will be given priority.
examples:
default:
value:
admin_id: '3803'
business_admins:
accessible_store_number: s10
accessible_location_group_ids:
- 45
/api2/dashboard/locations/destroy_async:
delete:
responses:
'202':
description: ''
content:
application/json:
schema:
type: object
properties: {}
examples:
Response:
value:
accepted: Queued for deletion
summary: Delete Location Async
description: Puts a location in the queue to be deleted from the database
operationId: dashboard_delete_location_async
tags:
- Locations
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 0d5bfb1f0cc52
requestBody:
content:
application/json:
schema:
type: object
properties:
location_id:
type: integer
description: Unique ID of a particular location. This is generated by Punchh.
store_number:
type: string
description: Unique store number provided by the business
required:
- location_id
examples:
Request:
value:
location_id: 306248
store_number: '317111'
/api2/dashboard/users/extensive_timeline:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
title:
description: Salutation as selected by the user
type: string
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
email:
type: string
description: Unique email address used to identify the user
phone:
type: string
description: Phone number of the user
address:
description: Address of the user
type: string
city:
description: City where the user lives
type: string
state:
description: State where the user lives
type: string
zip_code:
description: Zip code where the user lives
type: string
gender:
description: Gender of the user
type: string
birthday:
type: string
description: Date of birth of the user
anniversary:
description: Anniversary date of the user
type: string
format: date
secondary_email:
description: The secondary email address of the user is configured when a user signs
up with Facebook/Apple but does not share the email address. The app asks for an
alternate email address, which is kept as the `secondary_email`.
type: string
fb_uid:
description: Facebook ID that identifies the user
type: string
time_zone:
description: Time zone of the user
type: string
signup_channel:
type: string
description: Sign-up channel for user registration
preferred_locale:
description: Preferred locale of the user
type: string
current_sign_in_ip:
description: IP address of the device from which the user has most recently logged
in
type: string
last_user_agent:
description: User agent string of the most recent session or request made by the user.
This string identifies the software, device, and application initiating the request,
providing information about the client.
type: string
referral_code:
type: string
description: Referral code of the user
invite_code:
description: Invitation code received by the user via e-mail or social media channels
(e.g., WhatsApp, Facebook, etc.)
type: string
created_at:
type: string
description: Date/time when the user was created in the system
updated_at:
type: string
description: Date/time when the user was updated in the system
joined_at:
type: string
description: Sign-up anniversary date of the user
confirmation_sent_at:
type: string
description: Date/time when the verification email was sent to the user
confirmed_at:
description: Date/time when the verification was confirmed
type: string
format: date-time
current_sign_in_at:
type: string
format: date-time
description: Date/time when a user most recently logged into the system
last_sign_in_at:
type: string
format: date-time
description: Date/time of the user’s most recent sign-in. This timestamp helps track
the last time the user accessed the user's account or the system.
last_activity_at:
type: string
description: User’s last activity timestamp
sign_in_count:
type: integer
description: Total number of times a user has signed in to the user's account.
old_membership_no:
description: Old membership number from the incumbent loyalty program
type: number
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
sms_subscription:
type: boolean
description: Whether the user has subscribed to SMS services or not
age_verified:
type: boolean
description: Whether the age of the user is verified or not
banned:
type: boolean
description: Whether or not the user is banned from accessing the system. Returns
true if the user is banned from accessing the system, and false if the user has
access.
terms_and_conditions:
type: boolean
description: Whether the terms and conditions of a business have been accepted by
the user or not
unsubscribed:
type: boolean
description: Whether the user has unsubscribed from marketing email notifications
unsubscribe_reason:
type: string
description: Unsubscribe reason
privacy_policy:
type: boolean
description: Whether the user has agreed to the privacy policy to use the app as per
the configuration or not
favorite_locations:
type: array
description: List of the user's favorite locations
items:
type: object
checkins:
type: array
description: The object provides information on check-ins created for the user.
items:
type: object
properties:
checkin_type:
type: string
description: 'Specifies the type of check-in created. Possible values include:
- OnlineCheckin: Check-in completed through an online platform
- PosCheckin: Check-in completed at a point-of-sale system
- ReceiptImageCheckin: Check-in using an uploaded receipt image
- BarcodeCheckin: Check-in completed by scanning a barcode
- QrcodeCheckin: Check-in completed by scanning a QR code
- POSConsoleCheckin: Check-in completed via a POS console'
channel:
type: string
description: Channel through which the check-in was requested
receipt_amount:
type: integer
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.
receipt_number:
type: string
description: A unique identifier assigned to the receipt, representing a specific
transaction or order
receipt_date:
type: string
description: Date/time the receipt was generated for the order
ip_address:
type: string
description: IP address of the system where the check-in was created
bar_code:
type: string
description: Barcode printed on the receipt
created_at:
type: string
description: Date/time when the check-in was created in the system
format: date-time
location_name:
type: string
description: Name of the location associated with the check-in
redemptions:
type: array
description: The object provides information on redemptions created for the user.
items:
type: object
properties:
type:
type: string
x-stoplight:
id: scw4pba6mrh8d
description: 'Type of redemption. Possible values include:
* CardRedemption: Redemption using a card
* BankedRewardRedemption: Redemption of banked rewards
* Redemption: General redemption type
* RewardRedemption: Redemption of a reward
* SubscriptionRedemption: Redemption related to a subscription
* RedeemableRedemption: Redemption of the item marked as redeemable
* UnbankedPointRedemption: Redemption of unbanked points
* FuelRewardRedemption: Redemption of a fuel reward'
internal_tracking_code:
type: string
x-stoplight:
id: 9up7jjp9397zc
description: Redemption tracking code generated for the offer (i.e., reward
or redeemable or banked reward)
latitude:
type: number
x-stoplight:
id: 8uj5mpc4l52db
format: double
description: Latitude coordinate of the user's device GPS. The latitude of the
location is required if location_id is not provided.
longitude:
type: number
x-stoplight:
id: 7slbt4a6txa1s
format: double
description: Longitude coordinate of the user's device GPS. The longitude of
the location is required if location_id is not provided.
web:
type: boolean
x-stoplight:
id: 3khi3eiqxun1i
description: Whether the redemption is via iFrame or not
channel:
type: string
x-stoplight:
id: ap47w5a602uml
description: Redemption channel (i.e., POS, online order, mobile)
ip_address:
type: string
x-stoplight:
id: dqk80lek7rgh4
description: IP address of the system where the offer was redeemed
user_agent:
type: string
x-stoplight:
id: 5k8e2n713263b
description: 'User agent information, including the integrator name, integration
type, and version number of the integration. See [User Agent](/docs/dev-portal-platform-functions/ZG9jOjQ0OTU0NzY3-user-agent) '
status:
type: string
x-stoplight:
id: c2b7the9mldda
description: Status of the redemption (i.e., redeemed, expired, redeemable,
transferred, force_redeemed, cancelled)
created_at:
type: string
x-stoplight:
id: bm3pzn5kpm8zp
description: Date/time when the redemption was created in the system
format: date-time
location_name:
type: string
x-stoplight:
id: kl5lal5doph3z
description: Name of the location where redemption happened
redeemable_name:
type: string
x-stoplight:
id: vtys264vcbd1r
description: Name of the redeemable
user_coupon_redemptions:
type: array
description: The object provides information on coupon redemptions created for the
user.
items:
type: object
properties:
email:
type: string
x-stoplight:
id: kdvplmyra0da5
description: ' Email address of the user'
status:
type: string
x-stoplight:
id: ti8yl00b34e5y
description: 'Status of the coupon redemption. Possible values: honored, unredeemed,
live, perished, expired'
bar_code:
type: string
x-stoplight:
id: vdkwthqxliu15
description: The barcode generated for the order
discount:
type: number
x-stoplight:
id: aux1l6roz3pf2
description: Discount value of the coupon
format: float
redeemed_menu_items:
x-stoplight:
id: xg0x14vu94f0y
type: array
description: List of redeemed menu items
items:
x-stoplight:
id: bqi0s7kunlqdj
type: object
properties:
item_name:
type: string
x-stoplight:
id: ocvueuab3scap
description: Name of the menu item
item_qty:
type: integer
x-stoplight:
id: max3m6280xym1
description: Quantity ordered by the customer
item_amount:
type: number
x-stoplight:
id: bpq3y1pz9tvjz
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.
menu_item_type:
type: string
x-stoplight:
id: vwg1xcpix70wp
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.
T - Tax item. Taxes of all sorts
P - Payment item. Visa, MasterCard, cash, gift card/certificate (when
used to pay for the order)'
menu_item_id:
type: string
x-stoplight:
id: niv7v6hmxyfh7
description: Unique identifier for the item
menu_family:
type: string
x-stoplight:
id: sf6owk2dpwovv
description: The family that the item belongs to. The family is the subcategory
for the item.
menu_major_group:
type: string
x-stoplight:
id: 7k3z675nsqebt
description: The major group that the item belongs to. The major group
is the parent category for the item.
serial_number:
type: string
x-stoplight:
id: pez1tswzmalc2
description: A serialized number that differentiates distinct menu items
on a receipt. The purpose of this field is to identify which items on
the receipt are base items and which items are modifiers to the base
items.
transaction_no:
type: string
x-stoplight:
id: c0j7x2p39mqfu
description: Transaction number of the order
receipt_datetime:
type: string
x-stoplight:
id: xl713tiifu6t8
format: date-time
description: Date/time the receipt was generated for the order
receipt_amount:
type: number
x-stoplight:
id: 5pn6prbm5qz3t
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.
format: float
subtotal_amount:
type: number
x-stoplight:
id: q8iw7z4l2niuy
format: float
description: Order amount before taxes (sum of all item amounts minus any discounts).
Same as `receipt_amount`. For historical reasons, this parameter is included
along with `receipt_amount` in the API request.
created_at:
type: string
x-stoplight:
id: l4eqoy04ulzm8
format: date-time
description: Date/time when the coupon redemption was created in the system
location_name:
type: string
x-stoplight:
id: xliuwgpd96zyn
description: Name of the location where redemption happened
user_devices:
type: array
description: The object provides the user's device information.
items:
type: object
properties:
app_device_id:
type: string
x-stoplight:
id: rsw81n4d8qze4
description: Unique ID of the app device. The ID helps Punchh identify each
device so that certain rewards can be awarded individually to each device
instead of per user. For example, the sign-up reward is given to each device
ID to prevent fraudulent sign-ups so that a user cannot do repeated sign-ups
from a single device to get rewards. It should not change even if the user
resets a device.
gift_reason:
type: string
x-stoplight:
id: jrld29plwwm5b
description: Gift reason for points gifted to the user
created_at:
type: string
x-stoplight:
id: 6eosviaddm08t
format: date-time
description: Date/time when the user logs in or signs up using the given device
examples:
default:
value:
title: null
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
email: test@example.com
phone: '1111111111'
address: null
city: null
state: null
zip_code: null
gender: null
birthday: '1999-01-01'
anniversary: null
secondary_email: null
fb_uid: null
time_zone: null
signup_channel: POS
preferred_locale: null
current_sign_in_ip: null
last_user_agent: null
referral_code: REFERRAL_CODE_GOES_HERE
invite_code: null
created_at: '2019-12-06T14:01:15Z'
updated_at: '2020-02-05T22:28:00Z'
joined_at: '2019-12-06T14:01:15Z'
confirmation_sent_at: '2019-12-06T14:01:15Z'
confirmed_at: null
current_sign_in_at: null
last_sign_in_at: null
last_activity_at: '2020-02-05T22:23:40Z'
sign_in_count: 0
old_membership_no: null
marketing_email_subscription: false
marketing_pn_subscription: false
sms_subscription: false
age_verified: false
banned: false
terms_and_conditions: true
unsubscribed: false
unsubscribe_reason: By User
privacy_policy: false
favorite_locations: []
checkins:
- checkin_type: null
channel: null
receipt_amount: null
receipt_number: null
receipt_date: null
ip_address: null
bar_code: BARCODE_GOES_HERE
created_at: '2019-12-06T14:01:15Z'
location_name: ADDRESS_GOES_HERE
- checkin_type: null
channel: null
receipt_amount: null
receipt_number: null
receipt_date: null
ip_address: null
bar_code: null
created_at: '2019-12-06T14:01:16Z'
location_name: ADDRESS_GOES_HERE
- checkin_type: PosCheckin
channel: POS
receipt_amount: 35
receipt_number: '16703'
receipt_date: '2020-02-05T22:22:58Z'
ip_address: IP_ADDRESS_GOES_HERE
bar_code: BARCODE_GOES_HERE
created_at: '2020-02-05T22:23:40Z'
location_name: ADDRESS_GOES_HERE
redemptions:
- type: RedeemableRedemption
internal_tracking_code: '5491336'
latitude: null
longitude: null
web: null
channel: Mobile
ip_address: IP_ADDRESS_GOES_HERE
user_agent: AHC/1.0
status: null
created_at: '2022-03-31T15:04:18Z'
location_name: ADDRESS_GOES_HERE
redeemable_name: 'Original Buttermilk Short Stack '
- type: RewardRedemption
internal_tracking_code: '5384002'
latitude: null
longitude: null
web: null
channel: Mobile
ip_address: IP_ADDRESS_GOES_HERE
user_agent: AHC/1.0
status: null
created_at: '2022-04-05T23:20:54Z'
location_name: ADDRESS_GOES_HERE
redeemable_name: $0 Delivery Fee for Founders
- type: RewardRedemption
internal_tracking_code: '9764014'
latitude: null
longitude: null
web: null
channel: Mobile
ip_address: IP_ADDRESS_GOES_HERE
user_agent: AHC/1.0
status: null
created_at: '2022-04-06T17:04:23Z'
location_name: ADDRESS_GOES_HERE
redeemable_name: $0 Delivery Fee for Founders
user_coupon_redemptions:
- email: null
status: honored
bar_code: null
discount: null
redeemed_menu_items: null
transaction_no: null
receipt_datetime: null
receipt_amount: null
subtotal_amount: null
created_at: '2022-03-31T14:31:38Z'
location_name: ADDRESS_GOES_HERE
- email: null
status: honored
bar_code: null
discount: null
redeemed_menu_items: null
transaction_no: null
receipt_datetime: null
receipt_amount: null
subtotal_amount: null
created_at: '2022-04-19T22:41:29Z'
location_name: ADDRESS_GOES_HERE
user_devices: []
x-private: true
summary: Get Extended User History
operationId: dashboard_get_extended_user_history
tags:
- Users
parameters:
- $ref: '#/components/parameters/authorization-header'
- schema:
type: integer
in: query
name: user_id
description: User ID of the guest in the Punchh system
x-stoplight:
id: 0abb94339b757
/api2/dashboard/user_favourite_locations:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
user_id:
type: integer
description: User ID
channel:
type: string
description: Channel with which the favorite location was associated (e.g., eClub,
etc.)
location_id:
type: integer
description: Location ID in the Punchh system
store_number:
type: string
description: Store number
user_favourite_location_id:
type: integer
description: ID of the user's favorite location (to be used for deletion)
examples:
default:
value:
- user_id: 111111111
channel: eClub
location_id: 342786
store_number: '12345'
user_favourite_location_id: 105980749
summary: Fetch User Favorite Locations
description: Gets a user's favorite locations for eClub/loyalty
operationId: dashboard_fetch_user_favourite_locations
tags:
- Users
parameters:
- schema:
type: string
default: '111111111'
in: query
name: user_id
description: Unique user ID
required: true
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 2fa1a4b243153
delete:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
summary: Delete User Favorite Location
operationId: dashboard_delete_user_favourite_locations
tags:
- Users
parameters:
- schema:
type: string
in: query
name: user_id
description: User ID
required: true
- $ref: '#/components/parameters/authorization-header'
- schema:
type: string
in: query
name: user_favourite_location_id
description: ID of the favorite location returned in the response of the [Fetch User Favorite
Locations API](/docs/dev-portal-platform-functions/2fa1a4b243153-fetch-user-favorite-locations)
required: true
description: Deletes a user's favorite locations for eClub/loyalty. Only one location can be deleted
at a time.
x-stoplight:
id: ff16235f97f65
/api2/dashboard/social_cause_campaigns/activate:
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
social_cause_id:
type: integer
description: Unique ID assigned to the social cause campaign. This ID is generated
by Punchh when the social cause campaign is created in the Punchh platform.
name:
type: string
description: Name of the social cause campaign as defined by the business admin when
creating the social cause campaign in the Punchh platform
description:
type: string
description: Description of the social cause campaign as defined by the business admin
image_url:
type: string
description: URL of the image that is attached to the social cause campaign by the
business admin
miscellaneous:
type: 'null'
description: Returns miscellaneous response string as configured in the Punchh platform
city:
type: string
description: City
state:
type: string
description: State
street:
type: string
description: Street name
zip:
type: string
description: Zip code
phone_number:
type: string
description: Phone number
email:
type: string
description: Email address
address:
type: string
description: Address
activated:
type: boolean
description: Status of the social cause campaign
examples:
default:
value:
social_cause_id: 20504
name: social_cause_campaign_20
description: social_cause_campaign_description_19
image_url: IMAGE_URL_GOES_HERE
miscellaneous: null
city: test_city
state: Rajasthan
street: ADDRESS_GOES_HERE
zip: '302001'
phone_number: '1111111111'
email: test@example.com
address: ADDRESS_GOES_HERE
activated: true
summary: Activate Social Cause Campaign
description: Activates a social cause campaign
operationId: dashboard_social_cause_activate
tags:
- Social Cause Campaigns
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 8081186acdbd5
requestBody:
content:
application/json:
schema:
type: object
properties:
social_cause_id:
type: integer
description: Unique ID assigned to the social cause campaign that will be activated.
This ID is generated by Punchh when the social cause campaign is created in the Punchh
platform.
required:
- social_cause_id
examples:
default:
value:
social_cause_id: 20504
/api2/dashboard/social_cause_campaigns/deactivate:
patch:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
social_cause_id:
type: integer
description: Unique ID assigned to the social cause campaign. This ID is generated
by Punchh when the social cause campaign is created in the Punchh platform.
name:
type: string
description: Name of the social cause campaign as defined by the business admin when
creating the social cause campaign in the Punchh platform
description:
type: string
description: Description of the social cause campaign as defined by the business admin
image_url:
type: string
description: URL of the image that is attached to the social cause campaign by the
business admin
miscellaneous:
type: 'null'
description: Returns miscellaneous response string as configured in the Punchh platform
city:
type: string
description: City
state:
type: string
description: State
street:
type: string
description: Street name
zip:
type: string
description: Zip code
phone_number:
type: string
description: Phone number
email:
type: string
description: Email address
address:
type: string
description: Address
activated:
type: boolean
description: Status of the social cause campaign
examples:
default:
value:
social_cause_id: 20504
name: social_cause_campaign_20
description: social_cause_campaign_description_19
image_url: IMAGE_URL_GOES_HERE
miscellaneous: null
city: test_city
state: Rajasthan
street: ADDRESS_GOES_HERE
zip: '302001'
phone_number: '1111111111'
email: test@example.com
address: ADDRESS_GOES_HERE
activated: false
summary: Deactivate Social Cause Campaign
operationId: dashboard_social_cause_deactivate
tags:
- Social Cause Campaigns
description: Deactivates a social cause campaign
parameters:
- schema:
type: string
default: Bearer BUSINESS_ADMIN_KEY_GOES_HERE
in: header
name: Authorization
x-stoplight:
id: b166d42a3b587
requestBody:
content:
application/json:
schema:
type: object
properties:
social_cause_id:
type: integer
description: Unique ID assigned to the social cause campaign that will be deactivated.
This ID is generated by Punchh when the social cause campaign is created in the Punchh
platform.
required:
- social_cause_id
examples:
default:
value:
social_cause_id: 20504
/api2/dashboard/users/info:
get:
summary: Get User Information
tags:
- Users
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/user-info'
examples:
All of the user PII fields are excluded from response:
value:
anniversary: null
avatar_remote_url: null
created_at: '2023-04-04T09:05:19Z'
email_verified: false
age_verified: false
privacy_policy: true
id: 111111111
updated_at: '2023-09-12T05:39:28Z'
test_user: false
user_joined_at: '2023-04-04T09:05:19Z'
balance:
banked_rewards: '2.00'
membership_level: Bronze
membership_level_id: 109
net_balance: 2
net_debits: 0
pending_points: 0
points_balance: 0
signup_anniversary_day: 04/04
total_credits: 15
total_debits: '0.0'
total_point_credits: 15
total_redeemable_visits: 1
expired_membership_level: Bronze
total_visits: 0
initial_visits: 1
unredeemed_cards: 0
selected_card_number: null
selected_reward_id: null
selected_discount_amount: null
rewards:
- id: 31300354648
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-05T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 100
discount_amount: 10
description: Free Sandwich with Purchase of Chips and Drink
name: Free Sandwich with Purchase of Chips and Drink
redeemable_properties: ''
- id: 31300354654
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-14T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 100
discount_amount: 10
description: Free Drinks
name: Welcome Series Free Gift
redeemable_properties: ''
discount_type: null
allow_multiple: false
apple_pass_url: APPLE_PASS_URL_GOES_HERE
google_pass_url: GOOGLE_PASS_URL_GOES_HERE
authentication_token: AUTHENTICATION_TOKEN_GOES_HERE
favourite_locations: 306082,333070,304374
favourite_store_numbers: 12345,0604,1234
marketing_email_subscription: true
marketing_pn_subscription: true
passcode_configured: false
profile_field_answers:
test1: Option 1
referral_code: REFERRAL_CODE_GOES_HERE
referral_path: URL_GOES_HERE
terms_and_conditions: false
title: ''
user_as_barcode: '1111111'
user_as_qrcode: QR_CODE_GOES_HERE
user_code: P11111111
user_id: 111111111
user_relations:
- id: 111111111
relation: spouse
name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
birthday: '1999-01-01'
created_at: '2023-08-18T12:32:13Z'
updated_at: '2023-08-18T12:32:13Z'
work_zip_code: null
preferred_locale: en
force_password_reset: true
expiration_date: null
sms_subscription: true
phone: '1111111111'
migrate_status: false
email_unsubscribe: false
allow_push_notifications: true
facebook_signup: false
communicable_email: test@example.com
access_token: ACCESS_TOKEN_GOES_HERE
age_verified_status: true
subscriptions:
- plan_name: free burger
pos_meta: VIP subs
subscription_id: 123
None of the user PII fields are excluded from the response:
value:
address_line1: ''
anniversary: null
avatar_remote_url: null
birthday: null
city: ''
created_at: '2023-04-04T09:05:19Z'
email: test@example.com
email_verified: false
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
age_verified: false
privacy_policy: true
gender: male
id: 111111111
last_name: LAST_NAME_GOES_HERE
state: ''
updated_at: '2023-09-12T05:39:28Z'
zip_code: null
test_user: false
user_joined_at: '2023-04-04T09:05:19Z'
balance:
banked_rewards: '2.00'
membership_level: Bronze
membership_level_id: 109
net_balance: 2
net_debits: 0
pending_points: 0
points_balance: 0
signup_anniversary_day: 04/04
total_credits: 15
total_debits: '0.0'
total_point_credits: 15
total_redeemable_visits: 1
expired_membership_level: Bronze
total_visits: 0
initial_visits: 1
unredeemed_cards: 0
selected_card_number: null
selected_reward_id: null
selected_discount_amount: null
rewards:
- id: 31300354648
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-05T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 100
discount_amount: 10
description: Free Sandwich with Purchase of Chips and Drink
name: Free Sandwich with Purchase of Chips and Drink
redeemable_properties: ''
- id: 31300354654
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-14T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 100
discount_amount: 10
description: Free Drinks
name: Welcome Series Free Gift
redeemable_properties: ''
discount_type: null
allow_multiple: false
apple_pass_url: APPLE_PASS_URL_GOES_HERE
google_pass_url: GOOGLE_PASS_URL_GOES_HERE
authentication_token: AUTHENTICATION_TOKEN_GOES_HERE
favourite_locations: 306082,333070,304374
favourite_store_numbers: 12345,0604,1234
marketing_email_subscription: true
marketing_pn_subscription: true
passcode_configured: false
profile_field_answers:
test1: Option 1
referral_code: REFERRAL_CODE_GOES_HERE
referral_path: URL_GOES_HERE
secondary_email: test@example.com
terms_and_conditions: false
title: ''
user_as_barcode: '1111111'
user_as_qrcode: QR_CODE_GOES_HERE
user_code: P11111111
user_id: 111111111
user_relations:
- id: 111111111
relation: spouse
name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
birthday: '1999-01-01'
created_at: '2023-08-18T12:32:13Z'
updated_at: '2023-08-18T12:32:13Z'
work_zip_code: null
preferred_locale: en
force_password_reset: true
expiration_date: null
sms_subscription: true
phone: '1111111111'
migrate_status: false
email_unsubscribe: false
allow_push_notifications: true
facebook_signup: false
communicable_email: test@example.com
access_token: ACCESS_TOKEN_GOES_HERE
age_verified_status: true
subscriptions:
- plan_name: free burger
pos_meta: VIP subs
subscription_id: 123
'401':
description: 'Unauthorized: Sending invalid/blank value in Authorization header or missing Authorization
header'
content:
application/json:
schema:
type: object
properties: {}
examples:
Sending invalid/blank value in Authorization header or missing Authorization header:
value:
error: You need to sign in or sign up before continuing.
'404':
description: 'Not Found: Sending incorrect values in search parameters or missing/invalid search
parameters'
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
error_name:
type: string
examples:
- user_not_found
examples:
Sending incorrect values in search parameters or missing/invalid search parameters:
value:
errors:
user_not_found: User Not Found
'422':
description: 'Unprocessable Entity: Phone number uniqueness is disabled'
content:
application/json:
schema:
type: object
properties: {}
examples:
Phone number uniqueness is disabled:
value:
errors:
phone_uniqueness_disabled: Phone number uniqueness is disabled, you can’t search
using the phone
operationId: get-api2-dashboard-users-info
description: 'This API lets you fetch a user’s information by user ID, phone number, or email address.
You cannot search using phone number if phone number uniqueness is disabled. The option to validate
the uniqueness of phone number across guests must be enabled in the Punchh platform. Contact your
Punchh representative to update this Punchh platform configuration.
The Punchh platform provides businesses an option to exclude a user’s personal information (e.g.,
birthday, city, state, email, etc.) from the response. This configuration is available in the
Punchh platform. Fields selected from the User PII Fields drop-down list are excluded from
the API response. Contact your Punchh representative to update this Punchh platform configuration.
'
parameters:
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 28c3aa138a5db
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: ID of the user in the Punchh system. You can get this value from the User
object, `user_id` parameter in the response of a successful Online Ordering [sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user)
/ [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
email:
type: string
description: Email address of the user in the Punchh system. You can get this value
from the User object, `email` parameter in the response of a successful Online Ordering
[sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user) / [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
phone:
type: string
description: Phone number of the user in the Punchh system. You can get this value from
the User object, `phone` parameter in the response of a successful Online Ordering
[sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user) / [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
examples:
default:
value:
user_id: '111111111'
email: test@example.com
phone: '1111111111'
description: ' You must pass one of the following parameters (user_id, phone, or email) in the
request.'
/api2/dashboard/checkins:
post:
summary: Create Loyalty Check-in
operationId: post-api2-dashboard-checkins
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
first_name:
type: string
x-stoplight:
id: 92i7d1m5a7mcu
description: First name of the user
last_name:
type: string
x-stoplight:
id: mt5v6whtcaavo
description: Last name of the user
checkins:
type: integer
x-stoplight:
id: h4pzhwpgluvgz
description: Total number of check-ins for this online order
points:
type: integer
x-stoplight:
id: mxl9jg80wisnp
description: Total points earned for this online order
checkin:
$ref: '#/components/schemas/checkin'
examples:
default:
value:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
checkins: 2
points: 22
checkin:
created_at: '2015-11-26T10:57:06Z'
external_uid: EXTERNAL_UID_GOES_HERE
checkin_id: 7415394
pending_points: 0
pending_refresh: false
points_earned: 11
bar_code: BARCODE_GOES_HERE
'400':
description: Bad Request - Sending missing/incorrect params, bad encoding etc
content:
application/json:
schema:
type: object
properties:
error:
type: string
x-stoplight:
id: i98czqxxs0o7z
examples:
default:
value:
error: 'Required parameter missing or the value is empty: user_id'
'401':
$ref: '#/components/responses/401-unauthorized'
'404':
description: 'Not Found: Sending incorrect values in search parameters or missing/invalid search
parameters'
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
error_name:
type: string
examples:
- user_not_found
examples:
Sending incorrect values in search parameters or missing/invalid search parameters:
value:
errors:
user_not_found: User Not Found
'422':
description: 'Unprocessable Entity: Phone number uniqueness is disabled'
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: kjnapwqm7iv0k
properties:
error_name:
type: string
x-stoplight:
id: d00x1uk6ke4u5
examples:
Phone number uniqueness is disabled:
value:
errors:
phone_uniqueness_disabled: Phone number uniqueness is disabled, you can’t search
using the phone
description: "Creates a loyalty check-in for an order against a receipt when the user’s access token\
\ or authentication token is not available at the time of creating the check-in in the Punchh\
\ system -- for example, in the case of future-dated orders. The user is identified using email\
\ address, phone number, or user ID, with user ID given top priority if multiple look-up parameters\
\ are passed in the API. \n\nPhone number will work only if it is set up as a unique parameter\
\ in the Punchh platform. The option to validate the uniqueness of phone number across guests\
\ must be enabled. Contact your Punchh representative to update this Punchh platform configuration.\
\ "
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/content-type'
tags:
- Check-in
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
x-stoplight:
id: 5870x6cze7jwe
description: ID of the user in the Punchh system. You can get this value from the User
object, `user_id` parameter in the response of a successful Online Ordering [sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user)
/ [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
email:
type: string
x-stoplight:
id: 4wdfduh1abn2n
description: Email address of the user in the Punchh system. You can get this value
from the User object, `email` parameter in the response of a successful Online Ordering
[sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user) / [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
examples:
- test@example.com
phone:
type: string
x-stoplight:
id: 9qe1e650bvg9u
description: Phone number of the user in the Punchh system. You can get this value from
the User object, `phone` parameter in the response of a successful Online Ordering
[sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user) / [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
transaction_no:
type: integer
x-stoplight:
id: 21quvyheog1yv
description: Receipt number or transaction number on the receipt. In case of a redemption
associated with the order, the same transaction number must be sent for both check-ins
and redemptions.
cc_last4:
type: integer
x-stoplight:
id: zlagghzlri90y
description: Last 4 digits of credit card number
employee_id:
type: number
x-stoplight:
id: 2j2s0flwmuz0x
description: ID of the employee who took the order. In case of a system order, it can
be a system-generated ID.
employee_name:
type: string
x-stoplight:
id: jcrgbrmeztbq5
description: Name of the employee who took the order. In case of a system order, it
can be the name of the system.
store_number:
type: string
x-stoplight:
id: to31esl3clsc8
description: The location where the check-in occurred, as configured in the Punchh platform
via Store Locations > All Store Locations > Edit Location. This is generally provided
by the business.
menu_items:
$ref: '#/components/schemas/menu_items'
subtotal_amount:
type: number
x-stoplight:
id: pgguvfdmuxlo1
format: double
description: Order amount before taxes (sum of all item amounts minus any discounts).
Same as `receipt_amount`. For historical reasons, this parameter is included along
with `receipt_amount` in the API request.
receipt_amount:
type: number
x-stoplight:
id: 4v0w8mxedbtdj
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.
payable:
type: string
x-stoplight:
id: ap5ad3ver9q0a
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).
external_uid:
type: string
x-stoplight:
id: s793yu3gg7ccn
description: Unique ID generated by your system. We use this to prevent duplicates in
case the same transaction gets triggered twice.
revenue_id:
type: string
x-stoplight:
id: rcjlyv4d2gmt2
description: 'ID of the online ordering 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 vendors 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
x-stoplight:
id: pqkl5it9go3jq
description: Name of the online ordering function that designates the order fulfillment
method (e.g., to-go/take out, call-in pickup, call-in deliver, etc.). Some online
ordering systems 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.).
channel:
type: string
x-stoplight:
id: 9iex9d4dyr7on
description: Channel through which the check-in was requested. Possible values are:`online_order`,
`pos`, `web`, `mobile`, `dashboard`, `chatbot`, `kiosk`
state:
type: string
x-stoplight:
id: nlapcztarsvho
description: 'The current state of the check-in. Possible values are: `committed`, `pending`,
or `void` (required in case of leveraging pending points via explicit API option)'
receipt_datetime:
type: string
x-stoplight:
id: k4ecrnh091vy0
description: Timestamp of the receipt per [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601),
in YYYY-MM-DDThh:mm:ssZ format
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
required:
- transaction_no
- store_number
- subtotal_amount
- receipt_amount
- payable
- external_uid
- receipt_datetime
examples:
default:
value:
user_id: '111111'
transaction_no: 5678
cc_last4: 4387
employee_id: 7
employee_name: EMPLOYEE_NAME_GOES_HERE
store_number: '58'
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'
subtotal_amount: 7.86
receipt_amount: 7.86
payable: '9.00'
external_uid: EXTERNAL_UID_GOES_HERE
revenue_id: REVENUE_ID_GOES_HERE
revenue_code: REVENUE_CODE_GOES_HERE
channel: online_order
state: committed
receipt_datetime: '2023-11-20T15:23:20+05:30'
description: At least one of `user_id`, `phone`, or `email` is required.
/api2/dashboard/feedbacks:
post:
summary: Create Feedback
operationId: post-api2-dashboard-feedbacks
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
feedback_id:
type: integer
x-stoplight:
id: mejh1yx6f7r9e
description: Unique ID assigned to a user's feedback
examples:
default:
value:
feedback_id: 267383
'400':
description: Bad Request - Sending missing/incorrect params, bad encoding etc
content:
application/json:
schema:
type: object
properties:
error:
type: string
x-stoplight:
id: mnimybi60rzbx
examples:
default:
value:
error: 'Required parameter missing or the value is empty: user_id'
'401':
$ref: '#/components/responses/401-unauthorized'
'404':
description: 'Not Found: Sending incorrect values in search parameters or missing/invalid search
parameters'
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: klq69efbwmoqd
properties:
error_name:
type: string
x-stoplight:
id: sjvqtzbwr53rs
examples:
- user_not_found
examples:
default:
value:
errors:
user_not_found: User Not Found
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: fh3pseacmyl3f
rating:
type: array
x-stoplight:
id: 4rbiibghcwj15
items:
x-stoplight:
id: sjc6njv5ovd63
type: string
examples:
default:
value:
errors:
rating:
- Rating is not a number.
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/content-type'
description: 'Creates feedback in the system based on the message and/or rating provided by a user
when the user’s access token or authentication token is not available at the time of creating
the feedback in the Punchh system. The user is identified using email address, phone number, or
user ID, with user ID given top priority if multiple look-up parameters are passed in the API.
Phone number will work only if it is set up as a unique parameter in the Punchh platform. The
option to validate the uniqueness of phone number across guests must be enabled. Contact your
Punchh representative to update this Punchh platform configuration. '
tags:
- Feedback
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: number
x-stoplight:
id: 4293k10f4ai22
description: ID of the user in the Punchh system. You can get this value from the User
object, `user_id` parameter in the response of a successful Online Ordering [sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user)
/ [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
email:
type: string
x-stoplight:
id: f8dcsu9kvp58m
description: Email address of the user in the Punchh system. You can get this value
from the User object, `email` parameter in the response of a successful Online Ordering
[sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user) / [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
phone:
type: string
x-stoplight:
id: q3b9mhcz7gay7
description: Phone number of the user in the Punchh system. You can get this value from
the User object, phone parameter in the response of a successful Online Ordering [sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user)
/ [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
message:
type: string
x-stoplight:
id: j3cynj807vljv
description: 'Text feedback that a user provides '
video_url:
type: string
x-stoplight:
id: 9a4u70i902tw0
description: Video URL of the feedback that a user provides
photo_url:
type: string
x-stoplight:
id: pkaf6p0ghwqej
description: Photo URL of the feedback that a user provides
rating:
type: integer
x-stoplight:
id: 3q6ukqwy7t4gp
description: Rating that a user provides. The maximum rating is indicated in the `maximum_rating_in_feedback`
response parameter in the [Program Meta API](https://developers.punchh.com/docs/dev-portal-mobile/2617bed9b0e8e-program-meta-api).
format: int32
checkin_id:
type: string
x-stoplight:
id: h386wbue37pxp
description: ID of the check-in for which a user provides feedback
facebook_post_id:
type: string
x-stoplight:
id: whdnu5zg7nb72
description: ID of the feedback posted by a user to the user's Facebook account
redemption_id:
type: string
x-stoplight:
id: rp67lw0wrhlgh
description: ID of the redemption for which a user provides feedback
republishable:
type: boolean
x-stoplight:
id: h13js18k4psdg
description: 'Whether the feedback message can be republished on a social media platform
or not. The default value is `true`, so the user must explicitly specify not to allow
it. Possible values: `true`, `false`'
requires_response:
type: boolean
x-stoplight:
id: bu578i4cd2003
description: 'Whether the user wants to be contacted by the business for this feedback
or not. Possible values: `true`, `false`'
required:
- user_id
examples:
default:
value:
message: Good Coffee.
rating: 5
user_id: 111111
checkin_id: '8393395'
redemption_id: '106819236'
facebook_post_id: '106819236106819236'
video_url: VIDEO_URL_GOES_HERE
photo_url: PHOTO_URL_GOES_HERE
republishable: false
requires_response: false
description: '1\. At least one of `user_id`, `phone`, or `email` is required.
2\. At least one of `message`, `rating`, `photo_url`, or `video_url` is required.'
/api2/dashboard/feedbacks/{feedback_id}:
parameters:
- schema:
type: string
name: feedback_id
in: path
required: true
description: The value of the `feedback_id` parameter returned in the response of the [Create Feedback](/docs/dev-portal-platform-functions/47280bbc46cda-create-feedback)
API
patch:
summary: Update Feedback
operationId: patch-api2-dashboard-feedbacks-feedback_id
responses:
'200':
description: OK
'401':
$ref: '#/components/responses/401-unauthorized'
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/content-type'
tags:
- Feedback
description: Updates feedback in the system based on the ID of the feedback
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
x-stoplight:
id: ykyalejlzm3m1
description: Email address of the user in the Punchh system. You can get this value
from the User object, `email` parameter in the response of a successful Online Ordering
[sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user) / [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
phone:
type: string
x-stoplight:
id: diu1pdb72n3c6
description: Phone number of the user in the Punchh system. You can get this value from
the User object, phone parameter in the response of a successful Online Ordering [sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user)
/ [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
user_id:
type: number
x-stoplight:
id: tg5to2zpsf617
description: ID of the user in the Punchh system. You can get this value from the User
object, `user_id` parameter in the response of a successful Online Ordering [sign-up](/docs/dev-portal-online-ordering/58f18dfdd2a3d-create-new-user)
/ [sign-in](/docs/dev-portal-online-ordering/97dc4430bb3aa-log-in-with-email-and-password)
API call or Mobile [sign-up](/docs/dev-portal-mobile/2e67abf6f8e12-sign-up-register)
/ [sign-in](/docs/dev-portal-mobile/c1be403d96bc5-sign-in) API call.
checkin_id:
type: string
x-stoplight:
id: id93bajbfb3w7
description: ID of the check-in for which a user provides feedback
message:
type: string
x-stoplight:
id: c67ggybeu2utj
description: Text feedback that a user provides
redemption_id:
type: string
x-stoplight:
id: 6ap85okjno7ed
description: ID of the redemption for which a user provides feedback
video_url:
type: string
x-stoplight:
id: 3tf4oe57gzu73
description: Video URL of the feedback that a user provides
photo_url:
type: string
x-stoplight:
id: cjbog0yeotu9w
description: Photo URL of the feedback that a user provides
requires_response:
type: boolean
x-stoplight:
id: 6oij5xkcv1my6
description: 'Whether the user wants to be contacted by the business for this feedback
or not. Possible values: `true`, `false`'
examples:
default:
value:
message: Good Coffee.
user_id: 111111
checkin_id: '8393395'
redemption_id: '106819236'
video_url: VIDEO_URL_GOES_HERE
photo_url: PHOTO_URL_GOES_HERE
requires_response: false
/api2/dashboard/custom_segments/members/bulk_add:
post:
summary: Bulk Add Users to a Custom Segment
operationId: post-api2-dashboard-custom_segments-members-bulk_add
responses:
'200':
description: OK
'302':
description: The user account does not have the required permission to perform this operation.
content:
application/json:
schema:
type: object
properties: {}
description: "This API allows you to add users in bulk to a custom segment by uploading a CSV file\
\ that contains a list of users and their details. The uploaded file must be a CSV file. \n\n\
The CSV file will have two columns: \"user_id\" and \"email\". The \"user_id\" column contains\
\ all user IDs that need to be added to the custom segment. Either email or user ID should be\
\ passed in the CSV file. If both email and user ID values are provided in the CSV file, the look-up\
\ process for adding user IDs to the custom segment will use both the \"email\" and \"user_id\"\
\ fields to identify the guests to be added.\n\nOnce the uploaded CSV file is processed, you will\
\ receive a response file on the registered email ID with details of success/failure against each\
\ entry, along with validation errors if applicable.\n\nThe changes you request through this API\
\ call may not take effect immediately. Instead, they are queued up and processed in the order\
\ they were received, depending on the availability of resources to process the requests. All\
\ changes made via this API are reflected in the audit logs.\n\nThis API can be triggered only\
\ in limited time slots defined by Punchh. The time slot designated by Punchh for this operation\
\ is from 9:30 PM EST to 5:30 AM EST. Requests triggered outside of the defined time slot will\
\ be rejected.\n\nPermission required: Admin account with Business Manager permission.\
\ Accounts without required permission will receive a 302 error response. "
parameters:
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/authorization-header'
tags:
- Custom Segments
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
x-stoplight:
id: 3sg2p4czwht6a
description: Unique name assigned to this bulk user addition activity
custom_segment_id:
type: integer
x-stoplight:
id: yqwztdxwoipbw
description: Unique ID of the custom segment to which users will be added
bulk_guest_activity_file:
type: string
x-stoplight:
id: azw6p1pizlp7i
description: Local path to the CSV file. The CSV will include the user IDs that will
be added to the specified custom segment. Only CSV file format is supported, and the
maximum supported file size is 15 MB.
required:
- name
- custom_segment_id
- bulk_guest_activity_file
examples:
default:
value:
name: custom_seg_perf1
custom_segment_id: 110443
bulk_guest_activity_file: CSV_FILE_PATH_GOES_HERE
description: "The request for this API endpoint is passed using form data, as shown in the following\
\ example.\n```curl\ncurl --request POST \\\n --url https://server_name_goes_here.punchh.com/api2/dashboard/custom_segments/members/bulk_add\
\ \\\n --header 'Accept: application/json' \\\n --header 'Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE'\
\ \\\n --header 'Content-Type: application/json' \\\n —form 'name=\"custom_seg_perf1\"' \\\
\n —form 'custom_segment_id=110443' \\\n —form 'bulk_guest_activity_file=@\"CSV_FILE_PATH_GOES_HERE\"\
'"
/api2/dashboard/custom_segments/members/bulk_remove:
delete:
summary: Bulk Remove Users From a Custom Segment
operationId: delete-api2-dashboard-custom_segments-members-bulk_remove
responses:
'200':
description: OK
'302':
description: The user account does not have the required permission to perform this operation.
content:
application/json:
schema:
type: object
properties: {}
description: 'This API allows you to remove users in bulk from a custom segment by uploading a CSV
file that contains a list of users and their details. The uploaded file must be a CSV file.
The CSV file will have two columns: "user_id" and "email". The "user_id" column contains all user
IDs that need to be removed from the custom segment. Either email or user ID should be passed
in the CSV file. If both email and user ID values are provided in the CSV file, the look-up process
for deleting user IDs from the custom segment will use both the "email" and "user_id" fields to
identify the guests to be deleted.
Once the uploaded CSV file is processed, you will receive a response file on the registered email
ID with details of success/failure against each entry, along with validation errors if applicable.
The changes you request through this API call may not take effect immediately. Instead, they are
queued up and processed in the order they were received, depending on the availability of resources
to process the requests. All changes made via this API are reflected in the audit logs.
This API can be triggered only in limited time slots defined by Punchh. The time slot designated
by Punchh for this operation is from 9:30 PM EST to 5:30 AM EST. Requests triggered outside of
the defined time slot will be rejected.
Permission required: Admin account with Business Manager permission. Accounts without required
permission will receive a 302 error response. '
parameters:
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/authorization-header'
tags:
- Custom Segments
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
x-stoplight:
id: n5efr1r8vvdeq
description: Unique name assigned to this bulk user removal activity
custom_segment_id:
type: integer
x-stoplight:
id: b1ck8t0joiuab
description: Unique ID of the custom segment from which users will be removed
bulk_guest_activity_file:
type: string
x-stoplight:
id: 29dlqfer0sfhh
description: Local path to the CSV file. The CSV will include the user IDs that will
be removed from the specified custom segment. Only CSV file format is supported, and
the maximum supported file size is 15 MB.
required:
- name
- custom_segment_id
- bulk_guest_activity_file
examples:
default:
value:
name: custom_seg_perf1
custom_segment_id: 110444
bulk_guest_activity_file: CSV_FILE_PATH_GOES_HERE
description: "The request for this API endpoint is passed using form data, as shown in the following\
\ example.\n```curl\ncurl --request DELETE \\\n --url https://server_name_goes_here.punchh.com/api2/dashboard/custom_segments/members/bulk_remove\
\ \\\n --header 'Accept: application/json' \\\n --header 'Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE'\
\ \\\n --header 'Content-Type: application/json' \\\n —form 'name=\"custom_seg_perf1\"' \\\
\n —form 'custom_segment_id=110444' \\\n —form 'bulk_guest_activity_file=@\"CSV_FILE_PATH_GOES_HERE\"\
'"
/api2/dashboard/migration_users/bulk_bmu_upload:
post:
summary: Bulk Upload Business Migration Users
operationId: post-api2-dashboard-migration_users-bulk_bmu_upload
responses:
'200':
description: OK
description: 'Allows you to upload a list of business migration users along with their details using
a CSV file. See the [Create Business Migration User](/docs/dev-portal-platform-functions/apis/platform-functions-api/paths/~1api2~1dashboard~1migration_users/post)
API for details about the user attributes that can be uploaded in the CSV file.
These are
the maximum values that can be included per user in the business migration user CSV file:
- Gift card: 15
- User relations: 6
- Profile fields: 25
- Rewards: 15
- Challenge progress: 15
- Loyalty card: 10
Note: This feature is designed for new brands onboarding to Punchh. If the brand is already live
with Punchh, this feature will not add significant value to their operations.
Permission Required
A user account with the Business Admin role is required.
Sample CSV File Format
In the CSV file, the attributes are added in columns, and each row will contain the values for
these attributes for each user. The following image shows the format for the CSV file (not all
user attributes are shown in this example).
```csv
address_line1,birthday,city,email,first_name,last_name,gender,phone,state,zip_code
address1,1990-01-01,Mountain View,test1@example.com,first1,last1,male,1111111111,CA,94040
address2,2000-01-01,Austin,test2@example.com,first2,last2,female,1111111112,TX,77494
```
Bulk Upload Business Migration Users via Punchh Platform
The bulk upload feature for migrating business users is also available from the Punchh platform.
See the "Bulk Business Migration User Upload" section in [Awaiting Migration](https://support.punchh.com/s/article/Awaiting-Migration)
on the Punchh Support Portal for more information.
Note: To view the Punchh product documentation on the Punchh Support Portal, you must log in to
a Punchh platform production environment. If you already have access to a production environment,
follow the instructions [here](https://support.punchh.com/s/article/How-do-I-access-the-Punchh-Support-Portal-Single-Sign-On) to
access the Punchh Support Portal.'
parameters:
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
- $ref: '#/components/parameters/authorization-header'
tags:
- Business Migration Users
x-stoplight:
id: 70c2fa6b90887
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
x-stoplight:
id: fqo9botfghnwv
description: Name for the bulk upload request
bulk_guest_activity_file:
type: string
x-stoplight:
id: 7v232ca2qfj6z
description: 'Location of the file that will be used for bulk upload. Punchh supports
only the CSV file format with a maximum file size of 15 MB. The bulk upload will fail
if the file size exceeds 15 MB. Note: The file location should be passed in
either the `import_file_url` parameter or the `bulk_guest_activity_file` parameter.
The bulk upload request will fail if the file location is provided in both parameters.'
import_file_url:
type: string
x-stoplight:
id: z7ff2i582ps4j
description: 'URL of the file for bulk upload, publicly hosted on a cloud service like
S3. Punchh supports only the CSV file format with a maximum file size of 50 MB. The
bulk upload will fail if the file size exceeds 50 MB. Note: The file location
should be passed in either the `import_file_url` parameter or the `bulk_guest_activity_file`
parameter. The bulk upload request will fail if the file location is provided in both
parameters.'
required:
- name
examples:
Example:
value:
name: bulk-upload-batch1
bulk_guest_activity_file: CSV_FILE_PATH_GOES_HERE
import_file_url: CSV_FILE_PATH_GOES_HERE
description: "The requests for this API endpoint are passed using form data, as shown in the following\
\ examples.\n\nSample Request for Bulk Uploading Business Migration Users Using a Local CSV\
\ File\n\n```curl\ncurl --request POST \\\n--url https://server_name_goes_here.punchh.com/api2/dashboard/migration_users/bulk_bmu_upload\
\ \\\n--header 'Accept: application/json' \\\n--header 'Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE'\
\ \\\n--header 'Content-Type: application/json' \\\n--form 'name=\"BMU804\"' \\\n--form 'bulk_guest_activity_file=@\"\
CSV_FILE_PATH_GOES_HERE\"'\n``` \nSample Request for Bulk Uploading Business Migration Users\
\ Using a CSV File URL\n```curl\ncurl --request POST \\\n--url https://server_name_goes_here.punchh.com/api2/dashboard/migration_users/bulk_bmu_upload\
\ \\\n--header 'Accept: application/json' \\\n--header 'Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE'\
\ \\\n--header 'Content-Type: application/json' \\\n--form 'name=\"BMU805\"' \\\n--form 'bulk_guest_activity_file=\"\
CSV_FILE_PATH_GOES_HERE\"'\n```"
/api2/dashboard/custom_segments/members/add_users:
post:
summary: Bulk Add Users to a Custom List Segment
operationId: post-api2-dashboard-custom_segments-members-add_users
responses:
'200':
description: OK - If invalid user identifiers are specified, the response returns the list of
these identifiers under 200.
content:
application/json:
schema:
type: object
properties:
invalid_identifiers:
type: array
x-stoplight:
id: 9leoofytxxxvh
items:
x-stoplight:
id: 0hbrmohoq0lkl
type: string
examples:
Invalid Identifiers:
value:
invalid_identifiers:
- efsfsef
- 78439fer
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
errors:
type: object
x-stoplight:
id: 7xp2465evqhoy
properties:
limit_exceed:
type: string
x-stoplight:
id: w56zezq9a2o05
examples:
Limit exceeded in async mode:
value:
errors:
limit_exceed: Max 1000 users allowed per api call in async mode
description: 'Adds users in bulk to a custom list segment using their email addresses and IDs. This
API supports both sync and async modes. It validates the provided email addresses and IDs, returning
a list of invalid identifiers that are neither valid integer IDs nor valid email addresses.
Async Mode
Async, or asynchronous, mode is the preferred method for using this API. In this mode, the API
processes the users'' email addresses and IDs provided in the request in the background. You can
specify up to 1,000 user identifiers (email addresses and IDs) per API call.
Sync Mode
Sync, or synchronous, mode is an alternative method for using this API. In this mode, the API
processes the users'' email addresses and IDs provided in the request and immediately attaches
them to the segment. This mode is slower and subject to rate limits to ensure system stability
and prevent overload. You can include up to 100 user identifiers (email addresses and IDs) per
API call.
'
parameters:
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/authorization-header'
tags:
- Custom Segments
requestBody:
content:
application/json:
schema:
type: object
properties:
bulk_method:
type: string
x-stoplight:
id: 8508ice3ap2y6
description: 'Method to use for adding users in bulk. Possible values: sync, async.
Specify ''sync'' for synchronous processing, where users are created one by one in
sequence, or ''async'' for asynchronous processing, where user creation tasks are
handled concurrently to improve efficiency. If no value is specified, ''async'' mode
is used by default. '
custom_segment_id:
type: integer
x-stoplight:
id: 03bkhlcxcf8eb
description: Unique ID of the custom list segment to which users will be added
user_identifiers:
type: array
x-stoplight:
id: qb2t4xuqm66f6
description: Email addresses and/or IDs of users to be added to the specified custom
list segment. You can specify up to 1,000 users per API call in asynchronous mode
and up to 100 users per API call in synchronous mode. If both an email address and
an ID are provided as identifiers for a single user, they are treated as two separate
entries for the purpose of the limit, reducing the maximum count by 2. However, only
one user will be added to the segment in the system.
items:
x-stoplight:
id: jjnriv06vb157
type: string
required:
- custom_segment_id
- user_identifiers
examples:
Adding users in Sync mode:
value:
bulk_method: sync
custom_segment_id: 120966
user_identifiers:
- test@example.com
- '76563563'
- test1@example.com
- '76563564'
Adding users in Async mode:
value:
bulk_method: async
custom_segment_id: 120971
user_identifiers:
- test@example.com
- '76563562'
- test1@example.com
- '76563561'
description: ''
/api2/dashboard/users/redemption:
get:
summary: Redemption Look-up
tags:
- Users
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
transaction_no:
type: string
x-stoplight:
id: 3fk7m65p0hsry
description: Receipt number or transaction number on the receipt
discounts_applied:
$ref: '#/components/schemas/discounts-applied'
examples:
'Discount Type : Subscription':
value:
transaction_no: '11111111111'
discounts_applied:
redemption_id: REDEMPTION_ID_GOES_HERE
discount_type: subscription
discount_id: 5
discount_value: null
discount_details:
table:
item_id: 1
name: New Subscription Plan
image: IMAGE_URL_GOES_HERE
base_amount: null
points: null
prompt_text_short: ''
prompt_text_long: ''
description: ''
item_properties: null
created_at: '2022-11-21T07:24:42Z'
meta_detail: ''
start_date_tz: '2025-08-25T15:13:02Z'
end_date_tz: '2025-10-04T18:29:59Z'
auto_select: null
max_applicable_quantity: 9
'Discount Type : Coupon & Promo':
value:
transaction_no: '11111111111'
discounts_applied:
redemption_id: null
discount_type: redemption_code
discount_id: C8VPJTQQ48
discount_value: null
discount_details:
table:
item_id: 572
name: Test coupon
image: IMAGE_URL_GOES_HERE
base_amount: null
points: null
prompt_text_short: ''
prompt_text_long: ''
description: ''
item_properties: ''
created_at: '2025-08-13T09:41:59Z'
meta_detail: ''
start_date_tz: '2025-08-13'
end_date_tz: null
auto_select: null
max_applicable_quantity: null
'Discount Type : Redeemable':
value:
transaction_no: '11111111111'
discounts_applied:
redemption_id: REDEMPTION_ID_GOES_HERE
discount_type: redeemable
discount_id: 7
discount_value: null
discount_details:
table:
item_id: 7
name: Promo on Chicken Fajitas
image: IMAGE_URL_GOES_HERE
base_amount: 1
points: 8
prompt_text_short: null
prompt_text_long: null
description: ''
item_properties: null
created_at: '2020-06-22T10:42:02Z'
meta_detail: null
start_date_tz: null
end_date_tz: null
auto_select: false
max_applicable_quantity: null
'Discount Type : Reward':
value:
transaction_no: '11111111111'
discounts_applied:
redemption_id: REDEMPTION_ID_GOES_HERE
discount_type: reward
discount_id: 111111
discount_value: null
discount_details:
table:
item_id: 3
name: $1 off on order of Poke
image: IMAGE_URL_GOES_HERE
base_amount: 34
points: 3
prompt_text_short: null
prompt_text_long: null
description: ''
item_properties: null
created_at: '2020-06-22T10:42:02Z'
meta_detail: ''
start_date_tz: '2025-08-25T08:39:44Z'
end_date_tz: null
auto_select: false
max_applicable_quantity: null
'Discount Type : Banked Reward':
value:
transaction_no: '11111111111'
discounts_applied:
redemption_id: REDEMPTION_ID_GOES_HERE
discount_type: banked_reward
discount_id: null
discount_value: $2.00
discount_details:
table:
item_id: 2367244
name: Base Redeemable
campaign_name: null
image: IMAGE_URL_GOES_HERE
base_amount: 1
points: 0
prompt_text_short: ''
prompt_text_long: ''
description: sample description
item_properties: null
created_at: '2023-10-18T11:52:51Z'
meta_detail: ''
start_date_tz: null
end_date_tz: null
auto_select: true
max_applicable_quantity: null
operationId: get-api2-dashboard-users-redemption
description: Enables businesses to retrieve detailed redemption information for transactions processed
through Online Ordering or Point-of-Sale (POS) channels. By providing order-level visibility into
applied offers and discounts, this API supports accurate reconciliation across platforms, improves
reporting and analytics, and ensures consistency in backend systems and on customer receipts.
parameters:
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/authorization-header'
x-stoplight:
id: 3429276c52e2d
requestBody:
content:
application/json:
schema:
type: object
properties:
transaction_no:
type: integer
x-stoplight:
id: ef5r4odrzxvgv
description: Receipt number or transaction number on the receipt
required:
- transaction_no
examples:
Example:
value:
transaction_no: 11111111111
description: ''
/api2/dashboard/swag_shipping_details:
get:
summary: Get Swag Shipping Details
description: 'Returns shipping details for swag redemptions fulfilled through home delivery within
the specified date range. Swag redemptions fulfilled through store pick-up (which do not include
shipping details) are excluded.
**Authentication Note**: This is a Dashboard API endpoint. It uses a business admin API key (not
a mobile guest access token) and does not require `client` or `x-pch-digest` headers.
**Notes**:
- Pagination applies only when `response_format=JSON`.
- When `response_format=CSV`, pagination parameters are ignored and an async export is queued.
- `from_date` must be on or before `to_date`.
- `from_date` cannot be older than 90 days from the current date.
- Only swag redemptions with shipping details are returned.
See [Get User Save Points for Swag](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/swag/get/api2/mobile/user_banking_preferences),
[Save Points for Swag](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/swag/put/api2/mobile/user_banking_preferences),
[Fetch Available User Swag](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/swag/get/api2/mobile/user_merch),
and [Redeem Swag](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/swag/post/api2/mobile/swag_redemptions)'
operationId: dashboard_get_swag_shipping_details
tags:
- Swag
parameters:
- $ref: '#/components/parameters/authorization-header'
- $ref: '#/components/parameters/accept'
- $ref: '#/components/parameters/content-type'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: array
description: List of shipping detail records for swag redemptions
items:
type: object
properties:
redemption_id:
type: integer
description: Unique ID of the swag redemption
swag_id:
type: integer
description: Unique ID of the redeemed swag item
swag_name:
type: string
description: Name of the redeemed swag item
redemption_time:
type: string
format: date-time
description: UTC timestamp when the swag was redeemed, in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)
guest_id:
type: integer
description: Unique ID of the guest who redeemed the swag
guest_name:
type: string
description: Full name of the guest
guest_email:
type: string
description: Email address of the guest
guest_phone:
type: string
description: Phone number of the guest. May be null
shipping_address:
type: object
description: Shipping address details associated with the swag redemption
properties:
address_line_1:
type: string
description: Primary street address line
address_line_2:
type: string
description: Secondary street address line. May be null.
city:
type: string
description: City of the shipping address
state:
type: string
description: State or province of the shipping address
postal_code:
type: string
description: Postal or ZIP code of the shipping address
delivery_instructions:
type: string
description: Delivery instructions provided for the shipment. May be null.
status:
type: string
description: Current status of the swag redemption (for example, redeemed)
meta:
type: object
description: Pagination metadata. Returned only when response_format is JSON.
properties:
current_page:
type: integer
description: Current page number
next_page:
type: integer
x-nullable: true
description: Next page number. Returns null if there is no next page.
prev_page:
type: integer
x-nullable: true
description: Previous page number. Returns null if there is no previous page.
total_pages:
type: integer
description: Total number of available pages
total_count:
type: integer
description: Total number of records matching the request criteria
message:
type: string
description: Returned when `response_format`=CSV, indicating that the CSV export request
has been queued for processing.
examples:
JSON — Paginated shipping details:
value:
data:
- redemption_id: REDEMPTION_ID_GOES_HERE
swag_id: 1111
swag_name: Merch test 2
redemption_time: '2026-05-18T04:13:17Z'
guest_id: 11111111
guest_name: GUEST_NAME_GOES_HERE
guest_email: test@example.com
guest_phone: '1111111111'
shipping_address:
address_line_1: ADDRESS_LINE_1_GOES_HERE
address_line_2: null
city: CITY_GOES_HERE
state: STATE_GOES_HERE
postal_code: '111111'
delivery_instructions: null
status: redeemed
- redemption_id: REDEMPTION_ID_GOES_HERE
swag_id: SWAG_ID_GOES_HERE
swag_name: Merch test 2
redemption_time: '2026-05-18T03:54:48Z'
guest_id: GUEST_ID_GOES_HERE
guest_name: GUEST_NAME_GOES_HERE
guest_email: test@example.com
guest_phone: '1111111111'
shipping_address:
address_line_1: ADDRESS_LINE_1_GOES_HERE
address_line_2: null
city: CITY_GOES_HERE
state: STATE_GOES_HERE
postal_code: '111111'
delivery_instructions: null
status: redeemed
meta:
current_page: 3
next_page: 4
prev_page: 2
total_pages: 5
total_count: 10
JSON — No matching records:
value:
data: []
meta:
current_page: 1
next_page: null
prev_page: null
total_pages: 0
total_count: 0
CSV — Export queued:
value:
message: Your swag shipping details export is being prepared and will be emailed to
admin@example.com.
'400':
description: Bad Request — Missing required parameter
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: 'Required parameter missing or the value is empty: from_date'
'401':
description: Unauthorized — Invalid or missing access token
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: You need to sign in or sign up before continuing.
'403':
description: Forbidden — Insufficient permissions
content:
application/json:
schema:
type: object
properties:
no_permission_error:
type: string
examples:
default:
value:
no_permission_error:
'404':
description: Not Found — Swag feature not enabled
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: string
examples:
default:
value:
errors:
- Swag feature not enabled.
'422':
description: Unprocessable Entity — Validation error
content:
application/json:
schema:
type: object
properties:
errors:
type: object
properties:
from_date:
type: string
date_range:
type: string
response_format:
type: string
examples:
Invalid date format:
value:
errors:
from_date: Invalid date format. Use YYYY-MM-DD.
Invalid date range:
value:
errors:
date_range: from_date must be on or before to_date.
Date range exceeds lookback limit:
value:
errors:
date_range: Data cannot be fetched older than 90 days from the current date.
Invalid response format:
value:
errors:
response_format: response_format must be JSON or CSV.
requestBody:
content:
application/json:
schema:
type: object
required:
- from_date
- to_date
- response_format
properties:
from_date:
type: string
format: date
description: 'Start date of the redemption date range. Format: YYYY-MM-DD. `from_date`
cannot be older than 90 days from the current date.'
to_date:
type: string
format: date
description: 'End date of the redemption date range. Format: YYYY-MM-DD'
response_format:
type: string
description: 'Output format. Possible values: JSON or CSV (case-insensitive).'
enum:
- JSON
- CSV
page:
type: integer
description: Page number for pagination. Applicable only when response_format is JSON.
Defaults to 1 if omitted or set to 0.
per_page:
type: integer
description: Number of records to return per page. Applicable only when response_format
is JSON. Defaults to 20 if omitted or set to 0.
required: true
tags:
- name: Business Admin Users
- name: Business Migration Users
- name: Check-in
- name: Custom Segments
- name: eClub
- name: Feedback
- name: Franchisee
- name: Locations
- name: Meta
- name: Redemptions
- name: Social Cause Campaigns
- name: Swag
- name: Users
- name: WiFi Acquisition
x-stoplight:
id: 9820bbd2e8ee1
openapi: 3.1.1
servers:
- url: https://SERVER_NAME_GOES_HERE.punchh.com
components:
schemas:
balance:
type: object
title: Balance (Object)
description: Contains information about the account balance of the user
x-stoplight:
id: ce384f787fb3c
x-examples:
application/json:
banked_rewards: '2.00'
membership_level: Bronze
membership_level_id: 109
net_balance: 2
net_debits: 0
pending_points: 0
points_balance: 0
signup_anniversary_day: 04/04
total_credits: 15
total_debits: '0.0'
total_point_credits: 15
total_redeemable_visits: 1
expired_membership_level: Bronze
total_visits: 0
initial_visits: 1
unredeemed_cards: 0
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.
membership_level:
description: Membership level of the user
type: string
examples:
- Gold, Silver, Bronze
membership_level_id:
description: Membership level ID of the user
type: integer
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 to currency or reward.'
signup_anniversary_day:
type: string
description: Sign-up anniversary day and month of the current account
total_credits:
type: integer
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
expired_membership_level:
description: Expired membership level
type: string
examples:
- Gold, Silver, Bronze
total_visits:
type: integer
description: Total number of loyalty visits
initial_visits:
type: integer
description: Captures all of the visits that the guest made up to the time of migration
unredeemed_cards:
type: integer
description: Number of unredeemed cards of the user. This value is set only if the program type
is visit-based; else it will be 0.
checkin:
title: Check-in (Object)
x-stoplight:
id: kw6ay82hfxg8n
type: object
properties:
created_at:
type: string
x-stoplight:
id: mk3a7kxirb76b
format: date-time
description: Date/time when the check-in was created in the system, in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) format
external_uid:
type: string
x-stoplight:
id: nndlaqqdr760s
description: Unique ID generated by your system. We use this to prevent duplicates in case the
same transaction gets triggered twice.
checkin_id:
type: integer
x-stoplight:
id: prwyf84w1hggq
description: ID of the loyalty check-in
pending_points:
type: integer
x-stoplight:
id: e5pvyq5yx5bky
description: Number of pending points that will be earned once the pending points window expires
pending_refresh:
type: boolean
x-stoplight:
id: ee5jipgae2t6k
description: Whether the check-in is pending refresh or not
points_earned:
type: integer
x-stoplight:
id: vraqjr32347ei
description: Number of points earned for the loyalty check-in
bar_code:
type: string
x-stoplight:
id: yl3h1en1gq1dn
description: Barcode in string format
discounts-applied:
title: Discounts Applied (Object)
x-stoplight:
id: 3pbtryawksdq0
type: object
description: Contains details of the discounts applied to a transaction
properties:
redemption_id:
type: integer
x-stoplight:
id: 4qh1k67mcwbam
description: 'Unique ID associated with the redemption. Save this in your system for future
reference. Note: In case of coupons or promos, the redemption_id returned would be same as
the redemption_code.'
discount_type:
type: string
x-stoplight:
id: lbwco580f3kfl
description: 'The discount type can be any one of these values: reward || redeemable || banked_reward
|| redemption_code || subscription.'
discount_id:
type: integer
x-stoplight:
id: 3stwfl5xyy9ob
description: Unique ID that identifies the discount (e.g., reward_id, redeemable_id, redemption_code,
coupon_code)
discount_value:
type: string
x-stoplight:
id: rhbdqn7zil2no
description: The value of the discount in currency applied to the transaction. This value is
set for users on the “Points Convert to Currency” loyalty program. The default value is 0
if the user has not selected any amount to redeem or has no currency in the loyalty account.
The parameter returns a “null” value for a business that does not support banking of points
into currency.
discounts_details:
$ref: '#/components/schemas/discount-details'
discount-details:
title: Discount Details (Object)
x-stoplight:
id: rxva1rbmaqhz3
type: object
description: List of a discount's defining attributes
properties:
table:
type: object
x-stoplight:
id: q5ugq90vwp3fe
properties:
item_id:
type: integer
x-stoplight:
id: q0zoshosrwuvz
description: Unique id that identifies the Offer (e.g., Redeemable, Subscription)
name:
type: string
x-stoplight:
id: 8g5axmtdwcvkt
description: Name or title of the reward, redeemable, subscription plan, or coupon
campaign_name:
type: string
x-stoplight:
id: campaign-name-field
description: Name of the campaign through which the guest received the offer.
image:
type: string
x-stoplight:
id: 9zidu1mbqdt67
description: URL to an image of the reward, redeemable, subscription plan, or coupon
base_amount:
type: number
format: float
x-stoplight:
id: 9lscu2e9fl32d
description: Refers to the base discount amount associated with the reward, coupon, or redeemable.
For example, if a reward gives "$1 off", base_amount would be 1.
prompt_text_short:
type: string
x-stoplight:
id: 0bndl20vfjr6w
description: Short description/prompt associated with a discount in the Punchh platform,
defined when creating or editing the discount. For example, Get $1 off your next order!
prompt_text_long:
type: string
x-stoplight:
id: gyjcvvt20vyct
description: Detailed description/prompt associated with a discount in the Punchh platform,
defined when creating or editing the discount
description:
type: string
x-stoplight:
id: xp0vseok1xb16
description: Description that explains the Punchh discount (reward, coupon, etc.) as configured
in the Punchh platform
item_properties:
type: string
x-stoplight:
id: z0ktgiwo0upd8
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.
created_at:
type: string
x-stoplight:
id: 5ojnp0gfl1l6j
format: date-time
description: Date/time when the Punchh discount (reward, coupon, etc.) was created, in YYYY-MM-DDThh:mm:ss
format
meta_detail:
type: string
x-stoplight:
id: caticn653jn1r
description: Meta data configured for the redeemable. The response returns a value only
if it is configured in the Punchh platform when creating or editing the discount.
start_date_tz:
type: string
x-stoplight:
id: ahienw7ej9ma6
format: date-time
description: Start date/time of the Punchh discount (reward, coupon, etc.) in ISO 8601 format
in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format
end_date_tz:
type: string
x-stoplight:
id: spo8qnwl5hr6o
format: date-time
description: Expiry date/time of the Punchh discount (reward, coupon, etc.) in ISO 8601
format in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format
auto_select:
type: boolean
x-stoplight:
id: 7c1nyhmbzp0rm
description: 'Indicates whether the offer is enabled for auto-redemption. Possible values:
true or false'
max_applicable_quantity:
type: integer
x-stoplight:
id: q2ix233kve30m
description: 'The maximum quantity that can be discounted. Note: This parameter is returned
for offers related to Price Rollback, Target Price for Bundle, and Target Price for Bundle
(Advanced).'
points:
type: integer
x-stoplight:
id: bwc2me1ki4epk
description: Points associated with the redeemable
loyalty-cards:
title: Loyalty Cards (Array Object)
x-stoplight:
id: njdpgb4yli57e
type: array
description: Details of the loyalty cards migrated for the user
items:
x-stoplight:
id: 6r04rfmx3h83g
type: object
properties:
card_number:
type: string
x-stoplight:
id: aju6sonvqllwe
description: Unique identifier of the loyalty card associated with the user
status:
type: string
x-stoplight:
id: 1yb2rg1mynli7
description: "Status of the loyalty card. These statuses apply only to ZipLine loyalty cards\
\ and are null for other loyalty cards. Each loyalty card can have only one status. \n\n\
A Punchh representative must enable the migration of physical ZipLine loyalty cards for\
\ the business. Note: Contact your Punchh representative to update this configuration\
\ setting. \n\nPossible values:\n* ACTIVE: The card is active and ready for payment.\n*\
\ WAITING_APPROVAL: The user has enrolled or updated their bank information, and ZipLine\
\ is awaiting verification of deposit/withdrawal transactions.\n* REJECT: The user’s banking\
\ information is invalid, or the entered deposit/withdrawal amounts are incorrect.\n* SUSPENDED:\
\ The user has unenrolled, reported a lost/damaged card, or is awaiting a new card.\n* EXPIRED:\
\ The user did not verify deposit or withdrawal amounts within 60 days of enrollment or\
\ a bank update.\n* PENDING_ENROLLMENT: The user failed identity verification and is on\
\ hold for address verification.\n* WAITING_PIN: A temporary PIN has been sent to the user.\n\
* HOLD: The user may have insufficient funds (NSF) or has exceeded invalid PIN attempts."
card_signup_date:
type: string
x-stoplight:
id: x0gtealx4p3s2
description: Date when the loyalty card was issued to the user, in YYYY-MM-DD format
format: date
default: YYYY-MM-DD
examples:
- '2023-02-03'
Membership-Levels:
type: array
items:
type: object
properties:
background_image_url:
type: string
description: URL of the image that can be displayed in the app. As the URL may change with
the membership level, the image can be changed accordingly.
points_multiplier:
type: number
format: float
description: Factor (rate) with which points accumulate for a user. For example, if the points
multiplier for a particular membership level is 1, the user will get 1 point for every $1
spent. If the points multiplier is 2, the user will get 2 points for every $1 spent.
membership_level_id:
type: integer
description: Unique ID of the membership level
name:
type: string
description: Membership level name that is displayed in the app
description:
type: string
description: Description of a particular membership level. This can be displayed in the app
(e.g., "Earn twice the points for every dollar you spend.")
maximum_points:
type: integer
description: Upper threshold of a membership level in terms of points
minimum_points:
type: integer
description: Lower threshold of a membership level in terms of points
currency_earned:
type: number
description: When accumulated points reach the `points_conversion_threshold`, they are converted
to a dollar value defined by `currency_earned`. A value of 10 means that accumulated points
will be converted to banked rewards in batches of $10.
format: float
points_conversion_threshold:
type: integer
description: Number of points required to get converted to banked rewards
x-examples: []
title: Membership Levels (Array Object)
x-stoplight:
id: ipc2a8hbnjxod
description: The object contains details about each membership tier in a loyalty program.
menu_items:
title: Menu Items (Array Object)
x-stoplight:
id: vo43xxn666172
type: array
items:
x-stoplight:
id: 0d7hqxbccu5m6
type: object
properties:
item_name:
type: string
x-stoplight:
id: txt1f98dbf7w7
description: Name of the menu item
item_qty:
type: integer
x-stoplight:
id: fn7b27mvjjpxs
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: bw6k1f7e9gz5f
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.
menu_item_type:
type: string
x-stoplight:
id: oijbl5tg4m58l
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.
T - Tax item. Taxes of all sorts
P - Payment item. Visa, MasterCard, cash, gift card/certificate (when used to pay for the
order)'
menu_item_id:
type: string
x-stoplight:
id: mgipbe3tjlkl3
description: Unique identifier for the item
menu_family:
type: string
x-stoplight:
id: 5yk4al3245z0n
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.
menu_major_group:
type: string
x-stoplight:
id: ir5cqwk5bw0tc
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.
serial_number:
type: string
x-stoplight:
id: f5dnslotzn1vw
description: A serialized number that differentiates distinct menu items on a receipt. The
purpose of this field is to identify which items on the receipt 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
- item_qty
- item_amount
- menu_item_type
- menu_item_id
- menu_family
- menu_major_group
- serial_number
description: ''
redeemables:
type: array
description: 'Returned in the response of the Dashboard Meta API call '
x-stoplight:
id: 7565c93eb94f7
title: Redeemables (Array Object)
items:
x-stoplight:
id: 1aq7ecn9vu53f
type: object
properties:
redeemable_image_url:
type: string
x-stoplight:
id: lfbtw9urjod54
description: URL of the image displayed in the app to depict the redeemable
redeemable_properties:
type: string
x-stoplight:
id: pa5mdqi1eua6k
description: Properties such as "Merchandise", "Food Item", etc. can be added to a particular
redeemable
redeemable_id:
type: integer
x-stoplight:
id: lcqm12he6rijp
description: Unique ID that identifies a redeemable in the system
name:
type: string
x-stoplight:
id: 1845zbez909w9
description: Name of the redeemable
' description':
type: string
x-stoplight:
id: j6b7gu3eshf0z
description: A description of the redeemable that appears in the app. This can be used to
persuade users to redeem.
points_required_to_redeem:
type: integer
x-stoplight:
id: bloo8f7axc0iu
description: Number of points required to redeem a particular redeemable
rewards:
title: Rewards (Array Object)
x-stoplight:
id: kx3zspm53gi0f
type: array
description: Contains information about the available rewards of the user. If a user account does
not have rewards, the API returns an empty object in the response.
x-examples:
application/json:
id: 31300354648
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-05T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 100
discount_amount: 10
description: Free Sandwich with Purchase of Chips and Drink
name: Free Sandwich with Purchase of Chips and Drink
redeemable_properties: ''
items:
type: object
properties:
id:
type: integer
format: int64
description: ID of the reward
created_at:
type: string
format: date-time
enum:
- ' YYYY-MM-DDThh:mm:ssZ'
description: Date/time when the reward was created, in ISO 8601 format
examples:
- '2023-10-01T18:05:42Z'
start_date_tz:
type: string
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Start date/time of the reward, in ISO 8601 format
examples:
- '2023-10-01T18:05:42Z'
end_date_tz:
type: string
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Expiration date/time of the reward, in ISO 8601 format
examples:
- YYYY-MM-DDThh:mm:ssZ
updated_at:
type: string
enum:
- YYYY-MM-DDThh:mm:ssZ
format: date-time
description: Date/time when the reward was updated, in ISO 8601 format
examples:
- '2023-10-01T18:05:42Z'
image:
type: string
description: Image URL of the reward
status:
type: string
description: The redemption status of the reward. Only the value “unredeemed" will be returned,
indicating that the reward has not been redeemed by a user.
points:
type: integer
description: Points associated with the current reward
discount_amount:
type: integer
description: Discount amount associated with the current reward
description:
type: string
description: Description that explains the reward as configured in the Punchh platform
name:
type: string
description: Name of the 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. Redeemable properties
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 parameter is returned.
meta_data:
type: string
description: Meta data information added to a redeemable. The API returns this parameter only
if meta data information is provided for the redeemable in the Punchh platform. The maximum
length is 255 characters.
subscriptions:
title: Subscriptions (Array Object)
x-stoplight:
id: ua2meoyk2vql9
type: array
description: Contains information about different subscriptions issued to the user. This object
is returned when the subscriptions feature is available for the business. If a user does not have
active subscriptions, the API returns an empty object in the response.
x-examples:
application/json:
- plan_name: free burger
pos_meta: VIP subs
subscription_id: 123
items:
type: object
properties:
plan_name:
type: string
description: Name of the subscription plan as provided by an admin at the time of subscription
plan creation
pos_meta:
type: string
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
description: System-generated unique ID of the subscription plan that is issued for a user
User:
title: User (Object)
x-stoplight:
id: z6d3vh41qnftr
type: object
description: Includes details about the users who are registered on a particular business
x-examples:
application/json:
address: ''
anniversary: null
avatar_remote_url: null
birthday: null
city: ''
communicable_email: test@example.com
created_at: '2019-04-24T12:39:06Z'
email: test@example.com
email_verified: false
facebook_signup: null
apple_signup: null
apple_uid: null
favourite_location_ids: ''
favourite_store_numbers: ''
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
gender: ''
has_generated_fb_email: false
last_name: LAST_NAME_GOES_HERE
marketing_email_subscription: true
marketing_pn_subscription: true
migrate_status: false
passcode_configured_for_giftcards: false
phone: '1111111111'
profile_field_answers: {}
referral_code: REFERRAL_CODE_GOES_HERE
referral_path: URL_GOES_HERE
secondary_email: ''
state: ''
superuser: false
terms_and_conditions: true
title: ''
updated_at: '2020-05-06T14:52:24Z'
user_as_qrcode: QR_CODE_GOES_HERE
user_code: P11111111
user_id: 111111111
preferred_locale: ''
user_relations: []
zip_code: null
verification_mode: null
sms_subscription: false
privacy_policy: false
properties:
address:
type: string
description: Address of the user
anniversary:
type: string
description: Anniversary date of the user, in YYYY-MM-DD format
format: date
avatar_remote_url:
type: string
description: URL of the user's profile image uploaded to an online file storage system. This
will be used for users who signed up using email.
birthday:
type: string
format: date
description: Date of birth of the user, in YYYY-MM-DD format
city:
type: string
description: City where the user lives
communicable_email:
type: string
description: Email address used for communication with the user
created_at:
type: string
format: date-time
description: Date/time when the user was created in the system, in ISO 8601 format
enum:
- YYYY-MM-DDThh:mm:ssZ
email:
type: string
description: Unique email address used to identify the user
email_verified:
type: boolean
description: Whether the email address of the user has been verified or not
facebook_signup:
type: boolean
description: Whether the user has a Facebook sign-up or not
apple_signup:
type: boolean
description: Whether the user has an Apple sign-up or not. This will return true for the first
time sign-up.
apple_uid:
type: string
description: Unique ID generated by Apple
favourite_location_ids:
type: string
description: List of the user's favorite locations
favourite_store_numbers:
type: string
description: List of store numbers of the user's favorite locations
fb_uid:
type: string
description: Facebook ID that identifies the user
first_name:
type: string
description: First name of the user
gender:
type: string
description: Gender of the user
has_generated_fb_email:
type: boolean
description: Whether the user has generated a Facebook email or not
last_name:
type: string
description: Last name of the user
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
migrate_status:
type: boolean
description: Whether the user has a migrate status or not
passcode_configured_for_giftcards:
type: boolean
description: Whether the user has configured a passcode for gift cards or not
phone:
type: string
description: Phone number of the user
profile_field_answers:
type: object
description: Answers given by the user while filling in the user profile. The user submits answers
to profile field questions that are configured in the Punchh platform. A total of 25 answers
can be submitted. The keys range from 'upf0' to 'upf24'. If questions have multiple answers,
the values should be separated by a | character (pipe).
properties:
upf0:
type: string
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
upf1:
type: string
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
upf2:
type: string
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
referral_code:
type: string
description: Referral code of the user
secondary_email:
type: string
description: The secondary email address of the user is configured when a user signs up with
Facebook/Apple but does not share the email address. The app asks for an alternate email address,
which is kept as the `secondary_email`.
state:
type: string
description: State where the user lives
superuser:
type: boolean
description: Whether multiple check-ins are allowed for a user. This is used mostly for testing
purposes by developers.
terms_and_conditions:
type: boolean
description: Whether the terms and conditions of a business have been accepted by a user or
not
title:
type: string
description: Salutation as selected by the user
updated_at:
type: string
format: date-time
description: Date/time when the user was updated in the system, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
user_as_qrcode:
type: string
description: QR code that identifies the user
user_code:
type: string
description: A unique ID that identifies the user. This smaller code can be converted to a QR
code in the app and scanned at some POS systems that do not support longer codes. Alternatively,
a user could give this to the POS operator if the POS does not have a scanner.
user_id:
type: integer
description: ID that identifies the user
preferred_locale:
type: string
description: Preferred locale of the user
user_relations:
type: array
description: Relatives of the user. Valid values are "kid" and "spouse".
items: {}
zip_code:
type: string
description: Zip code where the user lives
verification_mode:
type: string
description: Mode of verification (available only for a user in awaiting migration state)
sms_subscription:
type: boolean
description: Whether the user has subscribed to SMS services or not
privacy_policy:
type: boolean
description: Whether the user has agreed to the privacy policy to use the app as per the configuration
or not
age_verified_status:
type: boolean
x-stoplight:
id: gre7jhjy7jbxl
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. '
user-info:
title: User Info (Object)
x-stoplight:
id: 374634c6cae74
type: object
description: Includes details about the users who are registered on a particular business
x-examples:
application/json:
address_line1: ''
anniversary: null
avatar_remote_url: null
birthday: null
city: ''
created_at: '2023-04-04T09:05:19Z'
email: test@example.com
email_verified: false
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
age_verified: false
privacy_policy: true
gender: male
id: 111111111
last_name: LAST_NAME_GOES_HERE
state: ''
updated_at: '2023-09-12T05:39:28Z'
zip_code: null
test_user: false
user_joined_at: '2023-04-04T09:05:19Z'
balance:
banked_rewards: '2.00'
membership_level: Bronze
membership_level_id: 109
net_balance: 2
net_debits: 0
pending_points: 0
points_balance: 0
signup_anniversary_day: 04/04
total_credits: 15
total_debits: '0.0'
total_point_credits: 15
total_redeemable_visits: 1
expired_membership_level: Bronze
total_visits: 0
initial_visits: 1
unredeemed_cards: 0
selected_card_number: null
selected_reward_id: null
selected_discount_amount: null
rewards:
- id: 31300354648
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-05T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 100
discount_amount: 10
description: Free Sandwich with Purchase of Chips and Drink
name: Free Sandwich with Purchase of Chips and Drink
redeemable_properties: ''
- id: 31300354654
created_at: '2023-10-01T18:05:42Z'
end_date_tz: '2023-10-14T18:29:59Z'
start_date_tz: '2023-10-01T18:05:42Z'
updated_at: '2023-10-01T18:05:42Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 0
discount_amount: 10
description: Free Drinks
name: Welcome Series Free Gift
redeemable_properties: ''
discount_type: null
allow_multiple: false
apple_pass_url: APPLE_PASS_URL_GOES_HERE
google_pass_url: GOOGLE_PASS_URL_GOES_HERE
authentication_token: AUTHENTICATION_TOKEN_GOES_HERE
favourite_locations: 306082,333070,304374
favourite_store_numbers: 12345,0604,1234
marketing_email_subscription: true
marketing_pn_subscription: true
passcode_configured: false
profile_field_answers:
test1: Option 1
referral_code: REFERRAL_CODE_GOES_HERE
referral_path: URL_GOES_HERE
secondary_email: test@example.com
terms_and_conditions: false
title: ''
user_as_barcode: '1111111'
user_as_qrcode: QR_CODE_GOES_HERE
user_code: P11111111
user_id: 111111111
user_relations:
- id: 111111111
relation: spouse
name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
birthday: '1999-01-01'
created_at: '2023-08-18T12:32:13Z'
updated_at: '2023-08-18T12:32:13Z'
work_zip_code: null
preferred_locale: en
force_password_reset: null
expiration_date: null
sms_subscription: true
phone: '1111111111'
migrate_status: false
email_unsubscribe: false
allow_push_notifications: true
facebook_signup: false
communicable_email: test@example.com
access_token: ACCESS_TOKEN_GOES_HERE
subscriptions:
- plan_name: free burger
pos_meta: VIP subs
subscription_id: 123
properties:
address_line1:
type: string
description: Address of the user
anniversary:
type: string
description: Anniversary date of the user, in YYYY-MM-DD format
format: date
examples:
- '2023-02-04'
avatar_remote_url:
type: string
description: URL of the user's profile image uploaded to an online file storage system. This
will be used for users who signed up using email.
birthday:
type: string
description: Date of birth of the user, in YYYY-MM-DD format
format: date
examples:
- '2023-02-04'
city:
type: string
description: City where the user lives
created_at:
type: string
format: date-time
description: Date/time when the user was created in system, in ISO 8601 format
enum:
- YYYY-MM-DDThh:mm:ssZ
examples:
- '2023-04-04T09:05:19Z'
email:
type: string
description: Unique email address of the user
email_verified:
type: boolean
description: Whether the email address of the user has been verified or not
fb_uid:
type: string
description: Facebook ID that identifies the user
first_name:
type: string
description: First name of the user
age_verified:
type: boolean
description: Whether the age of the user is verified or not
privacy_policy:
type: boolean
description: Whether the user has agreed to the privacy policy to use the app as per the configuration
or not
gender:
type: string
description: Gender of the user
id:
type: integer
description: Punchh ID of the user
last_name:
type: string
description: Last name of the user
state:
type: string
description: State in which the user lives
updated_at:
type: string
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Date/time when the user was updated in the system, in ISO 8601 format
examples:
- '2023-04-04T09:05:19Z'
zip_code:
type: string
description: Zip code of the user
test_user:
type: boolean
description: Whether the user is allowed to switch the environment in the mobile application
or not
user_joined_at:
type: string
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Sign-up anniversary date of the user, in YYYY-MM-DDThh:mm:ssZ format
examples:
- '2023-04-04T09:05:19Z'
balance:
$ref: '#/components/schemas/balance'
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 to make a payment. If this value is set, use it to make the payment for the order.
selected_reward_id:
type: string
description: This value is set only in single scan flow. This is the reward ID that the user
wants to redeem.
selected_discount_amount:
type: string
description: This value is set only in single scan flow. This is the discount amount that the
user wants to redeem.
rewards:
$ref: '#/components/schemas/rewards'
discount_type:
type: string
description: The type of discount. The values can be redeemable, discount_amount, card_completion,
redemption_code, fuel_reward, and subscription.
allow_multiple:
type: boolean
description: Whether multiple check-ins are allowed for the user or not
authentication_token:
type: string
description: Authentication token of the user that identifies the user making the API request
apple_pass_url:
type: string
description: URL that a user can use to download the user's associated loyalty Apple pass
google_pass_url:
type: string
description: URL that a user can use to download the user's associated loyalty Google pass
favourite_locations:
type: string
description: List of the user's favorite locations
favourite_store_numbers:
type: string
description: List of store numbers of the user's favorite locations
marketing_email_subscription:
type: boolean
description: Whether the user has subscribed to receive marketing emails or not
marketing_pn_subscription:
type: boolean
description: Whether the user has subscribed to marketing push notifications or not
passcode_configured:
type: boolean
description: Whether the passcode has been configured or not
profile_field_answers:
type: object
description: Answers given by the user while filling in the user profile. The user submits answers
to profile field questions that are configured in the Punchh platform. A total of 25 answers
can be submitted. The keys range from 'upf0' to 'upf24'. If questions have multiple answers,
the values should be separated by a | character (pipe).
properties:
upf0:
type: string
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
upf1:
type: string
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
upf2:
type: string
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
referral_code:
type: string
description: Referral code of the user
referral_path:
type: string
description: Referral URL of the user
secondary_email:
type: string
description: The secondary email address of the user is configured when a user signs up with
Facebook/Apple but does not share the email address. The app asks for an alternate email address,
which is kept as the `secondary_email`.
terms_and_conditions:
type: boolean
description: Whether the terms and conditions of a business have been accepted by a user or
not
title:
type: string
description: Title used for the user (e.g., Mr., Mrs., etc.)
user_as_barcode:
type: string
description: Barcode that identifies the user
user_as_qrcode:
type: string
description: QR code that identifies the user
user_code:
type: string
description: A unique ID used to identify the user. This smaller code can be converted to a
QR code in the app and scanned at POS systems that do not support longer codes. Alternatively,
a user can provide this to the POS operator if the POS device does not have a scanner.
user_id:
type: string
description: ID that identifies the user
user_relations:
$ref: '#/components/schemas/user-relation-attributes'
work_zip_code:
type: string
description: Zip code of the user's office
preferred_locale:
type: string
description: Preferred locale of the user
force_password_reset:
type: boolean
description: Whether the password of the user matches the password policy set in the Punchh
platform or not
expiration_date:
type: string
description: Last user inactivity date increased by inactive days set for the business. This
value is returned only if "Account re-evaluation strategy" is set to Guest Inactivity. All
other cases return a NULL value.
format: date
sms_subscription:
type: boolean
description: Whether the user has subscribed to SMS services or not
phone:
type: string
description: Phone number of the user
migrate_status:
type: boolean
description: Whether the user has a migrate status or not
email_unsubscribe:
type: boolean
description: Whether the user has unsubscribed to email notifications or not
allow_push_notifications:
type: boolean
description: Whether the user has subscribed to receive push notifications or not
facebook_signup:
type: boolean
description: Whether the user has a Facebook sign-up or not
communicable_email:
type: string
description: Email address used for communication with the user
access_token:
type: string
description: Access token of the user that identifies the user making the API request
age_verified_status:
type: boolean
x-stoplight:
id: uzkzwt1mvx3m6
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. '
subscriptions:
$ref: '#/components/schemas/subscriptions'
user-input:
title: User Input (Object)
x-stoplight:
id: kjyocrij4i2d0
type: object
x-examples:
- title: string
first_name: string
last_name: string
email: string
secondary_email: string
gender: string
phone: string
birthday: YYYY-MM-DD
anniversary: string
password: string
password_confirmation: string
zip_code: string
external_source: string
external_source_id: string
address_line1: string
marketing_email_subscription: true
marketing_pn_subscription: true
city: string
state: string
preferred_locale: string
original_points: -3.402823669209385e+38
business_migration_users: string
id: string
business_id: string
old_membership_no: string
card_number: string
terms_and_conditions: true
age_verified: true
privacy_policy: true
test_user: true
preferred_location_ids:
- 0
eclub_locations:
- null
user_relations_attributes:
- ? ''
: string
profile_field_answers:
upf0: string
properties:
title:
type: string
x-stoplight:
id: 769xbrq5l9sui
description: 'Salutation as selected by the user. Possible values: Mr., Miss, Mrs., Ms., Dr.,
Rev. '
first_name:
type: string
x-stoplight:
id: f9g4yjleg7g9k
description: First name of the user
last_name:
type: string
x-stoplight:
id: 0hz4od3dawdp4
description: Last name of the user
email:
type: string
x-stoplight:
id: v6uo4yye4lr77
description: New email address of the user
secondary_email:
type: string
x-stoplight:
id: 04ph8q662wbme
description: Secondary email address of the user
gender:
type: string
x-stoplight:
id: 24smrrc4re5lc
description: Gender of the user
phone:
type: string
x-stoplight:
id: egowrrjieounm
description: Phone number of the user
birthday:
type: string
x-stoplight:
id: kclwucezwvqay
enum:
- YYYY-MM-DD
description: Date of birth of the user, in YYYY-MM-DD format. This field gets updated in the
database only if the user did not set it initially during sign-up. Due to fraud protections,
guests are permitted to update their birthdays only once. Subsequent attempts to modify the
birthday parameter using the API will fail. In such a case, even though the API returns a
200 response, the user's birthday is not updated in Punchh.
anniversary:
type: string
x-stoplight:
id: jwesrpwr5823f
description: Anniversary of the user, in YYYY-MM-DD format
password:
type: string
x-stoplight:
id: ca9bnldhpvd71
description: Password of the user's account
password_confirmation:
type: string
x-stoplight:
id: pwp9m6t7le0p9
description: Password re-typed by the user for confirmation
zip_code:
type: string
x-stoplight:
id: cobsuo6e0j86z
description: Zip code where the user lives
external_source:
type: string
x-stoplight:
id: iy3tdphu3qm1s
description: External source name (third-party IDP). Possible values for external_source are
salesforce, customer_id, mparticle, azure, aws_cognito, auth0, and ext_idp. If you are using
a different one, please reach out to your implementation manager to add a new value. The values
are case-sensitive. This is a required parameter if you want to update the access token for
an external IDP user.
external_source_id:
type: string
x-stoplight:
id: qm01rmw09li2d
description: ID of the customer in the mentioned external source name (external_source), a unique
identifier generated by the third-party IDP (GUID format). This is a required parameter if
you want to update the access token for an external IDP user.
address_line1:
type: string
x-stoplight:
id: an964qvzzp4xt
description: Address of the user
marketing_email_subscription:
type: boolean
x-stoplight:
id: 7ej24u4uetcvy
description: 'Whether the user has subscribed to receive marketing emails or not. Possible values:
true, false'
marketing_pn_subscription:
type: boolean
x-stoplight:
id: x9e66n1ky3zjg
description: 'Whether the user has subscribed to marketing push notifications or not. Possible
values: true, false'
city:
type: string
x-stoplight:
id: twukhe1rmryen
description: City where the user lives
state:
type: string
x-stoplight:
id: sbo5349rtucim
description: State where the user lives
preferred_locale:
type: string
x-stoplight:
id: m42bp288k2twi
description: Preferred locale of the user
original_points:
type: number
x-stoplight:
id: 6hlrir0k06utu
format: float
description: Value of points from the incumbent loyalty program
business_migration_users:
type: boolean
x-stoplight:
id: 0v3cfda6hv6bd
description: 'Whether the user is a business migration user. Possible values: true, false'
id:
type: number
x-stoplight:
id: 53w98u5pfox9i
description: ID that identifies the user
business_id:
type: string
x-stoplight:
id: nc0k6xba2xx15
description: ID of the business to which the user is added
old_membership_no:
type: number
x-stoplight:
id: fhhf5fogl2b1y
description: Old membership number from the incumbent loyalty program
card_number:
type: string
x-stoplight:
id: udm6k3r86888e
description: Gift card number
terms_and_conditions:
type: boolean
x-stoplight:
id: fbjn8l1lcxzwl
description: 'Whether the terms and conditions of a business have been accepted by the user
or not. Possible values: true, false'
age_verified:
type: boolean
x-stoplight:
id: v6rmfn4vtunub
description: 'Whether age is verified or not. Possible values: true, false'
privacy_policy:
type: boolean
x-stoplight:
id: zqilj8eaz8lja
description: Whether the user has agreed to the privacy policy to use the app as per the configuration
or not
test_user:
type: boolean
x-stoplight:
id: cd6ohlnsjxudd
description: 'Whether the user is allowed to switch the environment in the mobile application
or not. Possible values: true, false'
preferred_location_ids:
type: array
x-stoplight:
id: lziry9heltro1
description: Favorite location IDs of the user
items:
x-stoplight:
id: 16s1fahuyodnh
type: integer
eclub_locations:
type: array
x-stoplight:
id: ppdnvgnjqvfo2
description: Favorite location of the user if the user is an eClub guest
items: {}
user_relations_attributes:
$ref: '#/components/schemas/user-relation-attributes'
profile_field_answers:
type: object
x-stoplight:
id: efggevqx2aq8n
description: Custom profile fields to be updated. For details, see [Updating Custom Profile
Fields With the Punchh Platform API](/docs/dev-portal-platform-functions/ebc7b58d69e82-updating-custom-profile-fields-with-the-punchh-platform-api).
properties:
upf0:
type: string
x-stoplight:
id: knzjld0jj4ldc
description: Each profile field (upf0 - upf24) corresponds to a line from the configuration
in the Punchh platform.
age_verified_status:
type: boolean
x-stoplight:
id: 61n0bid71g9rl
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. '
user-relation-attributes:
title: User Relation Attributes (Array Object)
x-stoplight:
id: 0cy8krzi1660q
type: array
x-examples:
application/json:
id: 111111111
relation: spouse
name: FIRST_NAME_GOES_HERE LAST_NAME_GOES_HERE
birthday: '1999-01-01'
created_at: '2023-08-18T12:32:13Z'
updated_at: '2023-08-18T12:32:13Z'
description: Contains information about the relationship details of a user, for example, spouse
and kid information. If the user account does not have relationship details, the API returns an
empty object in the response.
items:
type: object
properties:
id:
type: number
format: date-time
x-stoplight:
id: siwx79u7bfhpf
description: ID that identifies the relationship
relation:
type: string
description: Relation to the user. Valid values are "spouse" and "kid".
name:
type: string
description: Name of the relative
birthday:
type: string
description: Birthday of the relative
enum:
- YYYY-MM-DD
format: date
parameters:
authorization-header:
schema:
type: string
default: Bearer BUSINESS_ADMIN_KEY_GOES_HERE
name: Authorization
in: header
description: 'Bearer token for admin authorization, who is making a call on behalf of the customer.
Send the API key in the following format: "Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE".'
required: true
accept:
schema:
type: string
default: application/json
in: header
name: Accept
description: Advertises which content types the client is able to understand
required: true
content-type:
schema:
type: string
default: application/json
name: Content-Type
in: header
description: Set this header to application/json.
required: true
responses:
redemption-detail:
description: ''
content:
application/json:
schema:
type: object
properties:
redemption_status:
type: string
description: 'Status of the redemption. The values returned can be:
- redeemable: The redemption can be redeemed at the POS.
- expired: The redemption has expired and becomes unusable for the user.
- processed: The redemption has already been processed successfully and redeemed by
the user at a POS.
- cancelled: The redemption can be voided by a user by approaching the POS if a redemption
is done by mistake and the user wants to cancel it.'
created_at:
type: string
description: Date/time when the redemption was created in the system, in ISO 8601 format
format: date-time
redeemable_id:
type: integer
description: Unique ID of the redeemable
redemption_image_url:
type: string
description: URL of the image displayed in the app to depict the redeemable
redemption_message:
type: string
description: A descriptive message that tells a user what the user has redeemed
updated_at:
type: string
description: Date/time at which the redemption was updated in the system
format: date-time
redemption_id:
type: integer
description: Unique ID of the redemption that has been created
redemption_tracking_code:
type: string
description: Code that a user must submit at the POS to receive the redeemed reward
expiring_at:
type: string
description: Date/time when the redemption_tracking_code expires and the user cannot use
it at the POS
format: date-time
redeemable_name:
description: Name of the redeemable
type: string
redeemed_value:
type: number
description: 'For a business with banked currency, a currency value will be returned (e.g.,
10 would mean $10).
For a business without banked currency, a points value will be returned (e.g., 10 would
mean 10 points).'
format: float
user:
type: object
description: Returns information about the user who used the redemption code
properties:
email:
type: string
description: Unique email address used to identify the user
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
avatar_remote_url:
description: URL of the user's profile image uploaded to an online file storage system.
This will be used for users who signed up using email.
type: string
examples:
Process redemption:
value:
redemption_status: processed
created_at: '2016-10-07T01:36:10Z'
redeemable_id: null
redemption_image_url: IMAGE_URL_GOES_HERE
redemption_message: ''
updated_at: '2016-10-07T01:36:10Z'
redemption_id: 3562961
redemption_tracking_code: '6725261'
expiring_at: '2016-10-07T03:36:10Z'
redeemable_name: null
redeemed_value: 8.05
user:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
email: test@example.com
avatar_remote_url: null
Search redemption code:
value:
redemption_status: redeemable
created_at: '2016-10-07T01:36:10Z'
redeemable_id: null
redemption_image_url: IMAGE_URL_GOES_HERE
redemption_message: ''
updated_at: '2016-10-07T01:36:10Z'
redemption_id: 3562961
redemption_tracking_code: '6725261'
expiring_at: '2016-10-07T03:36:10Z'
redeemable_name: null
redeemed_value: 8.05
user:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
email: test@example.com
avatar_remote_url: null
redemption-object:
description: ''
content:
application/json:
schema:
type: object
description: Returns the details of a redemption done by a user
properties:
redemption_status:
type: string
description: 'Status of the redemption. The values returned can be:
- redeemable: The redemption can be redeemed at the POS.
- expired: The redemption has expired and becomes unusable for the user.
- honored: The redemption has already been processed successfully and redeemed by the
user at a POS.
- cancelled: The redemption can be voided by a user by approaching the POS if a redemption
is done by mistake and the user wants to cancel it.'
created_at:
type: string
description: Date/time when the redemption was created in the system, in ISO 8601 format
format: date-time
redeemable_id:
type: integer
description: Unique ID of the redeemable
location_id:
type: integer
description: Location ID associated with redemption
redeemable_name:
description: Name of the redeemable
type: string
redeemed_value:
type: number
description: 'For a business with banked currency, a currency value will be returned (e.g.,
10 would mean $10).
For a business without banked currency, a points value will be returned (e.g., 10 would
mean 10 points).'
format: float
redemption_image_url:
type: string
description: URL of the image displayed in the app to depict the redeemable
redemption_message:
type: string
description: A descriptive message that tells a user what the user has redeemed
updated_at:
type: string
description: Date/time at which the redemption was updated in the system
format: date-time
redemption_id:
type: integer
description: Unique ID of the redemption that has been created
redemption_tracking_code:
type: string
description: Code that a user must submit at the POS to receive the redeemed reward
expiring_at:
type: string
description: Date/time when the redemption_tracking_code expires and the user cannot use
it at the POS
format: date-time
examples:
Force redeem:
value:
redemption_status: redeemable
created_at: '2017-02-08T14:54:44Z'
redeemable_id: null
redemption_image_url: IMAGE_URL_GOES_HERE
redemption_message: Message associated with the redemption.
location_id: 304252
updated_at: '2017-02-08T14:54:44Z'
redemption_id: 6440712
redemption_tracking_code: '7714880'
expiring_at: '2017-02-08T16:54:44Z'
redeemable_name: null
redeemed_value: 50
401-unauthorized:
description: 'A business admin key is missing or invalid. A request header in the following format
is needed to make the request:
`Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE`'
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: You need to sign in or sign up before continuing.
locations-object:
description: ''
content:
application/json:
schema:
type: object
description: Returns details about each configured location of a business
properties:
address:
type: string
description: Full address of a particular business location
brand:
type: string
description: Brand name of a subcategory of a business. A parent business may own multiple
brands under one umbrella company. For example, Yum! Brands, Inc. owns KFC, Pizza Hut,
and Taco Bell.
city:
type: string
description: City of a particular business location
country:
type: string
description: Country of a particular business location
external_store_id:
type: string
description: External POS identifier configured in the Punchh platform under location
attributes via Store Locations > All Store Locations > [choose location] > POS > External
POS Store Identifier
latitude:
type: number
description: Latitude coordinate of a particular business location
format: float
location_id:
type: integer
description: Unique ID of a particular business location. This is generated by Punchh.
longitude:
type: number
description: Longitude coordinate of a particular business location
format: float
name:
type: string
description: Name of a particular business location
online_order_url:
type: string
description: Online ordering URL of a particular business location
phone_number:
type: string
description: Phone number of a particular business location
loc_email:
type: string
description: Email address of a particular business location
post_code:
type: string
description: Zip code of a particular business location
state:
type: string
description: State where a particular business is located
store_number:
type: string
description: Unique store number of a particular location, as provided by the business
store_tags:
type: string
description: Tags that provide additional details about a particular business location
store_times:
type: array
description: Business hours of a particular location
items:
type: object
properties:
day:
type: string
description: Day of week when a store is open for business
start_time:
type: string
description: Time of day when a store opens
end_time:
type: string
description: Time of day when a store closes
time_zone:
type: string
description: Time zone in which the business is located
updated_at:
type: string
description: Date/time when the location was last updated in system, in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
format
status:
type: string
description: Whether the location is enabled for check-ins or not. `approved` means enabled
for check-ins, and `disapproved` means disabled for check-ins.
franchisee_id:
type: integer
description: Unique ID of the franchisee who owns the location. This ID is generated by
Punchh.
enable_weekly_redemption_report:
type: boolean
description: Enables sharing the weekly redemption report to the location email (applicable
only for the franchisee model)
checkin_evidenced_by:
type: string
description: The method of check-in used by a user (e.g., barcode, qr_code, receipt_image,
etc.). A blank string indicates the default value of the business.
guest_identity_code_type:
type: string
description: The POS scanner type used to identify the user at the POS (e.g., barcode,
qr_code, etc.). A blank string indicates the default value of the business.
enable_pos_monitoring:
type: boolean
description: Whether POS monitoring has been enabled for the location or not. This is
used by the POS integration team members.
generate_barcodes:
type: boolean
description: Whether barcodes are generated on the receipt or not
location_groups:
type: array
description: Contains the ID and name of all location groups to which a location belongs.
A location in business can belong to multiple location groups.
items:
type: object
properties:
location_group_id:
type: integer
description: Unique ID that identifies a location group for the business. This ID
is assigned to the location group at the time of creation.
name:
type: string
description: Name of the location group that is assigned by the admin who created
it
alternate_store_number:
type: string
x-stoplight:
id: yrqjaw9nn3m7u
description: Alphanumeric alternate store identifier for a specific location, as provided
by the business. Punchh does not validate that they are unique across each location.
This information is added to the Punchh platform under Store Locations > All Store Locations
> [choose location] > Location > Alternate Store Number/Identifier.
additional_url:
type: array
x-stoplight:
id: 8xs51ynvff6aq
items:
x-stoplight:
id: laqyybjwnjky6
type: object
properties:
label:
type: string
x-stoplight:
id: u3cdftsr96bwi
description: Label for the additional URL. This additional URL label must be configured
for the business in the Punchh platform. Contact your Punchh representative for
more information about this Punchh platform configuration setting.
url:
type: string
x-stoplight:
id: w3b6raho9dmsx
description: Custom URL configured for the additional URL. This URL can link to
a location-specific brand webpage, such as catering information, discounts, private
events, reservations, or other custom content beyond the standard call, order,
and directions links. This information is added to the Punchh platform under Store
Locations > All Store Locations > [choose location] > Mobile App.
multiple_redemption_on_location:
type: boolean
x-stoplight:
id: 12x0db87gpvet
description: Indicates whether processing of multiple redemptions is enabled for the location.
A value of true means multiple redemptions are allowed.
examples:
default:
value:
address: ADDRESS_GOES_HERE
brand: Punchh
city: Mountain View
country: United States
external_store_id: 46ede9b5-287c-4ac5-84f4-86cb0927c96d
latitude: '37.406756'
location_id: 306095
longitude: '-122.109125'
name: Punchh Test Location 1
online_order_url: URL_GOES_HERE
phone_number: 1111111111
loc_email: test@example.com
post_code: '94040'
state: California
store_number: 01011-00002
store_tags: WiFi,DriveThru,GiftCard,Rewards
store_times:
- day: Mon
start_time: 6:30 AM
end_time: 11:00 PM
- day: Tue
start_time: 6:30 AM
end_time: 11:00 PM
- day: Wed
start_time: 6:30 AM
end_time: 11:00 PM
- day: Thu
start_time: 6:30 AM
end_time: 11:00 PM
- day: Fri
start_time: 6:30 AM
end_time: 11:00 PM
- day: Sat
start_time: 6:30 AM
end_time: 1:00 AM
- day: Sun
start_time: 6:30 AM
end_time: 1:00 AM
time_zone: America/Los_Angeles
updated_at: '2016-08-04T11:06:04Z'
status: approved
franchisee_id: 1234
enable_weekly_redemption_report: false
checkin_evidenced_by: barcode
guest_identity_code_type: barcode
enable_pos_monitoring: true
generate_barcodes: true
location_groups:
- location_group_id: 2051
name: Location Group A
- location_group_id: 2052
name: Location Group B
- location_group_id: 2053
name: Location Group C
alternate_store_number: UK@8907
multiple_redemption_on_location: true
additional_url:
- label: reservation
url: URL_GOES_HERE
x-ext-urls: {}