x-stoplight: id: 7d3d29e919e4b info: title: POS API version: '1.0' contact: name: Punchh Dev Support url: https://developers.punchh.com description: Punchh provides robust APIs for integrating POS (Point-of-Sale) terminals with its back end. The integration helps businesses to offer their customers loyalty programs directly from their POS systems. paths: /api/pos/locations/configuration: get: responses: '200': description: '' content: application/json: schema: type: object properties: banked_rewards_mode: type: boolean description: 'Set to 1 if program type of business is banked rewards. If this is 1, visits_mode and points_unlock_mode will be 0. Note: This parameter, along with `visits_mode` and `points_unlock_mode` parameters, is included in the response if the option to display the loyalty program structure in the POS API response is enabled in the Punchh platform for the business. Contact your Punchh representative to update this configuration setting.' business_name: type: string description: Business ID and business name. header: type: string description: Header message of location on receipt. location_id: type: integer description: Punchh's internal location ID. location_name: type: string description: Location ID and location name. log_level: type: integer description: 'Log level (0-6) of the location: 0 - None - no logs generated 1 - System - system level logs 2 - Error - any error from API or system errors 3 - Warning - app level or system level warning 4 - Information - app level logs 5 - Request - logs for all request data 6 - Response - logs for all request and response details' points_unlock_mode: type: boolean description: 'Set to 1 if program type of business is points unlock redeemables. If this is 1, banked_rewards_mode and visits_mode will be 0. Note: This parameter, along with `visits_mode` and `banked_rewards_mode` parameters, is included in the response if the option to display the loyalty program structure in the POS API response is enabled in the Punchh platform for the business. Contact your Punchh representative to update this configuration setting.' print_barcodes: type: boolean description: Set '1' to print the generated barcode on receipt; else '0'. send_to_datasink: type: boolean description: Send receipt details to Datasink API if set to 1 once receipt is closed. short_key: type: integer description: Short location access key, by which location can be accessible trailer_1: type: string description: Line 1 of receipt message trailer_2: type: string description: Line 2 of receipt message trailer_3: type: string description: Line 3 of receipt message trailer_4: type: string description: Line 4 of receipt message trailer_5: type: string description: Line 5 of receipt message update_interval: type: integer description: The time polling interval between the POS and Punchh is known as the update_interval (minutes). visits_mode: type: boolean description: 'Set to 1 if program type of business is visit-based. If this is 1, banked_rewards_mode and points_unlock_mode will be 0. Note: This parameter, along with `banked_rewards_mode` and `points_unlock_mode` parameters, is included in the response if the option to display the loyalty program structure in the POS API response is enabled in the Punchh platform for the business. Contact your Punchh representative to update this configuration setting.' multiple_redemption_on_location: type: boolean x-stoplight: id: uvxd2oc1qw9uu description: Indicates whether the multiple redemptions feature is enabled for a particular location. You can access this setting for a location on the Punchh platform under Store Locations > All Store Locations > [choose location] > Location > Allow Location for Multiple Redemption. examples: default: value: banked_rewards_mode: '1' business_name: BUSINESS_NAME_GOES_HERE header: Header Punchh location_id: '327922' location_name: 327922-punchh-demo log_level: '6' points_unlock_mode: '0' print_barcodes: '1' send_to_datasink: '1' short_key: '6624' trailer_1: 'Barcode Punchh Line #1' trailer_2: 'Barcode Punchh Line #2' trailer_3: 'Barcode Punchh Line #3' trailer_4: 'Barcode Punchh Line #4' trailer_5: THANKS Punchh update_interval: '60' visits_mode: '0' multiple_redemption_on_location: true summary: Location Configuration description: "Get the configuration for a location using a unique API key (i.e., location key).\n\ \nThis API call requires the API key as well as the business key to be sent in the HTTP Authorization\ \ header in the following format:\n\nAuthorization: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE\n\ \nwhere \n\nLOCATION_KEY_GOES_HERE is the API key (which is unique for a location) and BUSINESS_KEY_GOES_HERE\ \ is the business key (which is unique for a business). \n\nSee cURL examples for more details.\n" operationId: pos_location_config tags: - Point Of Sale parameters: - schema: type: string default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE in: header name: Authorization required: true description: This is a combination of unique API key as well as business key (UUID) as the Authorization header. - schema: type: string default: en in: header name: Accept-Language description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.) x-stoplight: id: 319b73fb3a8de /api/pos/meta: get: responses: '200': description: 'Automated approach based on different programs: A partner could use different values and also programmatically identify to display them accordingly via the Program Meta API. 1. For program_type as “visits”, in order to fetch the count for available unredeemed cards, use the “unredeemed_cards” field. In this case, net_balance will show the available visits balance earned for a user. 2. For program_type as “points” -- “points_conversion_type”: “currency” -- in order to fetch the value for dollar amount available in the user’s account, use the “banked_rewards” field. In this case, net_balance will also show banked reward currency available, but if you want to display current points available, use points_balance. This gets reset once it reaches the threshold value (returned in meta API under “points_conversion_threshold”) where those points are converted to fixed banked reward value as configured in the platform. For example, if as per business setup every 100 points earned get converted to $10 and the user currently has 40 points, then the points_balance value will be 40 until the user earns 60 more points where they will get converted to $10. Once the user earns 60 more points, the points_balance reaches 100 where it will get converted to $10 and the points_balance value will become 0. 3. For program_type as “points_unlock_redeemables” -- “points_conversion_type”: “staged” or “points_conversion_type”: “none” -- in this case, in order to fetch the current balance, you can use the net_balance value from the balance object which will get updated after every check-in or redemption. The points_balance value will also update based on earnings but will reset once it reaches the threshold value. Here, we do not recommend the point_balance value to be displayed as there is no conversion into currency or reward. 4. For program_type as "points" -- “points_conversion_type”: “rewards” -- in this case, the points_balance will show current points which will get reset once it reaches the threshold value (returned in meta API under “points_conversion_threshold”) where points are converted to a reward. Also, net_balance will display total available points of the user. For example, if as per business setup every 100 points earned get converted to a reward and the user currently has 40 points, then the points_balance value will be 40 until the user earns 60 more points where they will get converted to a reward. Once the user earns 60 more points, the points_balance reaches 100 where it will get converted to a reward and the points_balance value will become 0.' content: application/json: schema: type: object properties: minimum_payable_price: type: number description: Minimum price per unit (e.g., gallon) that needs to be paid for fuel at the time of fuel discount redemption as configured in the platform. format: float maximum_discountable_quantity: type: number description: Maximum fuel volume on which a discount can be applied at the time of fuel discount redemption. format: float program_type: type: string description: Provides information about the program type configured for the business in the Punchh platform. points_conversion_type: type: string description: 'Provides information about the conversion type configured for the business in the Punchh platform: “staged”, “currency”, “rewards”, “no conversion”.' visits_per_card: type: integer description: Number of visits that are required for a single card completion. card_redemption_value: type: number description: The value an end-user gets after a complete card is redeemed by the user. format: float minimum_visit_amount: type: number description: Minimum amount in selected currency that is required for a visit/check-in to be counted. format: float minimum_visit_hours: type: integer description: Minimum duration between two consecutive visits of an end-user so that both visits are counted separately. minimum_age_to_signup: type: integer description: Minimum age at which an end-user is allowed to sign up. earning_unit: type: string description: The value an end-user earns as the result of a check-in and as configured in the platform. currency_earned: type: number description: Value of points/visits earned as the result of a check-in as configured in the platform. format: float points_conversion_threshold: type: integer description: The threshold value at which an end-user's accumulated points get converted to rewards as configured in the platform. redemption_expiry_minutes: type: integer description: The duration after which a redemption code generated by an end-user expires. pending_points: type: boolean description: Values can be true or false based on the Punchh platform configuration. For example, if no pending check-in is selected, then its value should be 0 or false. Contact your Punchh representative for more information about this Punchh platform configuration setting. pending_points_duration: type: integer description: Pending points value configured in minutes as “Receipt update delay minutes” if pending point strategy is “Automatic after a configured time delay”. configurable_default_time_eod: type: string description: All of the pending checks will be settled at this time or after the configured "Receipt update delay minutes”, whichever is earlier. enum: - In HH:MM:SS format: time autocreate_user_phone: type: boolean description: This determines whether user creation should be allowed via phone number through POS or not. The values can be true or false depending on the platform configuration. coupon_prefix: type: string description: This field is used to provide the coupon prefix as configured in the Punchh platform. redeemables: type: array description: Returns the redeemables object. Refer to the redeemables object documentation for details. items: type: object properties: redeemable_image_url: type: string description: URL of the image displayed in the app to depict the redeemable. redeemable_properties: type: string description: Properties such as "Merchandise", "Food Item", etc. can be added to a particular redeemable. redeemable_id: type: integer description: Unique ID to identify a redeemable in the system. name: type: string description: Name of the redeemable. description: type: string description: Description of the redeemable that appears in the app. It should lure the end-users in to redeeming. points_required_to_redeem: type: integer description: Value of points required to redeem a particular redeemable. meta_data: type: string description: Meta data that can be added to a redeemable. This can be used to program mobile apps to have certain behavior when specific data are received from the server, OR it can be used as the business wishes. This can be configured from the Punchh platform and has a maximum length of 255 characters. multiple_redemptions_enabled: type: boolean x-stoplight: id: tau684ctggtyg description: Indicates whether the multiple redemptions feature is enabled for the business. If set to true, the API returns the `multiple_redemptions` object in the response. multiple_redemptions: $ref: '#/components/schemas/multiple-redemptions' examples: 200 OK: value: minimum_payable_price: null maximum_discountable_quantity: null program_type: points_unlock_redeemables points_conversion_type: staged visits_per_card: 5 card_redemption_value: 2 minimum_visit_amount: 5 minimum_visit_hours: 4 minimum_age_to_signup: 0 earning_unit: point currency_earned: 0 points_conversion_threshold: 50 redemption_expiry_minutes: 24 pending_points: true pending_points_duration: 15 configurable_default_time_eod: '23:59:59' autocreate_user_phone: true coupon_prefix: '' redeemables: - redeemable_image_url: IMAGE_URL_GOES_HERE redeemable_properties: null meta_data: Meta data redeemable_id: REDEEMABLE_ID_GOES_HERE name: 'Test Redeemable #2' description: Test redeemable description points_required_to_redeem: 20 - redeemable_image_url: IMAGE_URL_GOES_HERE redeemable_properties: null redeemable_id: REDEEMABLE_ID_GOES_HERE name: Chips & Salsa description: Chips & Salsa redeemable. only be used in the redemption of Chips & Salsa points_required_to_redeem: 35 - redeemable_image_url: IMAGE_URL_GOES_HERE redeemable_properties: null meta_data: deal 1 redeemable_id: REDEEMABLE_ID_GOES_HERE name: 50% off description: Test Description points_required_to_redeem: 200 - redeemable_image_url: IMAGE_URL_GOES_HERE redeemable_properties: null redeemable_id: REDEEMABLE_ID_GOES_HERE name: Test Redeemable description: Redeemable to test redemption! points_required_to_redeem: 1500 multiple_redemptions: exclude_interoperability_strategy_between: - offer|loyalty - loyalty|pre_purchased - promo_coupon|offer - pre_purchased|promo_coupon auto_unlock_duration: 100 discount_processing_strategy: date_of_expiry processing_priority_by_discount_type: - reward allow_multiple_redemption_on_item: true allow_qualifying_items_reused: true auto_redemption: true auto_redemption_discounts: - offer - subscription enable_auto_unlock: true enable_discount_locking: true max_redemptions_in_transaction: 20 processing_priority_by_acquisition_type: - code: offer priority: 1 multiplication_factor: 20 - code: loyalty priority: 2 multiplication_factor: 10 - code: promo_coupon priority: 3 multiplication_factor: 5 - code: pre_purchased priority: 4 multiplication_factor: 4 multiple_redemptions_enabled: true summary: Program Meta operationId: pos_program_meta tags: - Point Of Sale parameters: - schema: type: string default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE in: header name: Authorization description: This is a combination of unique API key as well as business key (UUID) as the Authorization header. required: true - schema: type: string default: en in: header name: Accept-Language description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.) description: 'Get information about business-level data, such as program type, platform configurations, list of redeemables (in case of points unlock redeemable program), etc. >Any update made to the configuration in the platform will be reflected in the response after 15 minutes, instead of in real time, in order to improve the response time. ' x-stoplight: id: c6b60d909fe82 /api/pos/users: post: responses: '200': description: '' content: application/json: schema: type: object properties: address_line1: type: string description: Address of the user age_verified: type: boolean description: Is the age of the user verified or not anniversary: type: string enum: - YYYY-MM-DD format: date description: Anniversary of the user in YYYY-MM-DD format avatar_remote_url: type: string description: Avatar URL of the user profile image balance: type: object title: Balance description: Balance Object properties: banked_rewards: type: string description: Banked rewards of the user account. This value is set only if the program type is banked rewards based; else it will be 0. expired_membership_level: type: string description: Expired membership level x-nullable: true initial_visits: type: integer description: Captures all of the visits that the guest made up to the time of migration membership_level: type: string description: Membership level of the user x-nullable: true membership_level_id: type: string description: Membership level ID of the user x-nullable: true net_balance: type: number description: Net available balance of the current account. This value always shows the available balance of the user, whether visits, banked rewards, or points. net_debits: type: number description: Net debits of the user pending_points: type: integer description: Pending points of the user points_balance: type: integer description: 'Returns the points balance of the user account. This value gets reset based on the point conversion value once reached, as configured in the Punchh platform. Note: It will increase only as per points earned, and it resets once the threshold value is reached to convert points into currency or reward.' signup_anniversary_day: type: string description: Sign-up anniversary day of the current account total_credits: type: number format: double description: Total credits of the current account total_debits: type: string description: Total debits of the current account total_point_credits: type: integer description: Total points credits of the user total_redeemable_visits: type: integer description: Total redeemable visits of the user total_visits: type: integer description: Total number of loyalty visits unredeemed_cards: type: integer description: Number of unredeemed cards of a user. This value is set only if the program type is visit-based; else it will be 0. birthday: type: string description: Birthday date of the user in YYYY-MM-DD format city: type: string description: City in which the user lives created_at: type: string description: Date/time when the user was created in the system in ISO 8601 format discount_type: type: string description: Discount type. e.g., 'card_completion' || 'reward' || 'discount_amount' || 'redemption_code' email: type: string description: Email address of the user email_verified: type: boolean description: Is the email address of the user verified or not fb_uid: type: string description: Unique Facebook ID of the user first_name: type: string description: First name of the user gender: type: string description: Gender of the user id: type: integer description: Unique ID of the user last_name: type: string description: Last name of the user phone: type: string description: Phone number of the user privacy_policy: type: boolean description: Has the user agreed to the privacy policy or not rewards: type: object title: Rewards Object properties: rewards: type: array items: type: object properties: created_at: type: string description: Date/time when the reward was created (in ISO 8601 format) description: type: string description: Description that explains rewards as configured in the Punchh platform discount_amount: type: integer description: Discount amount associated with the current reward end_date_tz: type: string description: Expiry date of the reward in ISO 8601 format id: type: integer description: Reward ID format: int64 image: type: string description: Image URL of the reward name: type: string description: Name of the reward points: type: integer description: Points associated with the current reward redeemable_properties: type: string description: Comma-separated values that provide additional details about a redeemable. For example, a redeemable could be a "Food_Item" or "Merchandise", etc. Can be configured for a business in the Punchh platform and attached to a redeemable. If no value is attached to a redeemable, a blank field will be returned. start_date_tz: type: string description: Start date of the reward in ISO 8601 format status: type: string description: The redemption status of a reward. Currently only the value "Unredeemed" will be returned. This signifies that the reward has not been redeemed by an end-user. updated_at: type: string description: Date/time when the reward was updated (in ISO 8601 format) type: type: string description: 'This will be either redeemable or reward. Possible Redemptions and Create Redemption API requests depend on what is returned in this field. In cases where this field is not returned, assume that the type is reward.' meta_data: type: string description: Meta data that can be added to a redeemable. This will be returned only if it is configured in the Punchh platform. The maximum length is 255 characters. selected_card_number: type: string selected_discount_amount: type: string selected_reward_id: type: integer state: type: string description: State in which the user lives updated_at: type: string description: Date/time when the user was updated in the system in ISO 8601 format user_digest: type: string zip_code: type: string description: Zip code of the user age_verified_status: type: boolean x-stoplight: id: h2n1oeu4hqoc9 description: 'Whether or not the user has undergone age verification by Koupon Media. Possible values: true, false. The value is set to true if the user''s age is verified by Koupon Media; otherwise, it is set to false. The response returns this parameter in sign-in, sign-up, and user update APIs if Koupon Media is selected as the age verification adapter for the business in the Punchh platform. Contact your Punchh representative to update this Punchh platform configuration setting.' examples: default: value: address_line1: null anniversary: null avatar_remote_url: null birthday: '1999-01-01' city: null created_at: '2020-10-06T14:59:18Z' email: test@example.com email_verified: false fb_uid: null first_name: FIRST_NAME_GOES_HERE age_verified: false privacy_policy: false gender: male id: 60389313 last_name: LAST_NAME_GOES_HERE state: null updated_at: '2020-10-06T14:59:18Z' zip_code: '12344' balance: banked_rewards: 0 membership_level: null membership_level_id: null net_balance: 0 net_debits: 0 pending_points: 0 points_balance: 0 signup_anniversary_day: 10/06 total_credits: 0 total_debits: '0.0' total_point_credits: 0 total_redeemable_visits: 0 expired_membership_level: null total_visits: 0 initial_visits: 0 unredeemed_cards: 0 user_digest: USER_DIGEST_GOES_HERE selected_card_number: null selected_reward_id: null selected_redeemable_id: null rewards: [] discount_type: null phone: '1111111111' age_verified_status: true summary: Create New User description: 'This API creates a new user account by using phone or email or card (at least one of them). ' operationId: pos_create_user tags: - Point Of Sale parameters: - schema: type: string default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE in: header name: Authorization description: This is a combination of unique API key as well as business key (UUID) as the Authorization header. required: true x-stoplight: id: 4d4a03b9a5f32 requestBody: content: application/json: schema: type: object properties: phone: type: string description: Phone number of the user. The phone number parameter accepts various formats, including 1111-111-111, 111-111-1111, or 1111111111. email: type: string description: Email address of the user card_number: type: string description: Loyalty card number of the user first_name: type: string description: First name of the user last_name: type: string description: Last name of the user birthday: type: string description: Birth date of the user enum: - YYYY-MM-DD format: date address_line1: type: string description: Address of the user city: type: string description: City in which the user lives gender: type: string description: Gender of the user (i.e., `male` ,`female`, or `declined`) terms_and_conditions: type: boolean description: Whether the end-user has agreed to the terms and conditions to use the app as per the configuration. Possible values - `True`, `true`, `False`, `false` send_compliance_sms: type: boolean description: Send true in order to trigger a compliance / opt-in SMS for the user. Possible values - `True`, `true`, `False`, `false`. Both `terms_and_conditions` and `send_compliance_sms` must be set to "true" for the API to trigger a compliance (opt-in) SMS. favourite_locations: type: string description: List of favorite locations of the end-user. You can fetch location_name and location_id from the Location Configuration API. The parameter accepts an empty value ("") for the blank favorite locations list. signup_channel: type: string default: POS description: 'By default, the sign-up channel will always be “POS” when the user is created at POS. However, a business can allow users to sign up through channels other than POS. If a user has already signed up with the business through a channel other than POS when creating the user in Punchh, you can override the default channel of “POS” and instead specify the sign-up channel of the user.

When a user is created through channels other than POS, the user is created in a non-Punchh system as configured by the business. For example, a user who signs up with the business through the "MobileFacebook" sign-up channel is created in a non-Punchh system. If this same user is created in Punchh using the Create New User API, you can override the default value of "POS" in the signup_channel parameter with "MobileFacebook" (i.e., the channel through which the user first signed up with the business).

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