> ## Documentation Index
> Fetch the complete documentation index at: https://doc-test-my.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Request a Product Configuration

> Request a Product Configuration for Payment Gateway using Razorpay Partners APIs.

Use this endpoint to request a product configuration for Payment Gateway or Payment Links. You can even accept terms and conditions for the requested product using these APIs. Know about the [various error responses](/docs/api/partners/errors) for this API.

<RequestExample>
  ```bash Curl theme={null}
  curl -X POST https://api.razorpay.com/v2/accounts/acc_HQVlm3bnPmccC0/products \
  -u <ACCESS_TOKEN> \
  -H "Content-Type: application/json" \
  -d '{
    "product_name": "payment_gateway",
    "tnc_accepted": true,
    "ip": "233.233.233.234"
  }'
  ```

  ```java Java theme={null}
  RazorpayClient razorpay = new RazorpayClient("[ACCESS_TOKEN]");

  String accountId = "acc_GP4lfNA0iIMn5B";

  JSONObject productRequest = new JSONObject();
  productRequest.put("product_name","payment_gateway");
  productRequest.put("tnc_accepted",true);
  productRequest.put("ip","233.233.233.234");

  Account product = instance.product.requestProductConfiguration(accountId, productRequest);
  ```

  ```php PHP theme={null}
  $api = new Api(null, null, "<ACCESS_TOKEN>");

  $accountId = "acc_GP4lfNA0iIMn5B";

  $products = $api->account->fetch($accountId)->products();

  $products->requestProductConfiguration(array(
   "product_name" => "payment_gateway",
   "tnc_accepted" => true,
   "ip" => "233.233.233.234"
  ));
  ```

  ```javascript Node.js theme={null}
  const instance = new Razorpay({
    oauthToken: "<ACCESS_TOKEN>",

  const accountId = "acc_Q8BdU0uPXXXpqI";

  instance.products.requestProductConfiguration(accountId, {
    "product_name" : "payment_gateway",
    "tnc_accepted" : true,
    "ip" : "233.233.233.234"
  });
  ```

  ```ruby Ruby theme={null}
  require "razorpay"
  Razorpay.setup('ACCESS_TOKEN')
  accountId = "acc_GP4lfNA0iIMn5B"

  Razorpay::Product.request_product_configuration(accountId, {
    "product_name": "payment_gateway",
    "tnc_accepted": true,
    "ip": "233.233.233.234"
  })
  ```

  ```csharp .NET theme={null}
  RazorpayClient client = new RazorpayClient("[ACCESS_TOKEN]");
  string accountId = "acc_Z6t7VFTb9xHeOs";

  Dictionary<string, object> productRequest = new Dictionary<string, object>();
  productRequest.Add("product_name", "payment_gateway");
  productRequest.Add("tnc_accepted", true);
  productRequest.Add("ip", "233.233.233.234");

  Product product = client.Product.Create(productRequest);
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "requested_configuration": {
      "payment_methods": []
    },
    "active_configuration": {
      "payment_capture": {
        "mode": "automatic",
        "refund_speed": "normal",
        "automatic_expiry_period": 7200
      },
      "settlements": {
        "account_number": null,
        "ifsc_code": null,
        "beneficiary_name": null
      },
      "checkout": {
        "theme_color": "#FFFFFF",
        "flash_checkout": true,
        "logo": "https://example.com/your_logo"
      },
      "refund": {
        "default_refund_speed": "normal"
      },
      "notifications": {
        "whatsapp": true,
        "sms": false,
        "email": [
          "b963e252-1201-45b0-9c39-c53eceb0cfd6_load@gmail.com"
        ]
      },
      "payment_methods": {
        "netbanking": {
          "enabled": true,
          "instrument": [
            {
              "type": "retail",
              "bank": [
                "hdfc",
                "sbin",
                "utib",
                "icic",
                "scbl",
                "yesb"
              ]
            }
          ]
        },
        "wallet": {
          "enabled": true,
          "instrument": [
            "airtelmoney",
            "jiomoney",
            "olamoney",
            "payzapp",
            "mobikwik"
          ]
        },
        "upi": {
          "enabled": true,
          "instrument": [
            "upi"
          ]
        }
      }
    },
    "requirements": [
      {
        "field_reference": "individual_proof_of_address",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/stakeholders/{stakeholderId}/documents",
        "status": "required",
        "reason_code": "document_missing"
      },
      {
        "field_reference": "individual_proof_of_identification",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/stakeholders/{stakeholderId}/documents",
        "status": "required",
        "reason_code": "document_missing"
      },
      {
        "field_reference": "business_proof_of_identification",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/documents",
        "status": "required",
        "reason_code": "document_missing"
      },
      {
        "field_reference": "settlements.beneficiary_name",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/products/acc_prd_HEgNpywUFctQ9e",
        "status": "required",
        "reason_code": "field_missing"
      },
      {
        "field_reference": "settlements.account_number",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/products/acc_prd_HEgNpywUFctQ9e",
        "status": "required",
        "reason_code": "field_missing"
      },
      {
        "field_reference": "settlements.ifsc_code",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/products/acc_prd_HEgNpywUFctQ9e",
        "status": "required",
        "reason_code": "field_missing"
      },
      {
        "field_reference": "contact_name",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0",
        "status": "required",
        "reason_code": "field_missing"
      },
      {
        "field_reference": "name",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/stakeholders",
        "status": "required",
        "reason_code": "field_missing"
      },
      {
        "field_reference": "customer_facing_business_name",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0",
        "status": "required",
        "reason_code": "field_missing"
      },
      {
        "field_reference": "kyc.pan",
        "resolution_url": "/accounts/acc_HQVlm3bnPmccC0/stakeholders",
        "status": "required",
        "reason_code": "field_missing"
      }
    ],
    "tnc":{
      "id": "tnc_IgohZaDBHRGjPv",
      "accepted": true,
      "accepted_at": 1641550798
    },
    "id": "acc_prd_HEgNpywUFctQ9e",
    "account_id": "acc_HQVlm3bnPmccC0",
    "product_name": "payment_gateway",
    "activation_status": "needs_clarification",
    "requested_at": 162547884
  }
  ```
</ResponseExample>

## Path Parameters

<ParamField path="account_id" type="string">
  The unique identifier of the sub-merchant account generated by Razorpay. For example, `acc_HQVlm3bnPmccC0`. This id is used to fetch or update a product. The product is created for this sub-merchant account id.
</ParamField>

## Request Parameters

<ParamField body="product_name" type="string" required>
  The product(s) to be configured. Possible values:

  * `payment_gateway`
  * `payment_links`
</ParamField>

<ParamField body="tnc_accepted" type="boolean">
  Pass this parameter to accept terms and conditions. Send this parameter along with the `ip` parameter when the `tnc` is accepted. Possible value is `true` which indicates acceptance of terms and conditions.
</ParamField>

<ParamField body="ip" type="string">
  The IP address of the merchant while accepting the terms and conditions. Send this parameter along with the `tnc_accepted` parameter when the `tnc` is accepted.
</ParamField>

## Response Parameters

<ResponseField name="requested_configuration" type="object">
  The configuration of the product requested by the user that is yet to be set as active.
</ResponseField>

<ResponseField name="tnc" type="object">
  It consists of the configuration for the accepted terms and conditions by the merchant for the requested product. If the terms and conditions are accepted by the user for the requested product, it would consist of following fields:
</ResponseField>

<ResponseField name="id" type="string">
  The unique identifier representing the acceptance of terms and conditions for a product by a user.
</ResponseField>

<ResponseField name="accepted" type="boolean">
  The flag that represents whether the terms and conditions were accepted by the user.

  * `true`: Terms and conditions are accepted by user.
  * `false`: Terms and conditions are not accepted by user.
</ResponseField>

<ResponseField name="accepted_at" type="integer">
  The Unix timestamp at which the terms and conditions were accepted by the user for the requested product.
</ResponseField>

<ResponseField name="active_configuration" type="object">
  The configuration of the product that has been set as active.
</ResponseField>

<ResponseField name="payment_capture" type="object">
  The Payment Capture Settings Object
</ResponseField>

<ResponseField name="mode" type="string">
  The mode through which payment capture is done. Possible values:

  * `automatic`: Payments are auto-captured (default)
  * `manual`: You have to manually capture payments using our Capture API or from the Partner's Dashboard.
</ResponseField>

<ResponseField name="automatic_expiry" type="numeric">
  This denotes the time in minutes when the payment is in the authorized state. This is auto-captured.
</ResponseField>

<ResponseField name="manual_expiry" type="numeric">
  This denotes the time in minutes until you can manually capture payments in the authorized state.

  * Must be equal to or greater than the `automatic_expire_period` value.
  * The default and the maximum value is 7200 minutes.
  * The payments in the authorized state after the `manual_expiry_period` are auto-refunded.
</ResponseField>

<ResponseField name="settlements" type="object">
  The Settlement settings object.
</ResponseField>

<ResponseField name="account_number" type="string">
  The bank account number to which settlements are made. Account details can be found on the Dashboard. For example, 7878780080316316.
</ResponseField>

<ResponseField name="ifsc_code" type="string">
  The IFSC associated with the bank account. For example, `RATN0VAAPIS`.
</ResponseField>

<ResponseField name="beneficiary_name" type="string">
  The name of the beneficiary associated with the bank account.
</ResponseField>

<ResponseField name="checkout" type="object">
  The checkout form of the payment capture.
</ResponseField>

<ResponseField name="theme_color" type="string">
  The theme color for sub-merchant's checkout page.
</ResponseField>

<ResponseField name="logo" type="string">
  The logo of the sub-merchant's business on the checkout page.
</ResponseField>

<ResponseField name="flash_checkout" type="boolean">
  The flagging options **Enable** or **Disable** for Razorpay's Flash Checkout to securely save the card details of your customers.
</ResponseField>

<ResponseField name="refund" type="object">
  This denotes the payment refund settings.
</ResponseField>

<ResponseField name="default_refund_speed" type="string">
  Speed at which the refund is to be processed. Possible values:

  * normal: Indicates that the refund will be processed via the normal speed. By default, the refund will take 5-7 working days.
  * optimum: Indicates that the refund will be processed at an optimal speed based on Razorpay's internal fund transfer logic. That is:
  * If the refund can be processed instantly, Razorpay will initiate the process irrespective of the payment method used to make the payment.
  * If an instant refund is not made, Razorpay will initiate a refund that is processed at the normal speed. For example, payments made using debit cards, netbanking or unsupported credit cards.
</ResponseField>

<ResponseField name="notifications" type="object">
  This denotes the notifications settings.
</ResponseField>

<ResponseField name="email" type="string">
  The email addresses that will receive notifications regarding payments, settlements, daily payment reports, webhooks, and so on.
</ResponseField>

<ResponseField name="whatsapp" type="boolean">
  The WhatsApp notifications you receive regarding payments, settlements, daily payment reports, webhooks, etc.
</ResponseField>

<ResponseField name="sms" type="boolean">
  The SMS notifications you receive regarding payments, settlements, daily payment reports, webhooks, etc. This attribute will be set to `false`.
</ResponseField>

<ResponseField name="payment_methods" type="object">
  Details of the payment method you want to enable for the product.
</ResponseField>

<ResponseField name="netbanking" type="object">
  The payment method to be enabled.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Enables or disables the payment method. Possible values:

  * `true`: Enables the `netbanking` payment method.
  * `false`: Does not enable the `netbanking` payment method.
</ResponseField>

<ResponseField name="instrument" type="object">
  Details regarding the bank.
</ResponseField>

<ResponseField name="type" type="string">
  The type of bank. Possible values are `retail` and `corporate`.
</ResponseField>

<ResponseField name="bank" type="string">
  The bank code. Refer to the [list of bank codes](/docs/partners/aggregators/onboarding-api/appendix#netbanking-bank-codes).
</ResponseField>

<ResponseField name="card" type="object">
  The payment method to be enabled.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Enables or disables the payment method. Possible values:

  * `true`: Enables the `card` payment method.
  * `false`: Does not enable the `card` payment method.
</ResponseField>

<ResponseField name="instrument" type="object">
  Details regarding the card.
</ResponseField>

<ResponseField name="type" type="string">
  Possible value is `domestic`.
</ResponseField>

<ResponseField name="issuer" type="string">
  The card issuer. Possible values:

  * `amex`
  * `dicl`
  * `maestro`
  * `mastercard`
  * `rupay`
  * `visa`
</ResponseField>

<ResponseField name="wallet" type="object">
  The payment method to be enabled.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Enables or disables the payment method. Possible values:

  * `true`: Enables the `wallet` payment method.
  * `false`: Does not enable the `wallet` payment method.
</ResponseField>

<ResponseField name="instrument" type="string">
  The wallet issuer. Possible values:

  * `airtelmoney`
  * `amazonpay`
  * `jiomoney`
  * `mobiwik`
  * `mpesa`
  * `olamoney`
  * `paytm`
  * `payzapp`
  * `payumoney`
  * `phonepe`
  * `phonepeswitch`
  * `sbibuddy`
</ResponseField>

<ResponseField name="upi" type="object">
  The payment method to be enabled.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Enables or disables the payment method. Possible values:

  * `true`: Enables the `upi` payment method.
  * `false`: Does not enable the `upi` payment method.
</ResponseField>

<ResponseField name="instrument" type="string">
  The UPI service provider. Possible values:

  * `google_pay`
  * `upi`
</ResponseField>

<ResponseField name="paylater" type="object">
  The payment method to be enabled.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Enables or disables the payment method. Possible values:

  * `true`: Enables the `paylater` payment method.
  * `false`: Does not enable the `paylater` payment method.
</ResponseField>

<ResponseField name="instrument" type="string">
  The Paylater service provider. Possible values:

  * `epaylater`
  * `getsimpl`
</ResponseField>

<ResponseField name="emi" type="object">
  The payment method to be enabled.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Enables or disables the payment method. Possible values:

  * `true`: Enables the `paylater` payment method.
  * `false`: Does not enable the `paylater` payment method.
</ResponseField>

<ResponseField name="instrument" type="object">
  The EMI instrument object.
</ResponseField>

<ResponseField name="type" type="string">
  The type of EMI payment method. Possible values:

  * `card_emi`
  * `cardless_emi`
</ResponseField>

<ResponseField name="partner" type="string">
  The list of EMI partners requested or enabled. Possible values:

  * For `card_emi`: `debit` and `credit`.
  * For `cardless_emi`: `zestmoney` and `earlysalary`.
</ResponseField>

<ResponseField name="requirements" type="object">
  The list of requirements to be enabled for this product or some of the configurations under this product. It is classified into two types:

  * Required document: field\_reference: "proof\_type.document\_type". For example: `business_proof_of_identification.business_pan_url`. The sub-merchant needs to upload the `business_pan_url` document to get the requirement fulfilled.
  * Selected required document: field\_reference : "proof\_type". For example: `individual_proof_of_address`. The sub-merchant can upload ONE of the following groups, that is, submit \[`aadhar_front` ,`aadhar_back`] or \[`voter_id_front`, `voter_id_back`] or \[`passport_front`, `passport_back`]. Once all the documents of any ONE of the groups are uploaded, the requirement gets fulfilled.
</ResponseField>

<ResponseField name="field_reference" type="string">
  The field which is in issue or missing. The JSON key path in resolution URL.
</ResponseField>

<ResponseField name="resolution_url" type="string">
  The URL to address the requirement. The API endpoint to be used for updating missing fields or documents.
</ResponseField>

<ResponseField name="status" type="string">
  The status of the requirement.
</ResponseField>

<ResponseField name="reason_code" type="string">
  The reason code for showing in the requirement. Possible values:

  * `field_missing`
  * `needs_clarification`
  * `document_missing`
</ResponseField>

<ResponseField name="id" type="string">
  The unique identifier of the sub-merchant product account generated by Razorpay. For example, `acc_prd_HEgNpywUFctQ9e`. The product is created for this sub-merchant account id.
</ResponseField>

<ResponseField name="account_id" type="string">
  The unique identifier of the sub-merchant generated by Razorpay. For example, `acc_HQVlm3bnPmccC0`.
</ResponseField>

<ResponseField name="product_name" type="string">
  The product(s) to be configured. Possible values:

  * `payment_gateway`
  * `payment_links`
</ResponseField>

<ResponseField name="activation_status" type="string">
  The status of the [product activation](/docs/partners/aggregators/onboarding-api/product-activation).

  * `requested`
  * `needs_clarification`
  * `under_review`
  * `activated`
  * `suspended`
</ResponseField>

<ResponseField name="requested_at" type="integer">
  The Unix timestamp at which the product configuration has been requested.
</ResponseField>
