Punchh Redemptions 1.0 (Legacy) API - POS

For more information, see POS Module 6 - Redemptions. Published by PAR on the pos section of the PAR developer portal; 6 operations. Certification required.

OpenAPI Specification

punchh-pos-redemptions-legacy-openapi.yml Raw ↑
info:
  title: Redemptions 1.0 (Legacy) API - POS
  version: '1.0'
  contact:
    name: Punchh Dev Support
    url: https://developers.punchh.com
  description: For more information, see [POS Module 6 - Redemptions](/docs/dev-portal-pos/tutorials/modules/6-redemptions/overview).
paths:
  /api/pos/redemptions/possible:
    post:
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  category:
                    type: string
                    description: 'Category returned for the redemption requested where values can be:
                      `redeemable`, `processed`, `expired`, `invalid`, `unassigned`. Consider the redemption
                      valid only when the category is returned as `redeemable`.'
                  qualified_menu_items:
                    $ref: '#/components/schemas/qualified_menu_items'
                  discount_distribution_items:
                    $ref: '#/components/schemas/discount_distribution_items'
                  redemption_amount:
                    type: number
                    format: double
                    description: Total redemption amount that can be applied on the order
                  redemption_code:
                    type: string
                    description: Redemption code associated with the redemption
                  redemption_id:
                    type: integer
                    format: int64
                    description: 'Unique ID associated with the redemption. Save this in your system for
                      future reference.

                      Note: In case of coupons or promos, the redemption_id returned would be same as
                      the redemption_code.'
                  status:
                    type: string
                    description: Message that explains if the customer's redemption was successfully completed
                      or not
                  max_applicable_quantity:
                    type: string
                    description: 'Maximum quantity that can be discounted.

                      Note: This key will be returned for offers related to Price Rollback.'
                  campaign_name:
                    type: string
                    x-stoplight:
                      id: nay0zr8svppfc
                    description: Name of the campaign through which the guest received the offer
                  qualifying_conditions:
                    type: object
                    x-stoplight:
                      id: 2onqx9pg08p59
                    description: The object lists all qualification criteria (both receipt-level and line-item)
                      for submitted offers that failed while processing the redemption. This object is
                      returned in the response only if the option to return the qualifying conditions
                      for Redemption 1.0 APIs is enabled for the business in the Punchh platform. See
                      the `data` object under [Get Qualification Criteria Response](https://developers.partech.com/docs/dev-portal-platform-functions/97ec083d6cf57-get-qualification-criteria-qc-list#response-body)
                      in Platform Functions for descriptions of the parameters in `qualifying_conditions`.
              examples:
                default:
                  value:
                    status: Redeemed at February 23, 2026 13:02 by <user> at Punchh Demo. It can be honored.
                    redemption_amount: 8
                    category: redeemable
                    qualified_menu_items:
                    - item_name: Sandwich
                      item_qty: 1
                      item_amount: 5
                      menu_item_type: M
                      menu_item_id: '102000'
                      menu_family: Sandwich
                      menu_major_group: Sandwich
                      serial_number: '1.0'
                    - item_name: Coke
                      item_qty: 1
                      item_amount: 7
                      menu_item_type: M
                      menu_item_id: '102000'
                      menu_family: Coke
                      menu_major_group: Coke
                      serial_number: '2.0'
                    discount_distribution_items:
                    - item_name: Sandwich DISCOUNT
                      item_qty: 1
                      item_amount: -3
                      menu_item_type: R
                      menu_item_id: '102000'
                      menu_family: Sandwich
                      menu_major_group: Sandwich
                      serial_number: 1
                    - item_name: Coke DISCOUNT
                      item_qty: 1
                      item_amount: -5
                      menu_item_type: R
                      menu_item_id: '102000'
                      menu_family: Coke
                      menu_major_group: Coke
                      serial_number: 2
                    max_applicable_quantity: 1
                    campaign_name: Mass Campaign Offer
                    redemption_id: 21762
                    redemption_code: REDEMPTION_CODE_GOES_HERE
        '422':
          description: Unprocessable Entity - Unauthorized attempt to redeem a discount at a restricted
            location
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                Unauthorized attempt to redeem a discount at a restricted location:
                  value:
                  - The location (location name) has been disabled for redemption. Please alert a staff
                    member if you think this is an error.
      summary: Possible Redemptions (Redemptions 1.0)
      description: "Use this API to verify that a redemption can be applied on a given check. \n\nNote:\
        \ The API returns a 422 error message when a user attempts to redeem a loyalty/ non-loyalty discount\
        \ at a location that is disabled for redemption by the business. This error message can be customized\
        \ for the businesses in the Punchh platform to provide them greater flexibility and control over\
        \ the user experience during redemption attempts at such locations. Contact your Punchh representative\
        \ for more information about this Punchh platform configuration.\n\n## Rules To Select Discount\
        \ Type\n\nFollowing are the rules to decide what `discount_type` to use in the Possible Redemptions\
        \ and Create Redemption API requests:\n\n### `reward`\nIn the User Lookup and Fetch Balance API\
        \ request, if any item in the `rewards` array has either `type` as `reward` or does not have a\
        \ `type` key, use its `id` to pass in the `reward_id` parameter and use `discount_type` = `reward`\
        \ in the Possible Redemptions and Create Redemption API requests.\n\n### `redeemable`\nIn the\
        \ User Lookup and Fetch Balance API request, if any item in the `rewards` array has `type` as\
        \ `redeemable`, use its `id` to pass in the `redeemable_id` parameter and use `discount_type`\
        \ = `redeemable` in the Possible Redemptions and Create Redemption API requests.\n\n### `discount_amount`\n\
        In the User Lookup and Fetch Balance API request, if the value of `banked_rewards` returned in\
        \ the `balance` object is greater than 0, then pass a dollar amount in the `redeemed_points` parameter\
        \ not exceeding the value of `banked_rewards` and use `discount_type` = `discount_amount` in the\
        \ Possible Redemptions and Create Redemption API requests.\n\n### `card_completion`\nIn the User\
        \ Lookup and Fetch Balance API request, if the value of `unredeemed_cards` returned in the `balance`\
        \ object is greater than 0, then use `discount_type` = `card_completion` in the Possible Redemptions\
        \ and Create Redemption API requests.\n\n### `redemption_code`\nWhen Redemption Code or Punchh\
        \ Coupon Code is entered on the POS either by scanning it using the QR code scanner or by manually\
        \ entering it, pass that code in the `redemption_code` parameter and use `discount_type` = `redemption_code`\
        \ in the Possible Redemptions and Create Redemption API requests.\n\n### `fuel_reward`\nIt allows\
        \ a user to use the fuel discount balance, and it can be redeemed when the user is identified\
        \ on the check. Use `discount_type` as `fuel_reward` in API requests.\n\n### `subscription`\n\
        It allows a user to redeem subscription related benefits. In the User Lookup and Fetch Balance\
        \ API request, if the `subscriptions` object has `subscription_id`, use this ID to pass in the\
        \ `subscription_id` parameter and use `discount_type` = `subscription` in the Possible Redemptions\
        \ and Create Redemption API requests."
      operationId: pos_redemption_possible
      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: 1531b3adec3c5
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                discount_type:
                  type: string
                  description: 'The type of discount. Choose from the following: reward, redeemable, discount_amount,
                    card_completion, redemption_code, fuel_reward, subscription. See the top of this page
                    for more information about each type. '
                reward_id:
                  type: integer
                  format: int64
                  description: Send this value when discount_type is reward. This is the ID of the reward
                    the user wants to redeem.
                redeemable_id:
                  type: string
                  description: Send this value when discount_type is redeemable. This is the ID of the
                    redeemable the user wants to redeem.
                redeemed_points:
                  type: string
                  description: Send this value when discount_type is discount_amount. This is the amount
                    of the banked rewards the user wants to redeem.
                redemption_code:
                  type: string
                  description: Send this value when discount_type is redemption_code. This is the Redemption
                    Code or Punchh Coupon Code that is entered on the POS and is associated with redemption.
                subscription_id:
                  type: string
                  description: Send this value when discount_type is subscription. This is a system-generated
                    unique ID of the subscription that is issued to the guest.
                cc_last4:
                  type: integer
                  description: Last 4 digits of the user's credit card number
                employee_id:
                  type: string
                  description: 'The ID of the employee involved in the transaction. Used in reporting
                    and Punchh Reviews module. '
                employee_name:
                  type: string
                  description: 'The name of the employee involved in the transaction. Used in reporting
                    and the Punchh Reviews module. '
                menu_items:
                  $ref: '#/components/schemas/menu_items'
                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 the receipt per [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
                    format including TZ offset from UTC (e.g., YYYY-MM-DDThh:mm:ss-±hh:mm)
                transaction_no:
                  type: string
                  description: The specific transaction from the POS
                external_uid:
                  type: string
                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
                email:
                  type: string
                  description: The email address of the user. In the case of the 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 the user redeems
                    a reward through the single scan flow. The code identifies the user requesting the
                    redemption.
                channel:
                  type: string
                  description: 'Channel through which the redemption was requested. Possible values are:
                    online_order, pos, web, mobile, dashboard, chatbot, kiosk.'
              required:
              - discount_type
              - reward_id
              - redeemable_id
              - redeemed_points
              - redemption_code
              - subscription_id
              - menu_items
              - receipt_amount
              - subtotal_amount
              - receipt_datetime
              - transaction_no
              - punchh_key
              - email
              - single_scan_code
            examples:
              Subscription:
                value:
                  discount_type: subscription
                  subscription_id: '1111111'
                  cc_last4: 1111
                  employee_id: 7
                  employee_name: EMPLOYEE_NAME_GOES_HERE
                  menu_items:
                  - item_name: Whiterice
                    item_qty: 1
                    item_amount: 2.86
                    menu_item_type: M
                    menu_item_id: '12'
                    menu_family: '800'
                    menu_major_group: '152'
                    serial_number: '1.0'
                  subtotal_amount: 10.72
                  receipt_amount: 10.72
                  receipt_datetime: '2023-02-18T18:05:01+05:30'
                  transaction_no: 5678
                  external_uid: EXTERNAL_UID_GOES_HERE
                  punchh_key: PUNCHH_KEY_GOES_HERE
                  email: test@example.com
                  channel: pos
              Reward:
                value: "{\n  \"discount_type\": \"reward\",\n  \"reward_id\": 1399335,\n  \"cc_last4\"\
                  : 4387,\n  \"employee_id\": 7,\n  \"employee_name\": \"EMPLOYEE_NAME_GOES_HERE\",\n\
                  \  \"menu_items\": [\n    {\n      \"item_name\": \"Whiterice\",\n      \"item_qty\"\
                  : 1,\n      \"item_amount\": 2.86,\n      \"menu_item_type\": \"M\",\n      \"menu_item_id\"\
                  : \"12\",\n      \"menu_family\": \"800\",\n      \"menu_major_group\": \"152\",\n \
                  \     \"serial_number\": \"1.0\"\n    },\n    {\n      \"item_name\": \"Brownrice\"\
                  ,\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  \"subtotal_amount\": 10.72,\n\
                  \  \"receipt_amount\": 10.72,\n  \"receipt_datetime\": \"2015-04-03T18:05:01+05:30\"\
                  ,\n  \"transaction_no\": 5678,\n  \"external_uid\": \"a unique id\",\n  \"punchh_key\"\
                  : \"PUNCHH_KEY_GOES_HERE\",\n  \"email\": \"test@example.com\",\n  \"channel\": \"pos\"\
                  \n}"
              Card Redemption:
                value: "{\n  \"discount_type\": \"card_completion\",\n  \"receipt_amount\": 12.72,\n \
                  \ \"cc_last4\": 4387,\n  \"employee_id\": 7,\n  \"employee_name\": \"EMPLOYEE_NAME_GOES_HERE\"\
                  ,\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  \"subtotal_amount\": 12.72,\n\
                  \  \"receipt_datetime\": \"2015-04-03T18:05:01+05:30\",\n  \"transaction_no\": 5678,\n\
                  \  \"external_uid\": \"a unique id\",\n  \"punchh_key\": \"PUNCHH_KEY_GOES_HERE\",\n\
                  \  \"process\": true,\n  \"email\": \"test@example.com\"\n}"
              Discount Amount:
                value: "{\n  \"discount_type\": \"discount_amount\",\n  \"redeemed_points\": \"REDEEMED_POINTS_GOES_HERE\"\
                  ,\n  \"receipt_amount\": 12.72,\n  \"cc_last4\": 4387,\n  \"employee_id\": 7,\n  \"\
                  employee_name\": \"EMPLOYEE_NAME_GOES_HERE\",\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  \"subtotal_amount\": 12.72,\n  \"\
                  receipt_datetime\": \"2015-04-03T18:05:01+05:30\",\n  \"transaction_no\": 5678,\n  \"\
                  external_uid\": \"a unique id\",\n  \"punchh_key\": \"PUNCHH_KEY_GOES_HERE\",\n  \"\
                  process\": true,\n  \"email\": \"test@example.com\"\n}"
              Redemption Code:
                value: "{\n  \"discount_type\": \"redemption_code\",\n  \"receipt_amount\": 12.72,\n \
                  \ \"cc_last4\": 4387,\n  \"employee_id\": 7,\n  \"employee_name\": \"EMPLOYEE_NAME_GOES_HERE\"\
                  ,\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  \"subtotal_amount\": 12.72,\n\
                  \  \"receipt_datetime\": \"2015-04-03T18:05:01+05:30\",\n  \"transaction_no\": 5678,\n\
                  \  \"external_uid\": \"a unique id\",\n  \"punchh_key\": \"PUNCHH_KEY_GOES_HERE\",\n\
                  \  \"process\": true,\n  \"redemption_code\": \"REDEMPTION_CODE_GOES_HERE\"\n}"
              Fuel Reward:
                value: "{\n  \"discount_type\": \"fuel_reward\",\n  \"payable\": \"112\",\n  \"employee_id\"\
                  : \"2\",\n  \"employee_name\": \"EMPLOYEE_NAME_GOES_HERE\",\n  \"punchh_key\": \"PUNCHH_KEY_GOES_HERE\"\
                  ,\n  \"email\": \"test@example.com\",\n  \"external_uid\": \"EXTERNAL_UID_GOES_HERE\"\
                  ,\n  \"subtotal_amount\": \"100\",\n  \"receipt_amount\": \"100\",\n  \"sequence_no\"\
                  : \"2215\",\n  \"transaction_no\": \"00057647\",\n  \"process\": \"true\",\n  \"receipt_datetime\"\
                  : \"2019-05-12T09:22:47-08:00\",\n  \"menu_items\": [\n    {\n      \"item_name\": \"\
                  Adult\",\n      \"item_qty\": \"1\",\n      \"item_amount\": \"100\",\n      \"menu_item_type\"\
                  : \"M\",\n      \"menu_item_id\": \"10\",\n      \"menu_family\": \"10\",\n      \"\
                  menu_major_group\": \"10\",\n      \"serial_number\": \"1.0\"\n    }\n  ]\n}"
              Redeemable:
                value: "{\n  \"discount_type\": \"redeemable\",\n  \"redeemable_id\": \"REDEEMABLE_ID_GOES_HERE\"\
                  ,\n  \"cc_last4\": 4387,\n  \"employee_id\": 7,\n  \"employee_name\": \"EMPLOYEE_NAME_GOES_HERE\"\
                  ,\n  \"menu_items\": [\n    {\n      \"item_name\": \"Whiterice\",\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\": \"Brownrice\"\
                  ,\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  \"subtotal_amount\": 10.72,\n\
                  \  \"receipt_amount\": 10.72,\n  \"receipt_datetime\": \"2015-04-03T18:05:01+05:30\"\
                  ,\n  \"transaction_no\": 5678,\n  \"external_uid\": \"a unique id\",\n  \"punchh_key\"\
                  : \"PUNCHH_KEY_GOES_HERE\",\n  \"email\": \"test@example.com\"\n}"
  /api/pos/redemptions:
    post:
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  category:
                    type: string
                    description: 'Category returned for the redemption requested where values can be:
                      `redeemable`, `processed`, `expired`, `invalid`, `unassigned`. Consider the redemption
                      valid only when the category is returned as `redeemable`.'
                  qualified_menu_items:
                    $ref: '#/components/schemas/qualified_menu_items'
                  discount_distribution_items:
                    $ref: '#/components/schemas/discount_distribution_items'
                  redemption_amount:
                    type: number
                    format: double
                    description: Total redemption amount that can be applied on the order
                  redemption_code:
                    type: string
                    description: Redemption code associated with the redemption
                  redemption_id:
                    type: integer
                    format: int64
                    description: 'Unique ID associated with the redemption. Save this in your system for
                      future reference. Note: In case of coupons or promos, the redemption_id returned
                      would be same as the redemption_code.'
                  status:
                    type: string
                    description: Message that explains if the customer's redemption was successfully completed
                      or not
                  max_applicable_quantity:
                    type: string
                    description: 'Maximum quantity that can be discounted. Note: This key will be returned
                      for offers related to Price Rollback.'
                  qualifying_conditions:
                    type: object
                    x-stoplight:
                      id: o93tke6pzpsv6
                    description: The object lists all qualification criteria (both receipt-level and line-item)
                      for submitted offers that failed while processing the redemption. This object is
                      returned in the response only if the option to return the qualifying conditions
                      for Redemption 1.0 APIs is enabled for the business in the Punchh platform. See
                      the `data` object under [Get Qualification Criteria Response](https://developers.partech.com/docs/dev-portal-platform-functions/97ec083d6cf57-get-qualification-criteria-qc-list#response-body)
                      in Platform Functions for descriptions of the parameters in `qualifying_conditions`.
                  campaign_name:
                    type: string
                    x-stoplight:
                      id: i48yporb101bg
                    description: Name of the campaign through which the guest received the offer
              examples:
                default:
                  value:
                    status: Redeemed at February 23, 2026 13:02 by <user> at Punchh Demo. It can be honored.
                    redemption_amount: 8
                    category: redeemable
                    qualified_menu_items:
                    - item_name: Sandwich
                      item_qty: 1
                      item_amount: 5
                      menu_item_type: M
                      menu_item_id: '102000'
                      menu_family: Sandwich
                      menu_major_group: Sandwich
                      serial_number: '1.0'
                    - item_name: Coke
                      item_qty: 1
                      item_amount: 7
                      menu_item_type: M
                      menu_item_id: '102000'
                      menu_family: Coke
                      menu_major_group: Coke
                      serial_number: '2.0'
                    discount_distribution_items:
                    - item_name: Sandwich DISCOUNT
                      item_qty: 1
                      item_amount: -3
                      menu_item_type: R
                      menu_item_id: '102000'
                      menu_family: Sandwich
                      menu_major_group: Sandwich
                      serial_number: 1
                    - item_name: Coke DISCOUNT
                      item_qty: 1
                      item_amount: -5
                      menu_item_type: R
                      menu_item_id: '102000'
                      menu_family: Coke
                      menu_major_group: Coke
                      serial_number: 2
                    max_applicable_quantity: 1
                    campaign_name: Mass Campaign Offer
                    redemption_id: 21762
                    redemption_code: REDEMPTION_CODE_GOES_HERE
        '422':
          description: Unprocessable Entity - Unauthorized attempt to redeem a discount at a restricted
            location
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                Unauthorized attempt to redeem a discount at a restricted location:
                  value:
                  - The location (location name) has been disabled for redemption. Please alert a staff
                    member if you think this is an error.
      summary: Create Redemption (Redemptions 1.0)
      description: "Redeems a card, reward, redeemable, or discount specified in the discount_type parameter\
        \ against a receipt. Every request must have phone, email, card_number, or redemption_code as\
        \ a parameter. \n\nPunchh evaluates eligibility during the Possible Redemptions call using the\
        \ receipt details provided (item name, price, quantity, identifiers, etc.). During the Create\
        \ Redemption call, Punchh revalidates the same receipt to ensure the qualifying conditions are\
        \ still met before honoring the redemption. \n\nIf any item attributes change between the two\
        \ calls, Punchh may be unable to match the qualifying items, which can cause the Create Redemption\
        \ call to fail or return a different result—even if the Possible Redemptions call was successful.\n\
        \nNote: The API returns a 422 error message when a user attempts to redeem a loyalty/ non-loyalty\
        \ discount at a location that is disabled for redemption by the business. This error message can\
        \ be customized for the businesses in the Punchh platform to provide them greater flexibility\
        \ and control over the user experience during redemption attempts at such locations. Contact your\
        \ Punchh representative for more information about this Punchh platform configuration.\n\n## Rules\
        \ to Select Discount Type\n\nFollowing are the rules to decide what `discount_type` to use in\
        \ the Possible Redemptions and Create Redemption API requests:\n\n### `reward`\nIn the User Lookup\
        \ and Fetch Balance API request, if any item in the `rewards` array has either `type` as `reward`\
        \ or does not have a `type` key, use its `id` to pass in the `reward_id` parameter and use `discount_type`\
        \ = `reward` in the Possible Redemptions and Create Redemption API requests.\n\n### `redeemable`\n\
        In the User Lookup and Fetch Balance API request, if any item in the `rewards` array has `type`\
        \ as `redeemable`, use its `id` to pass in the `redeemable_id` parameter and use `discount_type`\
        \ = `redeemable` in the Possible Redemptions and Create Redemption API requests.\n\n### `discount_amount`\n\
        In the User Lookup and Fetch Balance API request, if the value of `banked_rewards` returned in\
        \ the `balance` object is greater than 0, then pass a dollar amount in the `redeemed_points` parameter\
        \ not exceeding the value of `banked_rewards` and use `discount_type` = `discount_amount` in the\
        \ Possible Redemptions and Create Redemption API requests.\n\n### `card_completion`\nIn the User\
        \ Lookup and Fetch Balance API request, if the value of `unredeemed_cards` returned in the `balance`\
        \ object is greater than 0, then use `discount_type` = `card_completion` in the Possible Redemptions\
        \ and Create Redemption API requests.\n\n### `redemption_code`\nWhen Redemption Code or Punchh\
        \ Coupon Code is entered on the POS either by scanning it using the QR code scanner or by manually\
        \ entering it, pass that code in the `redemption_code` parameter and use `discount_type` = `redemption_code`\
        \ in the Possible Redemptions and Create Redemption API requests.\n\n### `fuel_reward`\nIt allows\
        \ a user to use the fuel discount balance, and it can be redeemed when the user is identified\
        \ on the check. Use `discount_type` as `fuel_reward` in API requests.\n\n### `subscription`\n\
        It allows a user to redeem subscription related benefits. In the User Lookup and Fetch Balance\
        \ API re

# --- truncated at 32 KB (80 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/punchh/refs/heads/main/openapi/punchh-pos-redemptions-legacy-openapi.yml