---
title: "Update a payment link"
method: PATCH
path: "/payment_links/{id}"
tags: ["Payment Links"]
---

# Update a payment link

`PATCH /payment_links/{id}`

Update an existing payment link. Updates are only allowed when the link is in 'created' or 'partially_paid' status.

## Path parameters

- `id` string, required

## Request body

- object
  - `reference_id` string — Add or update unique reference number. Max 40 characters.
  - `expire_by` integer — Updated expiry Unix timestamp.
  - `reminder_enable` boolean
  - `accept_partial` boolean
  - `notes` Notes — Key-value pairs for storing custom metadata. Maximum 15 pairs. Each key and value must not exceed 256 characters.

## Response `200`

Updated payment link.

- 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.
- `404` — Resource not found.
- `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)
