# Offer Validation

**Method:** `POST`

**Path:** `/api/affordability/v1/offer/validate`

**Category:** Affordability Suite

**Authentication:** Required

## Description

Use this API for validating applied offers.

## Request Body

Content-Type: `application/json`

- `payment_method` (`string`) **required** — Type of payment method you want to use to accept a payment.<br><br>Accepted values:<ul><li>`CREDIT_EMI`</li><li>`DEBIT_EMI`</li><li>`CARDLESS_EMI`</li><li>`UPI`</ul></li>
- `order_amount` (`object`) **required** — An object that contains order amount.
  - `value` (`string`) **required** — The transaction amount in Paisa.<br><ul><li>Minimum value: `100` (₹1)</li><li>Maximum value: `100000000` (₹10 lakh)<br><br>Example: `1100`
  - `currency` (`string`) **required** — Type of currency.<br><br>Example: `INR`

- `payment_amount` (`object`) **required** — An object that contains the payment amount details after the offer has been applied.<br><br>**Note**: Ensure you pass the `auth_amount` details. This `auth_amount` detail is returned through our Offer Discovery API response.
  - `value` (`string`) **required** — The transaction amount in Paisa.<br><ul><li>Minimum value: `100` (₹1)</li><li>Maximum value: `100000000` (₹10 lakh)<br><br>Example: `1100`
  - `currency` (`string`) **required** — Type of currency.<br><br>Example: `INR`

- `payment_option` (`object`) **required** — An object that contains the details of the payment options.<br><br>You can use either `card_details` or `card_token_details` or `cardless_details` or `upi_details` as a payment option. One object is mandatory to process the request.
  - `card_details` (`object`) — **Mandatory for Plain Card Transactions**<br><br>An object that contains the card details.
    - `card_number` (`string`) **required** — Card Number.<ul><li>Maximum length: `19` characters.</li><li>Minimum length: `12` characters.</ul></li>Example: `123456789012`<br><br>Supported characters: `0-9`
    - `registered_mobile_number` (`string`) — **Mandatory** for `Bank EMI (Debit_EMI)`<br><br>Card registered mobile number.<ul><li>Maximum length: `20` characters.</li><li>Minimum length: `9` characters.</ul></li>Example: `9876543210`<br><br>Supported characters: <ul><li>`0-9`</li><li>`+`</ul></li>

  - `cardless_details` (`object`) — **Mandatory for Cardless Transactions**<br><br>An object that contains the cardless transaction details.
    - `pan_number` (`string`) **required** — Pan last digits<br><br>Example: `234A`<br><br>**Note**: Refer to the parameter `pan_number_last_digit_count` returned by the **Offer Discovery - Cardless API** response, to determine how many digits to include in the `pan_number`. This value may vary based on the acquirer.
    - `registered_mobile_number` (`string`) **required** — Card registered mobile number.<ul><li>Maximum length: `20` characters.</li><li>Minimum length: `9` characters.</ul></li>Example: `9876543210`<br><br>Supported characters: <ul><li>`0-9`</li><li>`+`</ul></li>

  - `card_token_details` (`object`) — **Mandatory for Tokenized Transactions**<br><br>An object that contains the card token details.
    - `last4_digit` (`string`) — The last four digits of your card number.<br><br>Has to be 4 digits.<br><br>Example: `1234`<br><br>Supported characters: `0-9`
    - `token` (`string`) — Unique identifier of the card as per the token transaction type.<ul><li>Minimum: `1` characters.</li><li>Maximum: `50` characters.</ul></li>Example: `0342ef1e0342ef1e`
    - `token_txn_type` (`string`) — The type of token transaction.<br><br>Accepted values:<ul><li>`ALT_TOKEN`</li><li>`NETWORK_TOKEN`</li><li>`ISSUER_TOKEN`</ul></li>
    - `token_id` (`string`) — Unique identifier of the token in the Pine Labs Online database.<ul><li>Maximum length: `50` characters.<br><br>Example: `token-v1-0811030624-aa-RBDgpR`

  - `upi_details` (`object`) — **Mandatory for UPI Transactions**<br><br>An object that contains the UPI transaction details.
    - `txn_mode` (`COLLECT | INTENT`) — UPI transaction mode.<br><br>Accepted values:<ul><li>`COLLECT`</li><li>`INTENT`</ul></li>
    - `payer` (`object`) **required** — Payer of the transaction.
      - `vpa` (`string`) — VPA of the payer.<br><br>Example: `customer@upi`
      - `phone_number` (`string`) **required** — Phone number for the payer.<br><br>Example: `9876543210`



- `offer_data` (`object`) **required** — An object that contains details related to the offer. **Required for CREDIT_EMI, DEBIT_EMI, CARDLESS_EMI, and UPI payment methods.**
  - `offer_details` (`object`) — An object that contains details related to the offer entity/issuer.
    - `id` (`string`) — The ID of the Issuer offering the offer. Optional for UPI.
    - `name` (`string`) — The name of the Issuer offering the offer. Optional for UPI.
    - `display_name` (`string`) — The display name of the Issuer.
    - `issuer_type` (`string`) — The type of the Issuer offering the offer.<br><br>Example:<ul><li>`CC_BANK`<li>`DC_BANK`<li>`UPI`
    - `priority` (`string`) — The priority of the Issuer offering the offer.
    - `tenure` (`object`) — The EMI tenure details related to the offer.
      - `tenure_id` (`string`) — The ID of the Tenure.
      - `name` (`string`) — The name of the Tenure.
      - `tenure_type` (`string`) — Type of the tenure.
      - `tenure_value` (`integer`) — The value of the tenure.
      - `offer_ranking` (`integer`) — Sort ranking for the offer.
      - `is_mobile_number_required_for_eligibility` (`boolean`) — Mobile number is required for velocity check or not.
      - `is_offer_auto_applied` (`boolean`) — Is this particular offer going to be auto applied at the UI.
      - `issuer_offer_parameters` (`object[]`) — List of Offer Schemes for the tenure.
        - `program_type` (`string`) — Type of program. Accepted values: BANK_EMI, BRAND_EMI, MERCHANT_BANK_OFFER, MERCHANT_BRAND_OFFER, BRAND_OFFER, MY_EMI
        - `offer_id` (`string`) — Unique identifier of the offer.
        - `offer_parameter_id` (`string`) — Unique offer parameter identifier.

      - `details` (`object[]`) — An array of objects that contains the product details.
        - `product_code` (`string`) — Unique Product identifier of the product.<br><b>Example: `redmi_1`
        - `product_display_name` (`string`) — Name of the Product.<br><br>Example: `Oneplus 13R`
        - `brand_id` (`string`) — Unique brand identifier of the product.<br><br>Example: `3`
        - `product_offer_parameters` (`object[]`) — An array of objects that contains the product offer schemes for the product EMI details.
          - `program_type` (`string`) — Type of the Program.<br><br>Accepted values:<ul><li>`BRAND_EMI`</li><li>`BANK_EMI`</li><li>`MERCHANT_BRAND_OFFER`</li><li>`MERCHANT_BANK_OFFER`</li><li>`BRAND_OFFER`</li><li>`MY_EMI`</ul></li>
          - `offer_id` (`string`) — Unique identifier of the offer.<br><br>Example: `309`
          - `offer_parameter_id` (`string`) — Unique offer parameter identifier.<br><br>Example: `20`

        - `product_amount` (`object`) — An object that contains the product amount details.
          - `currency` (`string`) **required** — Type of currency.<br><br>Example: `INR`
          - `value` (`integer`) **required** — The transaction amount in Paisa.

        - `product_coupon_discount_amount` (`object`) — An object that contains the product coupon discount amount details.
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `subvention` (`object`) — An object that contains the subvention details.
          - `subvention_type` (`string`)
          - `percentage` (`string`)
          - `amount` (`object`)
            - `currency` (`string`) **required**
            - `value` (`integer`) **required**

          - `breakup` (`object`)
            - `brand` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**


            - `merchant` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**


            - `issuer` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**


            - `dealer` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**



          - `max_amount` (`object`)
            - `currency` (`string`) **required**
            - `value` (`integer`) **required**

          - `min_amount` (`object`)
            - `currency` (`string`) **required**
            - `value` (`integer`) **required**


        - `discount` (`object`) — An object that contains the product discount details.
          - `discount_type` (`string`) — Type of discount.<br><br>Possible values:<ul><li>`INSTANT`</li><li>`DEFERRED`</ul></li>
          - `discount_string` (`string`)
          - `percentage` (`number`)
          - `amount` (`string`)
          - `max_amount` (`object`)
            - `currency` (`string`) **required**
            - `value` (`integer`) **required**

          - `min_amount` (`object`)
            - `currency` (`string`) **required**
            - `value` (`integer`) **required**

          - `discount_deferred_duration_value` (`string`)
          - `discount_deferred_duration_type` (`string`) — Possible values:<ul><li>`DAY`</li><li>`MONTH`</ul></li>
          - `breakup` (`object`)
            - `brand` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**


            - `merchant` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**


            - `issuer` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**


            - `dealer` (`object`)
              - `amount` (`object`)
                - `currency` (`string`) **required**
                - `value` (`integer`) **required**




        - `brand_name` (`string`) — Name of the Brand.<br><br>Example: `Oneplus`
        - `interest_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `downpayment_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `after_downpayment_reduced_product_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `interest_rate` (`string`) — Rate of interest applied on the product.<br><br>Example: `19`
        - `cart_coupon_discount_product_share` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `bundle_id` (`string`) — Unique identifier of the bundle offer in Pine Labs Online Database.<br><br>Example: `BUNDLE_002_OE3`

      - `discount` (`string`) — Discount details applicable for the tenure.
      - `auth_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `loan_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `total_discount_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `net_payment_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `monthly_emi_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `total_emi_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `intrest_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `total_subvention_amount` (`string`) — Total subvention amount for the tenure.
      - `interest_rate_percentage` (`integer`)
      - `processing_fee_details` (`object`)
        - `amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**


      - `processing_fee_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `emi_type` (`string`) — EMI type for the tenure.<ul><li>`LOW_COST`<li>`NO_COST`<li>`STANDARD`
      - `split_emi_display_name` (`string`)
      - `split_emi_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `split_emi_percentage` (`number`)
      - `convenience_fee_breakdown` (`object`)
        - `fee_calculated_on_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `fee_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `tax_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `additional_fee_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `maximum_fee_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `applicable_fee_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**

        - `subvented_fee_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**


      - `cart_coupon_discount_amount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `total_coupon_discount` (`object`)
        - `currency` (`string`) **required**
        - `value` (`integer`) **required**

      - `downpayment_details` (`object`) — **Mandatory for EMI with Downpayment**<br><br>An object that contains the downpayment details.
        - `downpayment_amount` (`object`)
          - `currency` (`string`) **required**
          - `value` (`integer`) **required**





- `customer_details` (`object`) — An object that contains details related to the customer.
  - `customer_id` (`string`) — Details related to the customer ID, required for Pine Labs Online tokenized saved cards.


### Example Request

```json
{
  "payment_method": "your_payment_method",
  "order_amount": {
    "value": "your_value",
    "currency": "your_currency"
  },
  "payment_amount": {
    "value": "your_value",
    "currency": "your_currency"
  },
  "payment_option": {
    "card_details": {
      "card_number": "your_card_number"
    },
    "cardless_details": {
      "pan_number": "your_pan_number",
      "registered_mobile_number": "9876543210"
    },
    "upi_details": {
      "txn_mode": "INTENT",
      "payer": {
        "phone_number": "9876543210"
      }
    }
  },
  "offer_data": {
    "offer_details": {
      "tenure": {
        "issuer_offer_parameters": [],
        "details": [
          {
            "product_offer_parameters": [],
            "product_amount": {
              "currency": "your_currency",
              "value": 10000
            },
            "product_coupon_discount_amount": {
              "currency": "your_currency",
              "value": 10000
            },
            "subvention": {
              "amount": {
                "currency": "your_currency",
                "value": 10000
              },
              "breakup": {
                "brand": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                },
                "merchant": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                },
                "issuer": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                },
                "dealer": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                }
              },
              "max_amount": {
                "currency": "your_currency",
                "value": 10000
              },
              "min_amount": {
                "currency": "your_currency",
                "value": 10000
              }
            },
            "discount": {
              "max_amount": {
                "currency": "your_currency",
                "value": 10000
              },
              "min_amount": {
                "currency": "your_currency",
                "value": 10000
              },
              "breakup": {
                "brand": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                },
                "merchant": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                },
                "issuer": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                },
                "dealer": {
                  "amount": {
                    "currency": "your_currency",
                    "value": 10000
                  }
                }
              }
            },
            "interest_amount": {
              "currency": "your_currency",
              "value": 10000
            },
            "downpayment_amount": {
              "currency": "your_currency",
              "value": 10000
            },
            "after_downpayment_reduced_product_amount": {
              "currency": "your_currency",
              "value": 10000
            },
            "cart_coupon_discount_product_share": {
              "currency": "your_currency",
              "value": 10000
            }
          }
        ],
        "auth_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "loan_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "total_discount_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "net_payment_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "monthly_emi_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "total_emi_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "intrest_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "processing_fee_details": {
          "amount": {
            "currency": "your_currency",
            "value": 10000
          }
        },
        "processing_fee_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "split_emi_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "convenience_fee_breakdown": {
          "fee_calculated_on_amount": {
            "currency": "your_currency",
            "value": 10000
          },
          "fee_amount": {
            "currency": "your_currency",
            "value": 10000
          },
          "tax_amount": {
            "currency": "your_currency",
            "value": 10000
          },
          "additional_fee_amount": {
            "currency": "your_currency",
            "value": 10000
          },
          "maximum_fee_amount": {
            "currency": "your_currency",
            "value": 10000
          },
          "applicable_fee_amount": {
            "currency": "your_currency",
            "value": 10000
          },
          "subvented_fee_amount": {
            "currency": "your_currency",
            "value": 10000
          }
        },
        "cart_coupon_discount_amount": {
          "currency": "your_currency",
          "value": 10000
        },
        "total_coupon_discount": {
          "currency": "your_currency",
          "value": 10000
        },
        "downpayment_details": {
          "downpayment_amount": {
            "currency": "your_currency",
            "value": 10000
          }
        }
      }
    }
  }
}
```

## Responses

- `200` — 200
- `400` — 400

### Response Schema

- `code` (`string`)
- `message` (`string`)

### Example Response

```json
{
  "code": "ELIGIBLE",
  "message": "Offer is Eligible"
}
```

---

Reference: https://localhost:3000/api/affordability-suite/offer-validation-create
