---
title: "Create a payment link"
method: POST
path: "/payment_links"
tags: ["Payment Links"]
---

# Create a payment link

`POST /payment_links`

Create a shareable payment link to collect payments via SMS and email. Supports standard links (all payment methods) and UPI-only links (set upi_link=true). UPI links are not available in test mode. Partial payments are not supported for UPI links. Links expire after 6 months by default.

## Request body

- object
  - `amount` integer, required — Amount in smallest currency unit (paise for INR). Example: 50000 for ₹500.
  - `currency` string — ISO 4217 currency code. UPI links support INR only.
  - `upi_link` boolean — Set true to create a UPI-only Payment Link. Not available in test mode.
  - `accept_partial` boolean — Enable partial payments. Not supported for UPI links.
  - `first_min_partial_amount` integer — Minimum first partial payment amount in paise.
  - `expire_by` integer — Unix timestamp for link expiry. Max 6 months from creation. Must be at least 15 minutes in the future.
  - `reference_id` string — Your unique tracking reference. Max 40 characters. Must be unique.
  - `description` string — Brief description shown on the payment page. Max 2048 characters.
  - `customer` object — Customer contact details. Not auto-populated on checkout — customer must enter manually.
    - `name` string
    - `email` string
    - `contact` string
  - `notify` object — Notification handlers. Set true for Razorpay to send, false to handle yourself.
    - `sms` boolean
    - `email` boolean
  - `reminder_enable` boolean — Send automatic payment reminders.
  - `callback_url` string — Redirect URL after payment completion.
  - `callback_method` 'get' — Required when callback_url is set.
  - `notes` Notes — Key-value pairs for storing custom metadata. Maximum 15 pairs. Each key and value must not exceed 256 characters.
  - `options` object — Checkout and payment page customization.
    - `checkout` object
      - `name` string — Custom business name displayed on checkout.
      - `theme` object
        - `hide_topbar` boolean — Hide the checkout top bar to prevent method switching.
      - `method` object — Enable or disable specific payment methods.
        - `card` boolean
        - `netbanking` boolean
        - `upi` boolean
        - `wallet` boolean
      - `config` object — Advanced checkout display configuration (blocks, sequence, preferences).
        - `display` object
          - `blocks` object — Custom payment method groupings with names and instruments.
          - `sequence` string[] — Display order of payment method blocks.
          - `preferences` object
            - `show_default_blocks` boolean
      - `partial_payment` object — Rename partial payment labels (for localisation).
        - `min_amount_label` string
        - `partial_amount_label` string
        - `partial_amount_description` string
        - `full_amount_label` string
    - `hosted_page` object — Customise labels on the payment details section of the hosted page.
      - `label` object — Map of field names to custom label text. Supports localisation (Hindi, Tamil, etc.).
        - `PAYMENT FOR` string
        - `RECEIPT NO.` string
        - `AMOUNT PAYABLE` string
        - `EXPIRES ON` string
        - `DUE` string
        - `PAID` string
        - `AMOUNT PAID` string
        - `ISSUED TO` string
    - `order` object — Order-level options including offers and transfers.
      - `offers` string[] — Offer IDs to apply. Do not combine with accept_partial.
      - `transfers` object[] — Auto-transfer payments to linked accounts.
        - `account` string — Linked account ID.
        - `amount` integer
        - `currency` string
        - `notes` Notes — Key-value pairs for storing custom metadata. Maximum 15 pairs. Each key and value must not exceed 256 characters.

## Response `200`

Payment link created.

- PaymentLink
  - `id` string — Unique payment link identifier. Prefix: plink_
  - `entity` 'payment_link'
  - `amount` integer — Payment amount in smallest currency unit (paise for INR). Three-decimal currencies (KWD, BHD, OMR): drop last decimal digit (e.g. 295.991 KWD → 295990). Zero-decimal currencies (JPY): pass value as-is.
  - `amount_paid` integer — Total amount paid by customer.
  - `currency` string — ISO 4217 currency code. UPI Payment Links only support INR.
  - `accept_partial` boolean — Allow partial payments. Not supported for UPI links.
  - `first_min_partial_amount` integer — Minimum amount required for the first partial payment.
  - `description` string — Brief description. Max 2048 characters.
  - `reference_id` string — Your unique tracking reference. Max 40 characters. Must be unique per link.
  - `expire_by` integer — Unix timestamp when link expires. Default: 6 months from creation. Must be at least 15 minutes in the future.
  - `expired_at` integer — Unix timestamp when link actually expired.
  - `cancelled_at` integer — Unix timestamp when link was cancelled.
  - `status` 'created' | 'partially_paid' | 'expired' | 'cancelled' | 'paid' — created: awaiting payment. partially_paid: one or more partial payments received. expired: past expiry with no full payment. cancelled: manually cancelled. paid: fully paid.
  - `upi_link` boolean — true if this is a UPI Payment Link, false for standard.
  - `short_url` string — Shareable short URL for the payment link.
  - `callback_url` string — Redirect URL after payment completion.
  - `callback_method` 'get'
  - `customer` object — Customer contact details. These are not auto-populated on the checkout page — customer must enter them manually.
    - `name` string
    - `email` string
    - `contact` string
  - `notify` object
    - `sms` boolean — true: Razorpay sends SMS notification. false: merchant handles.
    - `email` boolean — true: Razorpay sends email notification. false: merchant handles.
  - `reminder_enable` boolean — Send automatic payment reminders.
  - `payments` object[] — Captured payment records. Populated only after successful payment capture.
    - `amount` integer
    - `payment_id` string
    - `plink_id` string
    - `method` 'netbanking' | 'card' | 'wallet' | 'upi' | 'emi' | 'bank_transfer'
    - `status` 'captured'
    - `created_at` integer
    - `updated_at` integer
  - `notes` Notes — Key-value pairs for storing custom metadata. Maximum 15 pairs. Each key and value must not exceed 256 characters.
  - `order_id` string
  - `user_id` string — Identifier for the user role that created the link.
  - `created_at` integer
  - `updated_at` integer

## Other responses

- `400` — Bad request. Invalid parameters or missing required fields.
- `401` — Authentication failed. Invalid or missing API key credentials.
- `429` — Rate limit exceeded. Implement exponential backoff with jitter before retrying.

---

[API](https://skmtc.net/razorpay/apis/razorpay-api.md) · [All operations](https://skmtc.net/razorpay/apis/razorpay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/razorpay/razorpay-api/revisions/824ca9e6faef/schema)
