> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mayar.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Edit Payment Link

> Endpoint used to edit a generic payment link product

<RequestExample>
  ```bash Request Example theme={null}
  curl --request POST 'https://api.mayar.id/hl/v2/products/payment-link/21d84338-b46d-42d7-9b49-d402520407a5/update' \
  --header 'Authorization: Bearer Paste-Your-API-Key-Here' \
  --data-raw '{
          "id": "21d84338-b46d-42d7-9b49-d402520407a5",
          "name": "Jasa Buat Website Kece Editan",
          "description": "Deskripsinya diubah",
          "amount": 150000,
          "redirectUrl": "https://example.com/thank-you",
          "notes": "catatan opsional",
          "expiredAt": "2026-06-15T12:00:00.000Z"
      }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response Example 200 theme={null}
  {
      "statusCode": 200,
      "messages": "success",
      "data": {
          "id": "21d84338-b46d-42d7-9b49-d402520407a5",
          "link": "https://testingmayar.myr.id/pl/Jasa-Buat-Website-Kece"
      }
  }
  ```
</ResponseExample>

Endpoint:

<CodeGroup>
  ```Production Production theme={null}
  https://api.mayar.id/hl/v2/products/payment-link/{id}/update
  ```

  ```Sandbox Sandbox theme={null}
  https://api.mayar.club/hl/v2/products/payment-link/{id}/update
  ```
</CodeGroup>

<Note>
  The product to edit is identified by the `id` field in the request body, not by
  the `{id}` segment in the URL path. This endpoint shares the same handler as
  [Update Payment Link](/api-reference-v2/genericlink/editpaymentlink)
  (`POST /payment-links/{id}/update`).
</Note>

## Authorization

<ResponseField name="Authorization" type="string" required>
  Example:

  `Authorization | Bearer Paste-Your-API-Key-Here`
</ResponseField>

## Request Body

<ParamField path="id" type="string" required>
  Unique identifier of the generic payment link product to edit. This is read
  from the request body.
</ParamField>

<ParamField path="name" type="string">
  Generic payment link product name.
</ParamField>

<ParamField path="description" type="string">
  Generic payment link product description.
</ParamField>

<ParamField path="amount" type="integer">
  Product price amount.
</ParamField>

<ParamField path="redirectUrl" type="string">
  URL where the customer will be redirected after completing payment.
</ParamField>

<ParamField path="notes" type="string">
  Additional notes for the payment link.
</ParamField>

<ParamField path="expiredAt" type="string | datetime">
  Payment link expiration date in ISO 8601 format.
</ParamField>

## Response

Successful Response

### Main Structure (Root)

<ResponseField name="statusCode" type="integer">
  Status code from API.
</ResponseField>

<ResponseField name="messages" type="string">
  Status message that describes the status code.
</ResponseField>

<ResponseField name="data" type="object">
  The updated generic payment link product data.
</ResponseField>

### data Structure (Object)

<ResponseField name="data.id" type="string">
  Unique identifier of the generic payment link product.
</ResponseField>

<ResponseField name="data.link" type="string">
  Public payment link URL of the updated product.
</ResponseField>

### Errors

<ResponseField name="200 OK (validation failed)" type="object">
  When the request body fails validation, this endpoint still responds with HTTP
  `200` but sets `messages` to `failed` and returns the validator errors in
  `data`: `{ "statusCode": 200, "messages": "failed", "data": { ... } }`.
</ResponseField>

<ResponseField name="401 Unauthorized" type="object">
  Returned when the product does not belong to the authenticated account:
  `{ "statusCode": 401, "messages": "Unauthorized" }`.
</ResponseField>

<ResponseField name="404 Not Found" type="object">
  Returned when the product does not exist:
  `{ "statusCode": 404, "messages": "Product not found" }`.
</ResponseField>
