> ## Documentation Index
> Fetch the complete documentation index at: https://developers.bonifiq.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Estimates points, cashback earned and cashback usage limits per product.

> Send an array of products with the store's external `Id` and current `Price`.
Each item is estimated independently. Response order and repeated IDs are preserved.
`Name` and `PriceCurrency` are optional; no currency conversion is performed.
            
### Cashback earned
            
- `Points`: estimated points after bonuses, limits and zero-point rules.
- `Cashback`: cashback earned from those points, truncated to whole currency units.
- `CashbackPercent`: earned percentage before monetary truncation, rounded upward to a whole percentage. Do not calculate it from `Cashback / Price`.
            
### Cashback you can use
            
- `CanUseCashback`: `false` for a restricted product; `true` for a permitted or unknown product, including when restrictions are disabled or empty.
- `CanUseCashbackPercent`: maximum percentage of the price payable with cashback, assuming sufficient balance. Preserves the configured percentage and fractions, reduced by the monetary cap when applicable. Redemption rounding is not applied here.
            
A restricted product can still earn cashback. For a positive price, its `CanUseCashbackPercent` is `0`.
Without active cashback, all four cashback fields are `null`. For a nonpositive price, both percentage fields are `null`.
Percentages use percentage units: `20` means **20%**.
            
### Example
            
With no bonuses, one point per currency unit, cashback worth 0.01 per point, a 20% usage limit and no monetary cap:
            
**Request**
            
```json
[{"Id":"4571633770876","Price":2999.99}]
```
            
**Product estimate**
            
```json
{
  "Id": "4571633770876",
  "Points": 2999,
  "Cashback": 29,
  "CashbackPercent": 1,
  "CanUseCashback": true,
  "CanUseCashbackPercent": 20
}
```
            
For a price of 200, a 30% usage limit and a monetary cap of 40, `CanUseCashbackPercent` is **20%**.
            
### Cart restrictions
            
Minimum purchase requirements are ignored here and checked on the cart.
The monetary cap applies to the **whole order**: do not sum product estimates to authorize redemption.
Actual use also depends on the customer's balance and monetary rounding at redemption.



## OpenAPI

````yaml https://api.bonifiq.com.br/swagger/Public%20APIs/swagger.json post /v1/pub/Product/pointslist
openapi: 3.0.0
info:
  title: BonifiQ Public APIs
  description: "# Introduction \nThis is the BonifiQ Public APIs documentation. With these endpoints you can interact with BonifiQ systems and enhance your program points.\n\nThese Public endpoints are intended to be used in a frontend, browser-based enviroment such as with jQuery, React, Vue, etc\n\n# Limitations\nThese Public endpoints are very limited, as they are not as much secure as the [Private APIs](https://api.bonifiq.com.br/apidocs/private).\n\nPrivate informations such as e-mails, document number, phones, program points usage, etc are very limited as responses from this APIs. \n\nIf your requirement is in a more broad scenario, requiring more security or access to more information please use our [Private APIs](https://api.bonifiq.com.br/apidocs/private)\n\n# Authentication\nTo make a call from this APIs you need an API Token. This Token can be generated in BonifiQ admin panel, at the API Keys menu.\n\nAfter generating this API Token, you need to pass it from the X-BQ-ApiToken http header for every request. \n\nAs an example, for using it with a Java Script ```fetch``` call you would do:\n```\nfetch('https://api.bonifiq.com.br/v1/pub/customer/1/points', {\n\t\tmethod: 'GET',\n\t\theaders: {\n\t\t\t'X-BQ-APITOKEN': 'YOUR_API_TOKEN'\n\t\t},\n\t}).then(response => response.json()).then(response => console.log(response))\n```\n\n# How to use this page\n## Making calls\nYou can simulate, test and make calls to API from this Swagger page. To do that:\n- Click on the **Authorize** button\n- Inform the API Token and click on **Authorize**\n- From the list bellow, choose an API call and click on **Try it out**\n- Inform the required parameters (if any) and click on **Execute**\n\n## Verifying requests and responses bodies\nIn every API Call there is an explanation of what each field means, theirs types and accepted values for all Requests and Responses.\n\nTo view this information, just go to any API Call bellow and in the Responses section, click on the Schema."
  version: 1.0.0
servers:
  - url: https://api.bonifiq.com.br
    description: Production
  - url: https://backend--homolog.previewqa.bonifique.com.br
    description: Sandbox
security: []
tags:
  - name: Customization
    description: Retrieve customizations for the loyalty program
paths:
  /v1/pub/Product/pointslist:
    post:
      tags:
        - Product
      summary: Estimates points, cashback earned and cashback usage limits per product.
      description: >-
        Send an array of products with the store's external `Id` and current
        `Price`.

        Each item is estimated independently. Response order and repeated IDs
        are preserved.

        `Name` and `PriceCurrency` are optional; no currency conversion is
        performed.
                    
        ### Cashback earned
                    
        - `Points`: estimated points after bonuses, limits and zero-point rules.

        - `Cashback`: cashback earned from those points, truncated to whole
        currency units.

        - `CashbackPercent`: earned percentage before monetary truncation,
        rounded upward to a whole percentage. Do not calculate it from `Cashback
        / Price`.
                    
        ### Cashback you can use
                    
        - `CanUseCashback`: `false` for a restricted product; `true` for a
        permitted or unknown product, including when restrictions are disabled
        or empty.

        - `CanUseCashbackPercent`: maximum percentage of the price payable with
        cashback, assuming sufficient balance. Preserves the configured
        percentage and fractions, reduced by the monetary cap when applicable.
        Redemption rounding is not applied here.
                    
        A restricted product can still earn cashback. For a positive price, its
        `CanUseCashbackPercent` is `0`.

        Without active cashback, all four cashback fields are `null`. For a
        nonpositive price, both percentage fields are `null`.

        Percentages use percentage units: `20` means **20%**.
                    
        ### Example
                    
        With no bonuses, one point per currency unit, cashback worth 0.01 per
        point, a 20% usage limit and no monetary cap:
                    
        **Request**
                    
        ```json

        [{"Id":"4571633770876","Price":2999.99}]

        ```
                    
        **Product estimate**
                    
        ```json

        {
          "Id": "4571633770876",
          "Points": 2999,
          "Cashback": 29,
          "CashbackPercent": 1,
          "CanUseCashback": true,
          "CanUseCashbackPercent": 20
        }

        ```
                    
        For a price of 200, a 30% usage limit and a monetary cap of 40,
        `CanUseCashbackPercent` is **20%**.
                    
        ### Cart restrictions
                    
        Minimum purchase requirements are ignored here and checked on the cart.

        The monetary cap applies to the **whole order**: do not sum product
        estimates to authorize redemption.

        Actual use also depends on the customer's balance and monetary rounding
        at redemption.
      operationId: Product_PointsList
      requestBody:
        x-name: request
        description: >-
          Array of products with external Id and Price; Name and PriceCurrency
          are optional.
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ProductPointRequest'
        required: true
        x-position: 1
      responses:
        '200':
          description: Product estimates in the same order as the request.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductPointResponse'
      security:
        - TokenAuthentication: []
components:
  schemas:
    ProductPointRequest:
      type: object
      description: >-
        One product to estimate independently. Supply prices in the currency
        used by the loyalty program.
      additionalProperties: false
      required:
        - Id
        - Price
      properties:
        Id:
          type: string
          description: Product Id on the ecommerce platform
          minLength: 1
          example: SKU-001
        Price:
          type: number
          description: Current product selling price
          format: decimal
          example: 499.99
        PriceCurrency:
          type: string
          description: >-
            Optional currency label (for example, BRL). It does not select a
            currency or perform conversion;

            the calculation uses Price as supplied.
          nullable: true
          example: BRL
        Name:
          type: string
          description: >-
            Optional product name. It does not affect product lookup, earning
            rules or cashback restrictions.
          nullable: true
          example: Running shoes
    ProductPointResponse:
      type: object
      description: >-
        Earnings estimate and cashback usage eligibility for one requested
        product.
      additionalProperties: false
      properties:
        Id:
          type: string
          description: >-
            External product identifier, returned exactly as supplied in the
            request.
          example: SKU-001
        Points:
          type: integer
          description: >-
            Estimated earned points after applicable bonuses, limits and
            zero-point rules.

            This is a product estimate, not a guarantee of points granted for a
            completed order.
          format: int32
          example: 499
        Cashback:
          type: number
          description: >-
            Estimated cashback earned from the simulated points, truncated to
            whole currency units.

            Null when cashback is unavailable; zero is a valid estimate and
            differs from null.
          format: decimal
          nullable: true
          example: 4
        CashbackPercent:
          type: number
          description: >-
            The cashback percentage calculated from the final simulated points
            and product price,

            including bonuses and limits, rounded up to a whole percentage
            before monetary truncation.

            It will be null if cashback is unavailable or the product price is
            not positive.
          format: decimal
          nullable: true
          example: 1
        CanUseCashback:
          type: boolean
          description: >-
            Whether cashback can be used on this product, considering product
            restrictions only,

            not the customer's balance. False for restricted products, true for
            eligible products

            (including unknown products or disabled restrictions), and null when
            cashback is inactive.
          nullable: true
          example: true
        CanUseCashbackPercent:
          type: number
          description: >-
            Maximum percentage of this product's price payable with cashback,
            assuming sufficient balance.

            Includes product restrictions, the configured percentage limit and
            monetary cap, before redemption rounding.

            Null without active cashback or for a nonpositive price; zero for a
            restricted product.
          format: decimal
          nullable: true
          example: 20
  securitySchemes:
    TokenAuthentication:
      type: apiKey
      description: API Tokeen
      name: X-BQ-ApiToken
      in: header

````