> ## 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.

# Customise Payment Methods - Options and Config Parameters

> Customise the payment methods available to customers while using Payment Links using Razorpay APIs.

Use this endpoint to configure the payment methods of your choice on the Checkout section of the Payment Links to provide a highly personalised experience for your customers.

* You can use the `options` and `config` parameters for greater control over display of specific payment methods or instruments on the Checkout section of Payment Link.

* For example, you can remove a certain bank from Netbanking or highlight a specific wallet.

* These parameters must be passed along with the `options` and `checkout` parameters mentioned in the Request Parameters section below, along with the [Create Payment Link API](/docs/api/payments/payment-links#create-payment-link) parameters.

## Use Cases

Depending on the use cases that you might have, Razorpay allows you to create configuration of the payment methods:

<AccordionGroup>
  <Accordion title="Highlighting certain payment instruments on the Checkout">
    For example, Google Pay could be displayed outside the UPI block as a separate payment method. HDFC Netbanking could come out of the Netbanking container as a separate payment method.
  </Accordion>

  <Accordion title="Restricting a particular card or banking network, issuer, BIN and card type, different properties of the card, to accept payments.">
    For example, you can choose to accept payments only from **HDFC Visa Debit cards** on the Checkout.
  </Accordion>

  <Accordion title="Removing a certain payment method or instrument">
    For example, OlaMoney can be removed as a payment method from wallets. The entire Netbanking block or a certain bank in Netbanking can be removed from the Checkout.
  </Accordion>

  <Accordion title="Reordering of payment methods on the Checkout">
    You can choose to arrange UPI as the first section instead of Cards on the Checkout. Within the UPI block, you can again order the PSPs, according to your need.
  </Accordion>

  <Accordion title="Grouping of payment instruments">
    For example, you can choose to group Netbanking and UPI payment methods of a bank as a block that will be labelled as Pay via Bank on the Checkout.
  </Accordion>
</AccordionGroup>

<RequestExample>
  ```bash Curl theme={null}
  Use this API endpoint for HDFC Netbanking.

  curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \
  -X POST https://api.razorpay.com/v1/payment_links/ \
  -H 'Content-type: application/json' \
  -d '{
    "amount": 1000,
    "currency": "MYR",
    "accept_partial": true,
    "first_min_partial_amount": 100,
    "reference_id": "#21132",
    "description": "Payment for policy no #23456",
    "customer": {
      "name": "<name>",
      "contact": "<phone>",
      "email": "<email>"
    },
    "notify": {
      "sms": true,
      "email": true
    },
    "reminder_enable": true,
    "options": {
      "checkout": {
        "config": {
          "display": {
            "blocks": {
              "banks": {
                "name": "Pay using HDFC",
                "instruments": [
                  {
                    "method": "netbanking",
                    "banks": [
                      "HDFC"
                    ]
                  }
                ]
              }
            },
            "sequence": [
              "block.banks"
            ],
            "preferences": {
              "show_default_blocks": false
            }
          }
        }
      }
    }
  }'

  Use this API endpoint for Reordered Payment Methods.

  curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \
  -X POST https://api.razorpay.com/v1/payment_links/ \
  -H 'Content-type: application/json' \
  -d '{
    "amount": 1000,
    "currency": "MYR",
    "reference_id": "TSsd3ty1e99uu869",
    "description": "Payment for policy no #23y56",
    "customer": {
      "name": "<name>",
      "contact": "<phone>",
      "email": "<email>"
    },
    "notify": {
      "sms": true,
      "email": true
    },
    "options": {
      "checkout": {
        "config": {
          "display": {
            "blocks": {
              "banks": {
                "name": "All Payment Methods",
                "instruments": [
                  {
                    "method": "upi"
                  },
                  {
                    "method": "netbanking"
                  },
                  {
                    "method": "card",
                    "iins": [
                      "43558"
                    ]
                  },
                  {
                    "method": "wallet"
                  }
                ]
              }
            },
            "sequence": [
              "block.banks"
            ],
            "preferences": {
              "show_default_blocks": false
            }
          }
        }
      }
    }
  }'
  ```

  ```javascript Node.js theme={null}
  Use this API endpoint for HDFC Netbanking.

  var instance = new Razorpay({ key_id: 'YOUR_KEY_ID', key_secret: 'YOUR_SECRET' })

  instance.paymentLink.create({
    "amount": 1000,
    "currency": "INR",
    "accept_partial": true,
    "first_min_partial_amount": 100,
    "reference_id": "#21132",
    "description": "Payment for policy no #23456",
    "customer": {
      "name": "<name>",
      "contact": "<phone>",
      "email": "<email>"
    },
    "notify": {
      "sms": true,
      "email": true
    },
    "reminder_enable": true,
    "options": {
      "checkout": {
        "config": {
          "display": {
            "blocks": {
              "banks": {
                "name": "Pay using HDFC",
                "instruments": [
                  {
                    "method": "netbanking",
                    "banks": [
                      "HDFC"
                    ]
                  }
                ]
              }
            },
            "sequence": [
              "block.banks"
            ],
            "preferences": {
              "show_default_blocks": false
            }
          }
        }
      }
    }
  })

  Use this API endpoint for Reordered Payment Methods.

  var instance = new Razorpay({ key_id: 'YOUR_KEY_ID', key_secret: 'YOUR_SECRET' })

  instance.paymentLink.create({
    "amount": 1000,
    "currency": "INR",
    "accept_partial": true,
    "first_min_partial_amount": 100,
    "reference_id": "#21132",
    "description": "Payment for policy no #23456",
    "customer": {
      "name": "<name>",
      "contact": "<phone>",
      "email": "<email>"
    },
    "notify": {
      "sms": true,
      "email": true
    },
    "reminder_enable": true,
    "options": {
      "checkout": {
        "config": {
          "display": {
            "blocks": {
              "banks": {
                "name": "All Payment Methods",
                "instruments": [
                  {
                    "method": "upi"
                  },
                  {
                    "method": "netbanking"
                  },
                  {
                    "method": "card"
                  },
                  {
                    "method": "wallet"
                  }
                ]
              }
            },
            "sequence": [
              "block.banks"
            ],
            "preferences": {
              "show_default_blocks": false
            }
          }
        }
      }
    }
  })
  ```

  ```php PHP theme={null}
  Use this API endpoint for HDFC Netbanking.

  $api = new Api($key_id, $secret);

  $api->paymentLink->create(array('amount'=>1000,'currency'=>'INR','accept_partial'=>true,'first_min_partial_amount'=>100,'reference_id'=>'#21132','description'=>'Payment for policy no #23456','customer'=>array('name'=>'<name>','contact'=>'<phone>','email'=>'<email>',),'notify'=>array('sms'=>true,'email'=>true,),'reminder_enable'=>true,'options'=>array('checkout'=>array('config'=>array('display'=>array('blocks'=>array('banks'=>array('name'=>'Pay using HDFC','instruments'=>array(0=>array('method'=>'netbanking','banks'=>array(0=>'HDFC',),),),),),'sequence'=>array(0=>'block.banks',),'preferences'=>array('show_default_blocks'=>false,),),),),),));

  Use this API endpoint for Reordered Payment Methods.

  $api = new Api($key_id, $secret);

  $api->paymentLink->create(array('amount'=>1000,'currency'=>'INR','accept_partial'=>true,'first_min_partial_amount'=>100,'reference_id'=>'#21132','description'=>'Payment for policy no #23456','customer'=>array('name'=>'<name>','contact'=>'<phone>','email'=>'<email>',),'notify'=>array('sms'=>true,'email'=>true,),'reminder_enable'=>true,'options'=>array('checkout'=>array('config'=>array('display'=>array('blocks'=>array('banks'=>array('name'=>'All Payment Methods','instruments'=>array(0=>array('method'=>'upi',),1=>array('method'=>'netbanking',),2=>array('method'=>'card',),3=>array('method'=>'wallet',),),),),'sequence'=>array(0=>'block.banks',),'preferences'=>array('show_default_blocks'=>false,),),),),),));
  ```

  ```go Go theme={null}
  Use this API endpoint for HDFC Netbanking.

  import ( razorpay "github.com/razorpay/razorpay-go" )
  client := razorpay.NewClient("YOUR_KEY_ID", "YOUR_SECRET")

  para_attr := map[string]interface{}{
          "amount": 1000,
          "currency": "INR",
          "accept_partial": true,
          "first_min_partial_amount": 100,
          "reference_id": "#21132",
          "description": "Payment for policy no #23456",
          "customer": map[string]interface{}{
            "name": "<name>",
            "contact": "<phone>",
            "email": <email>",
          },
          "notify": map[string]interface{}{
            "sms": true,
            "email": true,
          },
          "reminder_enable": true,
          "options": map[string]interface{}{
            "checkout": map[string]interface{}{
              "config": map[string]interface{}{
                "display": map[string]interface{}{
                  "blocks": map[string]interface{}{
                    "banks": map[string]interface{}{
                      "name": "Pay using HDFC",
                      "instruments": []interface{}{
                          map[string]interface{}{
                              "method": "netbanking",
                              "banks": []string{
                                  "HDFC",
                              },
                             },
                      },
                        },
                    },
                  },
                  "sequence": []string{
                      "block.banks",
                  },
                  "preferences": map[string]interface{}{
                    "show_default_blocks": false,
                  },
                },
              },
            },
          }

      body, err := client.PaymentLink.Create(para_attr, nil)

  Use this API endpoint for Reordered Payment Methods.

  import ( razorpay "github.com/razorpay/razorpay-go" )
  client := razorpay.NewClient("YOUR_KEY_ID", "YOUR_SECRET")

  para_attr := map[string]interface{}{
          "amount": 1000,
          "currency": "INR",
          "accept_partial": true,
          "first_min_partial_amount": 100,
          "reference_id": "#21132",
          "description": "Payment for policy no #23456",
          "customer": map[string]interface{}{
            "name": "<name>",
            "contact": "<phone>",
            "email": "<email>",
          },
          "notify": map[string]interface{}{
            "sms": true,
            "email": true,
          },
          "reminder_enable": true,
          "options": map[string]interface{}{
            "checkout": map[string]interface{}{
              "config": map[string]interface{}{
                "display": map[string]interface{}{
                  "blocks": map[string]interface{}{
                    "banks": map[string]interface{}{
                      "name": "Pay using HDFC",
                      "instruments": []interface{}{
                          map[string]interface{}{
                              "method": "netbanking",
                          },
                          map[string]interface{}{
                              "method": "upi",
                          },
                          map[string]interface{}{
                              "method": "wallet",
                          },
                          map[string]interface{}{
                              "method": "card",
                          },
                      },
                        },
                    },
                  },
                  "sequence": []string{
                      "block.banks",
                  },
                  "preferences": map[string]interface{}{
                    "show_default_blocks": false,
                  },
                },
              },
            },
          }

      body, err := client.PaymentLink.Create(para_attr, nil)
  ```

  ```java Java theme={null}
   Use this API endpoint for HDFC Netbanking.

   import org.json.JSONObject;
  import com.razorpay.Payment;
  import com.razorpay.RazorpayClient;
  import com.razorpay.RazorpayException;

  RazorpayClient razorpay = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");
  JSONObject paymentLinkRequest = new JSONObject();
  paymentLinkRequest.put("amount",1000);
  paymentLinkRequest.put("currency","INR");
  paymentLinkRequest.put("accept_partial",true);
  paymentLinkRequest.put("first_min_partial_amount",100);
  paymentLinkRequest.put("expire_by",1691097057);
  paymentLinkRequest.put("reference_id","TS1989");
  paymentLinkRequest.put("description","Payment for policy no #23456");
  JSONObject customer = new JSONObject();
  customer.put("name","<name>");
  customer.put("contact","<phone>");
  customer.put("email","<email>");
  paymentLinkRequest.put("customer",customer);
  JSONObject notify = new JSONObject();
  notify.put("sms",true);
  notify.put("email",true);
  paymentLinkRequest.put("reminder_enable",true);
  JSONObject checkout = new JSONObject();
  JSONObject config = new JSONObject();
  JSONObject display = new JSONObject();
  List<Object> sequence = new ArrayList<>();
  JSONObject preference = new JSONObject();
  JSONObject banks = new JSONObject();
  banks.put("name", "Pay using HDFC");
  List<Object> instruments = new ArrayList<>();
  JSONObject netbanking = new JSONObject();
  netbanking.put("method","netbanking");
  List<Object> bankDetails = new ArrayList<>();
  bankDetails.add("HDFC");
  netbanking.put("banks", bankDetails);
  instruments.add(netbanking);
  banks.put("instruments", instruments);
  sequence.add("block.banks");
  preference.put("show_default_blocks", false);
  JSONObject displayObj = new JSONObject();
  displayObj.put("blocks", banks);
  displayObj.put("sequence",sequence);
  displayObj.put("preferences", preference);
  config.put("config", display);
  display.put("display", displayObj);
  checkout.put("checkout", config);
  paymentLinkRequest.put("options",checkout);

  PaymentLink payment = instance.paymentLink.create(paymentLinkRequest);

  Use this API endpoint for Reordered Payment Methods.

   import org.json.JSONObject;
  import com.razorpay.Payment;
  import com.razorpay.RazorpayClient;
  import com.razorpay.RazorpayException;

  RazorpayClient razorpay = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");
  JSONObject paymentLinkRequest = new JSONObject();
  paymentLinkRequest.put("amount",1000);
  paymentLinkRequest.put("currency","INR");
  paymentLinkRequest.put("accept_partial",true);
  paymentLinkRequest.put("first_min_partial_amount",100);
  paymentLinkRequest.put("expire_by",1691097057);
  paymentLinkRequest.put("reference_id","TS1989");
  paymentLinkRequest.put("description","Payment for policy no #23456");
  JSONObject customer = new JSONObject();
  customer.put("name","<name>");
  customer.put("contact","<phone>");
  customer.put("email","<email>");
  paymentLinkRequest.put("customer",customer);
  JSONObject notify = new JSONObject();
  notify.put("sms",true);
  notify.put("email",true);
  paymentLinkRequest.put("reminder_enable",true);
  JSONObject checkout = new JSONObject();
  JSONObject config = new JSONObject();
  JSONObject display = new JSONObject();
  List<Object> sequence = new ArrayList<>();
  JSONObject preference = new JSONObject();
  JSONObject banks = new JSONObject();
  banks.put("name", "Pay using HDFC");
  List<Object> instruments = new ArrayList<>();

  JSONObject netbanking = new JSONObject();
  netbanking.put("method","netbanking");
  JSONObject upi = new JSONObject();
  upi.put("method","upi");
  JSONObject card = new JSONObject();
  card.put("method","card");
  JSONObject wallet = new JSONObject();
  wallet.put("method","wallet");

  instruments.add(netbanking);
  instruments.add(upi);
  instruments.add(card);
  instruments.add(wallet);

  banks.put("instruments", instruments);
  sequence.add("block.banks");
  preference.put("show_default_blocks", false);
  JSONObject displayObj = new JSONObject();
  displayObj.put("blocks", banks);
  displayObj.put("sequence",sequence);
  displayObj.put("preferences", preference);
  config.put("config", display);
  display.put("display", displayObj);
  checkout.put("checkout", config);
  paymentLinkRequest.put("options",checkout);

  PaymentLink paymentlink = instance.paymentLink.create(paymentLinkRequest);
  ```

  ```csharp .NET theme={null}
  Use this API endpoint for HDFC Netbanking.

  RazorpayClient client = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");
  Dictionary<string, object> paymentLinkRequest = new Dictionary<string, object>();
  paymentLinkRequest.Add("amount", 1000);
  paymentLinkRequest.Add("currency", "INR");
  paymentLinkRequest.Add("accept_partial", true);
  paymentLinkRequest.Add("first_min_partial_amount", 100);
  paymentLinkRequest.Add("expire_by", 1691097057);
  paymentLinkRequest.Add("reference_id", "TS1989");
  paymentLinkRequest.Add("description", "Payment for policy no #23456");
  Dictionary<string, object> customer = new Dictionary<string, object>();
  customer.Add("name", "<name>");
  customer.Add("contact", "<phone>");
  customer.Add("email", "<email>");
  paymentLinkRequest.Add("customer", customer);
  Dictionary<string, object> notify = new Dictionary<string, object>();
  notify.Add("sms", true);
  notify.Add("email", true);
  paymentLinkRequest.Add("reminder_enable", true);
  Dictionary<string, object> checkout = new Dictionary<string, object>();
  Dictionary<string, object> config = new Dictionary<string, object>();
  Dictionary<string, object> display = new Dictionary<string, object>();
  List<string> sequence = new List<string>();
  Dictionary<string, object> preference = new Dictionary<string, object>();
  Dictionary<string, object> banks = new Dictionary<string, object>();
  banks.Add("name", "Pay using HDFC");
  List<object> instruments = new List<object>();
  Dictionary<string, object> bankingDetails = new Dictionary<string, object>();
  bankingDetails.Add("method", "netbanking");
  List<string> instrumentBanks = new List<string>();
  instrumentBanks.Add("HDFC");
  bankingDetails.Add("banks", instrumentBanks);
  instruments.Add(bankingDetails);
  banks.Add("instruments", instruments);
  sequence.Add("block.banks");
  preference.Add("show_default_blocks", false);
  Dictionary<string, object> displayObj = new Dictionary<string, object>();
  displayObj.Add("blocks", banks);
  displayObj.Add("sequence", sequence);
  displayObj.Add("preferences", preference);
  config.Add("config", display);
  display.Add("display", displayObj);
  checkout.Add("checkout", config);
  paymentLinkRequest.Add("options", checkout);

  PaymentLink paymentlink = client.PaymentLink.Create(paymentLinkRequest);

  Use this API endpoint for Reordered Payment Methods.

  RazorpayClient client = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");
  Dictionary<string, object> paymentLinkRequest = new Dictionary<string, object>();
  paymentLinkRequest.Add("amount", 1000);
  paymentLinkRequest.Add("currency", "INR");
  paymentLinkRequest.Add("accept_partial", true);
  paymentLinkRequest.Add("first_min_partial_amount", 100);
  paymentLinkRequest.Add("expire_by", 1691097057);
  paymentLinkRequest.Add("reference_id", "TS1989");
  paymentLinkRequest.Add("description", "Payment for policy no #23456");
  Dictionary<string, object> customer = new Dictionary<string, object>();
  customer.Add("name", "<name>");
  customer.Add("contact", "<phone>");
  customer.Add("email", "<email>");
  paymentLinkRequest.Add("customer", customer);
  Dictionary<string, object> notify = new Dictionary<string, object>();
  notify.Add("sms", true);
  notify.Add("email", true);
  paymentLinkRequest.Add("reminder_enable", true);
  Dictionary<string, object> checkout = new Dictionary<string, object>();
  Dictionary<string, object> config = new Dictionary<string, object>();
  Dictionary<string, object> display = new Dictionary<string, object>();
  List<string> sequence = new List<string>();
  Dictionary<string, object> preference = new Dictionary<string, object>();
  Dictionary<string, object> banks = new Dictionary<string, object>();
  banks.Add("name", "Pay using HDFC");
  List<object> instruments = new List<object>();
  Dictionary<string, object> netbanking = new Dictionary<string, object>();
  netbanking.Add("method", "netbanking");
  Dictionary<string, object> upi = new Dictionary<string, object>();
  upi.Add("method", "upi");
  Dictionary<string, object> card = new Dictionary<string, object>();
  card.Add("method", "card");
  Dictionary<string, object> wallet = new Dictionary<string, object>();
  wallet.Add("method", "wallet");
  instruments.Add(netbanking);
  instruments.Add(upi);
  instruments.Add(card);
  instruments.Add(wallet);
  banks.Add("instruments", instruments);
  sequence.Add("block.banks");
  preference.Add("show_default_blocks", false);
  Dictionary<string, object> displayObj = new Dictionary<string, object>();
  displayObj.Add("blocks", banks);
  displayObj.Add("sequence", sequence);
  displayObj.Add("preferences", preference);
  config.Add("config", display);
  display.Add("display", displayObj);
  checkout.Add("checkout", config);
  paymentLinkRequest.Add("options", checkout);

  PaymentLink paymentlink = client.PaymentLink.Create(paymentLinkRequest);
  ```

  ```ruby Ruby theme={null}
  Use this API endpoint for HDFC Netbanking.

  Razorpay.setup('key_id', 'key_secret')

  Razorpay.headers = {"Content-type" => "application/json"}

  para_attr = {
      "amount": 1000,
      "currency": "INR",
      "accept_partial": true,
      "first_min_partial_amount": 100,
      "reference_id": "#21132",
      "description": "Payment for policy no #23456",
      "customer": {
        "name": "<name>",
        "contact": "<phone>",
        "email": "<email>"
      },
      "notify": {
        "sms": true,
        "email": true
      },
      "reminder_enable": true,
      "options": {
        "checkout": {
          "config": {
            "display": {
              "blocks": {
                "banks": {
                  "name": "Pay using HDFC",
                  "instruments": [
                    {
                      "method": "netbanking",
                      "banks": [
                        "HDFC"
                      ]
                    }
                  ]
                }
              },
              "sequence": [
                "block.banks"
              ],
              "preferences": {
                "show_default_blocks": false
              }
            }
          }
        }
      }
    }

  Razorpay::PaymentLink.create(para_attr)

  Use this API endpoint for Reordered Payment Methods.

  Razorpay.setup('key_id', 'key_secret')

  Razorpay.headers = {"Content-type" => "application/json"}

  para_attr = {
      "amount": 1000,
      "currency": "INR",
      "accept_partial": true,
      "first_min_partial_amount": 100,
      "reference_id": "#21132",
      "description": "Payment for policy no #23456",
      "customer": {
        "name": "<name>",
        "contact": "<phone>",
        "email": "<email>"
      },
      "notify": {
        "sms": true,
        "email": true
      },
      "reminder_enable": true,
      "options": {
        "checkout": {
          "config": {
            "display": {
              "blocks": {
                "banks": {
                  "name": "All Payment Methods",
                  "instruments": [
                    {
                      "method": "upi"
                    },
                    {
                      "method": "netbanking"
                    },
                    {
                      "method": "card"
                    },
                    {
                      "method": "wallet"
                    }
                  ]
                }
              },
              "sequence": [
                "block.banks"
              ],
              "preferences": {
                "show_default_blocks": false
              }
            }
          }
        }
      }
    }

  Razorpay::PaymentLink.create(para_attr)
  ```

  ```python Python theme={null}
  Use this API endpoint for HDFC Netbanking.

  import razorpay
  client = razorpay.Client(auth=("YOUR_ID", "YOUR_SECRET"))

  client.payment_link.create({
    "amount": 1000,
    "currency": "INR",
    "accept_partial": true,
    "first_min_partial_amount": 100,
    "reference_id": "#21132",
    "description": "Payment for policy no #23456",
    "customer": {
      "name": "<name>",
      "contact": "<phone>",
      "email": "<email>"
    },
    "notify": {
      "sms": true,
      "email": true
    },
    "reminder_enable": true,
    "options": {
      "checkout": {
        "config": {
          "display": {
            "blocks": {
              "banks": {
                "name": "Pay using HDFC",
                "instruments": [
                  {
                    "method": "netbanking",
                    "banks": [
                      "HDFC"
                    ]
                  }
                ]
              }
            },
            "sequence": [
              "block.banks"
            ],
            "preferences": {
              "show_default_blocks": false
            }
          }
        }
      }
    }
  })

  Use this API endpoint for Reordered Payment Methods.

  import razorpay
  client = razorpay.Client(auth=("YOUR_ID", "YOUR_SECRET"))

  client.payment_link.create({
    "amount": 1000,
    "currency": "INR",
    "accept_partial": true,
    "first_min_partial_amount": 100,
    "reference_id": "#21132",
    "description": "Payment for policy no #23456",
    "customer": {
      "name": "<name>",
      "contact": "<phone>",
      "email": "<email>"
    },
    "notify": {
      "sms": true,
      "email": true
    },
    "reminder_enable": true,
    "options": {
      "checkout": {
        "config": {
          "display": {
            "blocks": {
              "banks": {
                "name": "All Payment Methods",
                "instruments": [
                  {
                    "method": "upi"
                  },
                  {
                    "method": "netbanking"
                  },
                  {
                    "method": "card"
                  },
                  {
                    "method": "wallet"
                  }
                ]
              }
            },
            "sequence": [
              "block.banks"
            ],
            "preferences": {
              "show_default_blocks": false
            }
          }
        }
      }
    }
  })
  ```

  ```bash CLI theme={null}
  razorpay payment-links create \
    --amount 1000 \
    --currency INR \
    --checkout-config '{"display":{"blocks":{"banks":{"name":"Pay using Net Banking","instruments":[{"method":"netbanking"}]}},"sequence":["block.banks"],"preferences":{"show_default_blocks":false}}}'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "accept_partial": true,
    "amount": 1000,
    "amount_paid": 0,
    "callback_method": "",
    "callback_url": "",
    "cancelled_at": 0,
    "created_at": 1596188765,
    "currency": "MYR",
    "customer": {
      "contact": "<phone>",
      "email": "<email>",
      "name": "<name>"
    },
    "deleted_at": 0,
    "description": "Payment for policy no #23456",
    "expire_by": 0,
    "expired_at": 0,
    "first_min_partial_amount": 100,
    "id": "plink_FL3fYRliPWPv9e",
    "notes": null,
    "notify": {
      "email": true,
      "sms": true
    },
    "payments": null,
    "reference_id": "#21132",
    "reminder_enable": true,
    "reminders": [],
    "short_url": "https://rzp.io/i/0Uw9Kow",
    "source": "",
    "source_id": "",
    "status": "created",
    "updated_at": 1596188765,
    "user_id": ""
  }
  ```

  ```json Success theme={null}
  {
    "accept_partial": true,
    "amount": 1000,
    "amount_paid": 0,
    "callback_method": "",
    "callback_url": "",
    "cancelled_at": 0,
    "created_at": 1596188911,
    "currency": "MYR",
    "customer": {
      "contact": "<phone>",
      "email": "<email>",
      "name": "<name>"
    },
    "deleted_at": 0,
    "description": "Payment for policy no #23456",
    "expire_by": 0,
    "expired_at": 0,
    "first_min_partial_amount": 100,
    "id": "plink_FL3i7DFZwKOaCu",
    "notes": null,
    "notify": {
      "email": true,
      "sms": true
    },
    "payments": null,
    "reference_id": "#21132",
    "reminder_enable": true,
    "reminders": [],
    "short_url": "https://rzp.io/i/l3IB1Sc",
    "source": "",
    "source_id": "",
    "status": "created",
    "updated_at": 1596188911,
    "user_id": ""
  }
  ```

  ```json Failure theme={null}
  {
    "error": {
      "code": "BAD_REQUEST_ERROR",
      "description": "The api key provided is invalid",
      "source": "NA",
      "step": "NA",
      "reason": "NA",
      "metadata": {}
    }
  }
  ```

  ```json Success theme={null}
  {
    "amount": 1000,
    "amount_paid": 0,
    "callback_method": "",
    "callback_url": "",
    "cancelled_at": 0,
    "created_at": 1596188765,
    "currency": "MYR",
    "customer": {
      "contact": "<phone>",
      "email": "<email>",
      "name": "<name>"
    },
    "deleted_at": 0,
    "description": "Payment for policy no #23456",
    "expire_by": 0,
    "expired_at": 0,
    "id": "plink_FL3fYRliPWPv9e",
    "notes": null,
    "notify": {
      "email": true,
      "sms": true
    },
    "payments": null,
    "reference_id": "#21132",
    "reminder_enable": true,
    "reminders": [],
    "short_url": "https://rzp.io/i/0Uw9Kow",
    "source": "",
    "source_id": "",
    "status": "created",
    "updated_at": 1596188765,
    "user_id": ""
  }
  ```

  ```json Success theme={null}
  {
    "amount": 1000,
    "amount_paid": 0,
    "callback_method": "",
    "callback_url": "",
    "cancelled_at": 0,
    "created_at": 1596188911,
    "currency": "MYR",
    "customer": {
      "contact": "<phone>",
      "email": "<email>",
      "name": "<name>"
    },
    "deleted_at": 0,
    "description": "Payment for policy no #23456",
    "expire_by": 0,
    "expired_at": 0,
    "id": "plink_FL3i7DFZwKOaCu",
    "notes": null,
    "notify": {
      "email": true,
      "sms": true
    },
    "payments": null,
    "reference_id": "#21132",
    "reminder_enable": true,
    "reminders": [],
    "short_url": "https://rzp.io/i/l3IB1Sc",
    "source": "",
    "source_id": "",
    "status": "created",
    "updated_at": 1596188911,
    "user_id": ""
  }
  ```

  ```json Failure theme={null}
  {
    "error": {
      "code": "BAD_REQUEST_ERROR",
      "description": "The api key provided is invalid",
      "source": "NA",
      "step": "NA",
      "reason": "NA",
      "metadata": {}
    }
  }
  ```
</ResponseExample>

## Request Parameters

<ParamField body="amount" type="integer" required>
  Amount to be paid using the Payment Link. Must be in the smallest unit of the currency. For example, if you want to receive a payment of , you must enter the value `30000`. In the case of three decimal currencies, such as KWD, BHD and OMR, to refund a payment of 295.991, pass the value as 295990. And in the case of zero decimal currencies such as JPY, to refund a payment of 295, pass the value as 295.
</ParamField>

<Warning>
  **Watch Out!**

  As per payment guidelines, you should pass the last decimal number as 0 for three decimal currency payments. For example, if you want to refund a customer 99.991 KD for a transaction, you should pass the value for the amount parameter as `99990` and not `99991`.
</Warning>

<ParamField body="currency" type="string">
  A three-letter ISO code for the currency in which you want to accept the payment. For example, INR. Refer to the list of [supported currencies](/docs/payments/international-payments#supported-currencies).

  <Info>
    **Handy Tips**

    Razorpay has added support for zero decimal currencies, such as JPY, and three decimal currencies, such as KWD, BHD, and OMR, allowing businesses to accept international payments in these currencies. Know more about [Currency Conversion](/docs/payments/international-payments/currency-conversion) (May 2024).
  </Info>
</ParamField>

<ParamField body="accept_partial" type="boolean">
  Indicates whether customers can make [partial payments](/docs/payments/payment-links/partial-payments) using the Payment Link. Possible values:

  * `true`: Customer can make partial payments.
  * `false` (default): Customer cannot make partial payments.
</ParamField>

<ParamField body="first_min_partial_amount" type="integer" required>
  Minimum amount, in currency subunits, that must be paid by the customer as the first partial payment. Default value is `100`. Default currency is `INR`. For example, if an amount of  is to be received from the customer in two installments of #1 - , #2 - , then you can set this value as `500000`. Must be passed along with `accept_partial` parameter.
</ParamField>

<ParamField body="upi_link" type="boolean" required>
  Must be set to `true` for creating UPI Payment Link. If the `upi_link` parameter is not passed or passed with value as false, a Standard Payment Link will be created. Possible values:

  * `true`: Creates a UPI Payment Link.
  * `false`: Creates a Standard Payment Link.
</ParamField>

<ParamField body="description" type="string">
  A brief description of the Payment Link. The maximum character limit supported is 2048.
</ParamField>

<ParamField body="reference_id" type="string">
  Reference number tagged to a Payment Link. Must be a unique number for each Payment Link. The maximum character limit supported is 40.
</ParamField>

<ParamField body="customer" type="json object">
  Customer details
</ParamField>

<ParamField body="name" type="string">
  The customer's name.
</ParamField>

<ParamField body="email" type="string">
  The customer's email address.
</ParamField>

<ParamField body="contact" type="string">
  The customer's phone number.
</ParamField>

<ParamField body="expire_by" type="integer">
  Timestamp, in Unix, at which the Payment Link will expire. By default, a Payment Link will be valid for six months from the date of creation. Please note that the expire by date cannot exceed more than six months from the date of creation.
</ParamField>

<ParamField body="notify" type="array">
  Defines who handles Payment Link notification.
</ParamField>

<ParamField body="sms" type="boolean">
  Defines who handles the SMS notification. Possible values:

  * `true`: Razorpay handles the notification.
  * `false`: You handle the notification.
</ParamField>

<ParamField body="email" type="boolean">
  Defines who handles the email notification. Possible values:

  * `true`: Razorpay handles the notification.
  * `false`: You handle the notification.
</ParamField>

<ParamField body="notes" type="json object">
  Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, `"note_key": "Payment Link for Groceries.”`.
</ParamField>

<ParamField body="callback_url" type="string">
  If specified, adds a redirect URL to the Payment Link. Once customers completes the payment, they are redirected to the specified URL.

  <Info>
    **Handy Tips**

    If the `callback_url` is passed, it must be passed in the correct format. That is, it should contain a URL.
  </Info>
</ParamField>

<ParamField body="callback_method" type="string" required>
  If `callback_url` parameter is passed, callback\_method must be passed with the value `get`.
</ParamField>

<ParamField body="reminder_enable" type="boolean">
  Used to send [reminders](/docs/payments/payment-links/reminders) for the Payment Link. Possible values:

  * `true`: To send reminders.
  * `false`: To disable reminders.
</ParamField>

<ParamField body="options" type="array" required>
  Options to display or hide payment methods on the Checkout section. Parent parameter under which the `checkout` child parameters must be passed.
</ParamField>

<ParamField body="checkout" type="array" required>
  The parameter for the Checkout section.
</ParamField>

## Response Parameters

<ResponseField name="accept_partial" type="boolean">
  Indicates whether customers can make [partial payments](/docs/payments/payment-links/partial-payments) using the Payment Link. Possible values:

  * `true`: Customer can make partial payments.
  * `false` (default): Customer cannot make partial payments.
</ResponseField>

<ResponseField name="amount" type="integer">
  Amount to be paid using the Payment Link. Must be in the smallest unit of the currency. For example, if you want to receive a payment of , you must enter the value `30000`. In the case of three decimal currencies, such as KWD, BHD and OMR, to refund a payment of 295.991, pass the value as 295990. And in the case of zero decimal currencies such as JPY, to refund a payment of 295, pass the value as 295.

  <Warning>
    **Watch Out!**

    As per payment guidelines, you should pass the last decimal number as 0 for three decimal currency payments. For example, if you want to refund a customer 99.991 KD for a transaction, you should pass the value for the amount parameter as `99990` and not `99991`.
  </Warning>
</ResponseField>

<ResponseField name="amount_paid" type="integer">
  Amount paid by the customer.
</ResponseField>

<ResponseField name="callback_url" type="string">
  If specified, adds a redirect URL to the Payment Link. Once the customer completes the payment, they are redirected to the specified URL.
</ResponseField>

<ResponseField name="callback_method" type="string">
  If `callback_url` parameter is passed, `callback_method` must be passed with the value `get`.
</ResponseField>

<ResponseField name="cancelled_at" type="integer">
  Timestamp, in Unix, at which the Payment Link was cancelled by you.
</ResponseField>

<ResponseField name="created_at" type="integer">
  Timestamp, in Unix, indicating when the Payment Link was created.
</ResponseField>

<ResponseField name="currency" type="string">
  Defaults to INR. We accept payments in [international currencies.](/docs/payments/international-payments#supported-currencies)

  <Info>
    **Handy Tips**

    Razorpay has added support for zero decimal currencies, such as JPY, and three decimal currencies, such as KWD, BHD, and OMR, allowing businesses to accept international payments in these currencies. Know more about [Currency Conversion](/docs/payments/international-payments/currency-conversion) (May 2024).
  </Info>
</ResponseField>

<ResponseField name="customer" type="json object">
  Customer details.
</ResponseField>

<ResponseField name="name" type="string">
  The customer's name.
</ResponseField>

<ResponseField name="email" type="string">
  The customer's email address.
</ResponseField>

<ResponseField name="contact" type="string">
  The customer's phone number.
</ResponseField>

<ResponseField name="description" type="string">
  A brief description of the Payment Link.
</ResponseField>

<ResponseField name="expire_by" type="integer">
  Timestamp, in Unix, when the Payment Link will expire. By default, a Payment Link will be valid for six months from the date of creation. Please note that the expire by date cannot exceed more than six months from the date of creation.
</ResponseField>

<ResponseField name="expired_at" type="integer">
  Timestamp, in Unix, at which the Payment Link expired.
</ResponseField>

<ResponseField name="first_min_partial_amount" type="integer">
  Minimum amount that must be paid by the customer as the first partial payment. For example, if an amount of  is to be received from the customer in two installments of #1 - , #2 - , then you can set this value as `500000`.
</ResponseField>

<ResponseField name="id" type="string">
  Unique identifier of the Payment Link. For example, `plink_ERgihyaAAC0VNW`.
</ResponseField>

<ResponseField name="upi_link" type="boolean">
  Indicates whether the Payment Link is a UPI Payment Link.

  * `true`: A UPI Payment Link has been created.
  * `false`: It is a Standard Payment Link.
</ResponseField>

<ResponseField name="notes" type="object">
  Set of key-value pairs that you can use to store additional information. You (Businesses) can enter a maximum of 15 key-value pairs, with each value having a maximum limit of 256 characters.
</ResponseField>

<ResponseField name="notify" type="array">
  Defines who handles Payment Link notification.
</ResponseField>

<ResponseField name="sms" type="boolean">
  Defines who handles the SMS notification.

  * `true`: Razorpay handles the notification.
  * `false`: Businesses handle the notification.
</ResponseField>

<ResponseField name="email" type="boolean">
  Defines who handles the email notification.

  * `true`: Razorpay handles the notification.
  * `false`: Businesses handle the notification.
</ResponseField>

<ResponseField name="payments" type="array">
  Payment details such as amount, payment id, Payment Link id and more are stored in this array. It is populated only after a payment is successfully captured by the customer. Only captured payments will be shown here. Until then, the value is `null`.
</ResponseField>

<ResponseField name="amount" type="integer">
  The amount paid by the customer using the Payment Link.
</ResponseField>

<ResponseField name="created_at" type="integer">
  Timestamp, in Unix, indicating when the payment was made.
</ResponseField>

<ResponseField name="method" type="string">
  The payment method used to make the payment. Possible values:

  * `netbanking`
  * `card`
  * `wallet`
  * `upi`
  * `emi`
  * `bank_transfer`
</ResponseField>

<ResponseField name="payment_id" type="string">
  Unique identifier of the payment made against the Payment Link.
</ResponseField>

<ResponseField name="plink_id" type="string">
  Unique identifier of the Payment Link. For example, `plink_ERgihyaAAC0VNW`.
</ResponseField>

<ResponseField name="status" type="string">
  The payment state. Possible value is `captured`.
</ResponseField>

<ResponseField name="updated_at" type="integer">
  Timestamp, in Unix, indicating when the payment was updated.
</ResponseField>

<ResponseField name="reference_id" type="string">
  Reference number tagged to a Payment Link. Must be a unique number for each Payment Link. The maximum character limit supported is 40.
</ResponseField>

<ResponseField name="short_url" type="string">
  The unique short URL generated for the Payment Link.
</ResponseField>

<ResponseField name="status" type="string">
  Displays the current state of the Payment Link. Possible values:

  * `created`
  * `partially_paid`
  * `expired`
  * `cancelled`
  * `paid`
</ResponseField>

<ResponseField name="updated_at" type="integer">
  Timestamp, in Unix, indicating when the Payment Link was updated.
</ResponseField>

<ResponseField name="reminder_enable" type="boolean">
  Used to send [reminders](/docs/payments/payment-links/reminders) for the Payment Link. Possible values:

  * `true`: To send reminders.
  * `false`: To disable reminders.
</ResponseField>

<ResponseField name="user_id" type="string">
  A unique identifier for the user role through which the Payment Link was created. For example, `HD1JAKCCPGDfRx`.
</ResponseField>

## Errors

<AccordionGroup>
  <Accordion title="The api {key/secret} provided is invalid">
    **Code:** `4xx`

    There is a mismatch between the API credentials passed in the API call and the API credentials generated on the Dashboard.

    **Solution:** Make sure that:

    * The API Keys are active and entered correctly.
    * There are no white-spaces before or after the keys.
  </Accordion>

  <Accordion title="The {input field} is required">
    **Code:** `4xx`

    A mandatory field is empty.

    **Solution:** Ensure all mandatory fields and values are present.
  </Accordion>

  <Accordion title="wrong input fields sent.">
    **Code:** `400`

    When wrong input fields are sent during Payment Link creation.

    **Solution:** Ensure that the input fields are added correctly. Refer to these [request parameters](/docs/api/payments/payment-links#request-parameters) on how to add correct input fields.
  </Accordion>

  <Accordion title="payment link creation with reference ID already attempted">
    **Code:** `400`

    An existing reference id has been passed.

    **Solution:** Ensure that a unique reference id is used for all Payment Links.
  </Accordion>

  <Accordion title="timestamp must be atleast 15 minutes in future">
    **Code:** `400`

    The epoch time passed is less than 15 minutes from the current time.

    **Solution:** The `close_by` time should be more than 15 minutes from the current time.
  </Accordion>

  <Accordion title="Invalid access: Cannot create a payment link in live mode, as live mode is disabled for merchant.">
    **Code:** `400`

    Occurs when you try to create a Payment Link in Live mode, but live mode is disabled for you

    **Solution:** Raise a request to our [support team](https://razorpay.com/support/) to get live mode enabled for you.
  </Accordion>

  <Accordion title="Invalid access: Cannot create a payment link, as Merchant is Suspended.">
    **Code:** `400`

    Occurs when you try to create a Payment Link when you have been been suspended.

    **Solution:** Raise a request to our [support team](https://razorpay.com/support/) to be reinstated.
  </Accordion>

  <Accordion title="value: the length must not be greater than 255.">
    **Code:** `400`

    When the notes length is greater than 255 characters during Payment Link creation.

    **Solution:** Please create a payment link with notes values less than 255 characters.
  </Accordion>
</AccordionGroup>
