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: {}