> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.monite.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.monite.com/_mcp/server.

# Payment links

## Overview

The payment process can also be started through a payment link sent to the customer. This link can be customized and shared as many times as you want on any channel you prefer.

## Requirements

### Partner requirements

Before integrating payment links, Monite partners must provide their logo to be displayed in the "[Powered by](./payment-page-customization#powered-by-logo)" badge at the bottom of the payment page. Partners must also specify their website that the logo will link to.

#### Upload partner logo

To upload your logo, use the Partner Portal:

1. Log in to the Partner Portal ([sandbox](https://portal.sandbox.monite.com/), [EU production](https://portal.monite.com), or [US production](https://us.portal.monite.com/), depending on the environment you're using).

2. Click your company name in the navigation.

3. In the **Company details** section, click the logo area to upload your logo.

   ![](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/docs.monite.com/3b81ee5cb7662da6df2adf58435ea36fdec20257c58d875e7bf24be54a518f9d/assets/img/payments/payment-page/upload-partner-logo.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260926%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260926T025846Z&X-Amz-Expires=604800&X-Amz-Signature=9a32f5908d5737e7e8bee01a39ab1bd1beb12c4c62478cc90e49a1c0cbcac633&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

4. Click **Save changes**.

#### Specify partner website

Provide your website URL in the `website` setting in `PATCH /settings`. It must be an HTTPS URL.

```sh
curl -X PATCH 'https://api.sandbox.monite.com/v1/settings' \
     -H 'X-Monite-Version: 2024-01-31' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "website": "https://example.com/"
     }'
```

### Roles and permissions \[#permissions]

If you create payment links with an [entity user token](../entities/users#get-entity-user-token), this user must have a role with the following permissions:

* To create payment links for receivable invoices: `read` permission for `entity_bank_account` and `receivable`.
* To create payment links for payables: `read` permission for `counterpart` and `payable`.

When using a [partner-level token](../get-started/credentials#generate-partner-token), no extra permissions are required.

## Payment link lifecycle \[#lifecycle]

The possible status of a payment link during its lifecycle are as follows:

![](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/docs.monite.com/71145d622d2e964ab464ff6498eb5095e938f9c6c42cfc642d93f7c0e6d25f5e/assets/img/payments/payment-link-lifecycle.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260926%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260926T025846Z&X-Amz-Expires=604800&X-Amz-Signature=210de78b8bf5c526a99bc9a450caee60b87adad7a7868433794c7de37035c3b1&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

| Status      | Description                                                                                                                                                               | Next status            | Webhook triggered             |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------------- |
| `created`   | This is the initial status of a recently created payment link.:warning: Every time a payment link is created, an associated payment intent is also automatically created. | `succeeded`, `expired` | `payment_link.created`        |
| `succeeded` | This status means the payment provider has accepted the payment method. :warning: A succeeded payment link does not mean the payment itself was succeeded.                |                        | `payment_link.status_updated` |
| `expired`   | Expired payment links cannot be reactivated. Check [payment link expiration](#expiration) for further information.                                                        |                        | `payment_link.status_updated` |

> **Info**
>
> The [payment intent](./payment-intents) is the object that represents the payment itself and the one that must be used to track the payment.

## Receive a payment through a payment link

The steps below describe how to receive a payment through a payment link:

1. Get the available payment methods. (Recommended)
2. Create a payment link.
3. Share the payment link with the payer.
4. Track the payment.

### 1. Get the available payment methods (Recommended) \[#get-available-payment-methods]

> **Note**
>
> This step is not mandatory but **highly recommended**.
>
> Some payment methods may be rejected by the payment provider, even if you [assign all payment methods to the entity](onboarding/enable-payment-methods)  and the [entity completes onboarding](./onboarding/index). In these cases, if you request a payment link with rejected or inactive payment methods, an error message will be returned.

The payment link object contains the payment methods to be displayed to the payer on the payment page so they can select their preferred one during the payment act.

Learn how to [get all available payment methods for a specific entity](./onboarding/enable-payment-methods#get-enabled-payment-methods) and check the [full list of payment methods Monite supports](./payment-methods).

If you know in advance which payment methods to display to the payer, you can directly request the payment link without having to retrieve the whole list of available payment methods first.

### 2. Create a payment link \[#create]

The payer must access a specific link to initialize the payment. To generate this payment link, call [`POST /payment_links`](/api/payment-links/post-payment-links), which will return you a `payment_page_url` that can be used to make the payment. The payment link can be up to 400 characters long.

The request body varies depending on whether the payment link is created for an invoice stored in Monite platform (as a payable or receivable), or for an arbitrary external invoice.

The common fields for all payment links are:

* `return_url` - Optional. The URL where to redirect the user after the payment.
* `expires_at` - Optional. The date and time when the payment link will expire. For more information, see [Payment link expiration](#expiration).
* `payment_methods` - Required. A list of [payment methods](./payment-methods) to show on the payment page. These payment methods [must be enabled](./onboarding/enable-payment-methods) for the entity that will make or accept the payment.

  * Payables can currently be paid using:
    * SEPA Credit (`sepa_credit`) - in case of European entities and counterparts in the [SEPA zone](https://en.wikipedia.org/wiki/Single_Euro_Payments_Area).

  * Receivables can be paid using any [payment method](./payment-methods) with `direction`=`receive`.

  * External invoices can be paid using the same payment methods as payables (in case an entity pays to its counterpart) or receivables (in case an entity accepts a payment from its counterpart).

Other required fields and values depend on the use case and are explained below:

* [Payment link for a payable](#for-payable)
* [Payment link for a receivable](#for-receivable)
* [Payment link for an external invoice](#for-external-invoice)

The successful response contains the URL to the payment page (`payment_page_url`). This URL can be up to 400 characters long.

**`Example: payment link response for a receivable invoice`**

```json Example: payment link response for a receivable invoice
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "amount": 1000,
  "currency": "EUR",
  "expires_at": "2024-09-30T13:53:49.198Z",
  "invoice": {
    "issue_date": "2024-09-19",
    "due_date": "2024-09-30",
    "file": {
      "name": "invoice.pdf",
      "mimetype": "application/pdf",
      "url": "https://bucketname.s3.com/12345/invoice.pdf"
    }
  },
  "payer": null,
  "payment_intent": {
    "id": "9400893a-1ad7-4154-9bc5-7bd4744902ee",
    "updated_at": "2024-09-19T10:40:59.052011+00:00",
    "application_fee_amount": null,
    "object": null,
    "provider": null,
    "selected_payment_method": null,
    "status": "created"
  },
  "payment_intent_id": "9400893a-1ad7-4154-9bc5-7bd4744902ee",
  "payment_methods": [
    "card",
    "eps",
    "ideal",
    "sepa_debit",
    "sepa_credit"
  ],
  "payment_page_url": "https://pay.sandbox.monite.com?data=eyJpZ...",
  "payment_reference": "INV-00042",
  "recipient": {
    "id": "cff85bcf-bd28-472a-93a7-317f9cbbc96f",
    "type": "entity",
    "name": "Acme Inc.",
    "bank_accounts": [
      {
        "id": "24049bec-bcd6-4590-9750-974fb75233d6",
        "account_holder_name": "Acme Inc.",
        "account_number": null,
        "bic": "DEUTDEFFXXX",
        "country": "DE",
        "currency": "EUR",
        "display_name": "Primary account",
        "iban": "DE25648730420109480400",
        "is_default": true,
        "name": "Primary account",
        "routing_number": null,
        "sort_code": null,
        "was_created_by_user_id": null
      }
    ]
  },
  "return_url": "https://example.com/where-to-redirect-after-payment",
  "status": "created"
}
```

Once the payment link is created, an associated [payment intent](./payment-intents) is also automatically created. The payment intent ID returned will be used to track the actual payment.

#### 2.1. Payment link for a payable \[#for-payable]

Payment links can be created only for payables in the `waiting_to_be_paid` and `partially_paid` [statuses](../accounts-payable/payables/collect). To create a payment link, specify the following data in the request body for [`POST /payment_links`](/api/payment-links/post-payment-links):

* `object.type` - Must be `"payable"`.
* `object.id` - Required. Payable ID.
* `recipient.type` - Must be `"counterpart"`.
* `recipient.id` - Required. ID of the counterpart that issued the payable. The value must be the same as the counterpart ID in the payable data.
* `payment_methods` - This list must contain a single item, `"sepa_credit"`.
* `return_url` - Optional. The URL where the entity user who will make the payment will be redirected after the payment is successfully initiated.
* [Other fields](#create) as necessary.

```sh
curl -X POST 'https://api.sandbox.monite.com/v1/payment_links' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "object": {
         "type": "payable",
         "id": "PAYABLE_ID"
       },
       "recipient": {
         "type": "counterpart",
         "id": "COUNTERPART_ID"
       },
       "payment_methods": [
         "sepa_credit"
       ],
       "return_url": "https://example.com/where-to-redirect-after-payment"
     }'
```

> **Counterpart's bank account verification**
>
> From 9 October 2025, new EU rules under the Instant Payments Regulation (IPR) EU 2024/886 apply to all euro-denominated SEPA credit transfers. These regulations require verification of payee details to enhance payment security and accuracy.
>
> When creating payment links with `sepa_credit`, the recipient counterpart's bank account is automatically verified through open banking. Payment link creation will fail if the verification status is not `verified`.
>
> If the bank account is not yet verified, the system attempts automatic verification during payment link creation. The payment link is only created if verification succeeds.
>
> To manually verify a counterpart bank account, call `POST /counterparts/{counterpart_id}/bank_accounts/{bank_account_id}/verify`. For more information, see [Verify bank account](../common/counterparts/bank-accounts).

#### 2.2. Payment link for a receivable \[#for-receivable]

Payment links can be created only for receivable invoices in the `issued` and `partially_paid` [statuses](../accounts-receivable/invoices#invoice-lifecycle).
You can create a single payment link for the full invoice amount, or several payment links for partial amounts.

To create a payment link, specify the following data in the request body for [`POST /payment_links`](../api/payment-links/post-payment-links):

* `object.type` - Must be `"receivable"`.
* `object.id` - Required. ID of the receivable invoice.
* `amount` - Optional. If omitted, the payment link will be for the total remaining amount due of the invoice.
  Specify a partial `amount` value to create a partial payment link.
  The total amount of all active (non-paid, non-expired) partial payment links for an invoice must not exceed the `amount_to_pay` value of that invoice.

  > **Note**
  >
  > PDF invoice displays the payment link and QR code only in case of a single full payment link.
  > If a partial payment link exists, those blocks are not included in the PDF invoice.
* `recipient.type` - Must be `"entity"`.
* `recipient.id` - Required. ID of the entity that issued the receivable. The value must be the same as specified in `X-Monite-Entity-Id` request header.
* [Other fields](#create) as necessary.

#### Full payment link

```sh
curl -X POST 'https://api.sandbox.monite.com/v1/payment_links' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "object": {
         "type": "receivable",
         "id": "RECEIVABLE_INVOICE_ID"
       },
       "recipient": {
         "type": "entity",
         "id": "ENTITY_ID"
       },
       "payment_methods": [
         "card",
         "eps",
         "ideal",
         "sepa_credit",
         "sepa_debit"
       ],
       "return_url": "https://example.com/where-to-redirect-after-payment"
     }'
```

#### Partial payment link

```sh {11}
curl -X POST 'https://api.sandbox.monite.com/v1/payment_links' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "object": {
         "type": "receivable",
         "id": "RECEIVABLE_INVOICE_ID"
       },
       "amount": 45000,
       "recipient": {
         "type": "entity",
         "id": "ENTITY_ID"
       },
       "payment_methods": [
         "card",
         "eps",
         "ideal",
         "sepa_credit",
         "sepa_debit"
       ],
       "return_url": "https://example.com/where-to-redirect-after-payment"
     }'
```

> **Entity's bank account verification**
>
> From 9 October 2025, new EU rules under the Instant Payments Regulation (IPR) EU 2024/886 apply to all euro-denominated SEPA credit transfers. These regulations require verification of payee details to enhance payment security and accuracy.
>
> When creating payment links for receivables, the recipient entity's bank account is automatically verified through open banking. Payment link creation will fail if the verification status is not `verified`.
>
> If the bank account is not yet verified, the system attempts automatic verification during payment link creation. The payment link is only created if verification succeeds.
>
> To manually verify an entity bank account, call `POST /bank_accounts/{bank_account_id}/verify`. For more information, see [Verify bank account](../entities/bank-accounts).

#### 2.3. Payment link for an external invoice \[#for-external-invoice]

This example shows how to create a payment link for an arbitrary invoice (stored outside of Monite platform) or arbitrary payment amount. You need to call [`POST /payment_links`](/api/payment-links/post-payment-links) and provide the following data in the request body:

* `currency` - Required. The payment currency. See the [list of currencies](../references/currencies) supported by Monite.
* `amount` - Required. The amount to be paid, in [minor units](../references/currencies#minor-units).
* `payment_reference` - Required. Invoice number or payment reference number. The value will be [normalized](./payment-references) when passed to the payment processing provider.
* `invoice` - Optional. An object containing information about the invoice, such as the issue date, due date, URL of the invoice file. If provided, this information will be displayed on the payment page. If invoice file URL is provided, the payment page will also display the invoice file. For a list of `invoice` object fields, see the description of the [`POST /payment_links`](/api/payment-links/post-payment-links) endpoint.
* [Other fields](#create) as necessary.

**`Payment link for an external invoice`**

```sh Payment link for an external invoice
curl -X POST 'https://api.sandbox.monite.com/v1/payment_links' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "payment_methods": [
         "card",
         "eps",
         "ideal",
         "sepa_credit",
         "sepa_debit"
       ],
       "recipient": {
         "id": "<Recipient ID>",
         "type": "entity|counterpart"
       },
       "return_url": "https://example.com/where-to-redirect-after-payment",
       "expires_at": "2023-12-03T13:53:49.198Z",
       "amount": 1000,
       "currency": "EUR",
       "payment_reference": "Inv 102",
       "invoice": {
         "issue_date": "2022-10-17",
         "due_date": "2022-10-17",
         "file": {
           "name": "invoice.pdf",
           "mimetype": "application/pdf",
           "url": "https://bucketname.s3.com/12345/invoice.pdf"
         }
       }
     }'
```

### 3. Share the payment link \[#share]

After a payment link is created, you can share its URL (`payment_page_url`) with the payer. When a payer navigates to this URL, they will see the payment page displaying information about the invoice and payment amount. The payer can select their preferred payment method and enter their payment information to initialize the payment.

![](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/docs.monite.com/59e713e4d57d58aabc6f1c4d474e3cac8311b38bb3ec924d80e6e995e894889d/assets/img/payments/payment-page/payment-page.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260926%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260926T025846Z&X-Amz-Expires=604800&X-Amz-Signature=c1ca5bcc714aafdd965b8f9d0138824a4ae207e94629759e5a1c1555be00fe09&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

### 4. Track the payment \[#track-payment]

Use the payment intent ID obtained in [step 2](#create) to [watch the payment transition](./payment-intents#track) from status to status and get information about the actual payment.

## Find an existing payment link for an invoice

Given an invoice ID, you can find an existing payment link that was previously created for that invoice. This is supported for both accounts payable invoices ([payables](../accounts-payable/payables/collect)) and accounts receivable invoices.

To do this, first call [`GET /payment_intents?object_id=INVOICE_ID`](/api/payment-intents/get-payment-intents). Or, to query multiple invoices at once:

`GET /payment_intents?object_id__in=INVOICE_1&object_id__in=INVOICE_2`

This gives you a list of [payment intents](./payment-intents) associated with the specified invoices.
Each invoice can have more than one payment intent - for example, one canceled intent and another settled.

```json
{
  "data": [
    {
      "id": "6f1a0e95-059b-4095-9264-b8a600e79a61",
      ...
      "object": {
        "id": "539ed691-821a-4c70-9a0f-ded6e64d72d2",
        "type": "payable"
      },
      "payment_link_id": "0b971087-a15e-4946-a6c8-be230e297004",
      "status": "processing"
    },

    {
      ...
    }
  ]
}
```

Each payment intent has the `payment_link_id` field containing the ID of the associated payment link. You can pass this ID to [`GET /payment_links/{payment_link_id}`](/api/payment-links/get-payment-links-id) to get the payment link details, such as the URL and expiration date.

```json
{
  "id": "0b971087-a15e-4946-a6c8-be230e297004",
  ...
  "expires_at": "2024-08-30T10:52:45.785Z",
  "payment_page_url": "https://pay.sandbox.monite.pay/?data=..."
}
```

## Watch the payment link

You can track the payment link transition from status to status in two different ways:

#### 1. Webhooks \[#webhooks]

You can be notified of every change in the status of the payment by subscribing to the `payment_link.status_updated` [webhook](../references/webhooks/index). Call [`POST /webhook_subscriptions`](/api/webhook-subscriptions/post-webhook-subscriptions) with the following request body, replacing the `url` with the URL of your webhook listener endpoint:

```sh
curl -X POST 'https://api.sandbox.monite.com/v1/webhook_subscriptions' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "object_type": "payment_link",
       "url": "https://example.com/your-webhook-listener"
     }'
```

The event sent by Monite contains `entity_id`, `object_type`, and `object_id`, which can be used to identify the affected payment intent:

```json
{
  "id": "06c003f1-6b05-415f-be6d-39ecacdddbd3",
  "created_at": "2024-03-04T20:06:48.593225+00:00",
  "action": "payment_link.status_updated",
  "api_version": "2024-05-25",
  "entity_id": "ce0e9fc7-b3e7-4f12-ad86-bfb0725a99f0",
  "description": "payment_link_status_updated",
  "object": {
    "id": "f7dcd6bc-2cc9-4cb9-be9c-d7bf2404acd7"
  },
  "object_type": "payment_link",
  "webhook_subscription_id": "c7f37127-44e5-494a-833a-21e60585f187"
}
```

#### 2. Get information about the payment link \[#get-details]

The payment link ID received from the webhook can be used to check the status of the payment link, by calling [`GET /payment_links/{payment_link_id}`](/api/payment-links/get-payment-links-id):

```sh
curl -X GET 'https://api.sandbox.monite.com/v1/payment_links/3fa85f6...f66afa6' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN'
```

The successful response contains information about the payment link:

```json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "amount": 11781,
  "currency": "EUR",
  "expires_at": "2023-03-01T10:52:45.785Z",
  ...
  "payment_intent_id": "9400893a-1ad7-4154-9bc5-7bd4744902ee",
  "payment_page_url": "https://pay.sandbox.monite.com?data=eyJpZ...",
  ...
  "return_url": "https://example.com/where-to-redirect-after-payment",
  "status": "created"
}
```

## Custom domain for payment links \[#custom-domain]

By default, payment pages are served from `pay.monite.com`, but partners can use their own domain instead (for example, `pay.mycompany.com`). To do this, follow these steps:

1. Register the desired domain name with your DNS provider. We recommend that you register two different domains - one for the Production [environment](../api/concepts/environments), and another one for the Sandbox environment. For example, `pay.mycompany.com` and `pay.sandbox.mycompany.com`.

2. Create [CNAME](https://en.wikipedia.org/wiki/CNAME_record) records to point your production domain to `pay.monite.com`, and the sandbox domain to `pay.sandbox.monite.com`.

3. Specify your custom domain name in the [partner setting](/api/partner-settings/patch-settings) `payments.payment_page_domain`. Set the corresponding value for the Sandbox and Production environments.

   **`Sandbox example`**

   ```sh title="Sandbox example"
   curl -X PATCH 'https://api.sandbox.monite.com/v1/settings' \
        -H 'X-Monite-Version: 2024-05-25' \
        -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
        -H 'Content-Type: application/json' \
        -d '{
             "payments": {
               "payment_page_domain": "pay.sandbox.mycompany.com"
             }
           }'
   ```

4. [Contact us](../intro/support) to complete the setup.

From now on, payment links generated by Monite will use your custom domain in their URLs.

## Payment link expiration \[#expiration]

By default, payment links created for invoices stored in Monite expire 30 days after the invoice due date, and
payment links created for [external invoices](#for-external-invoice) expire 30 days after the link creation time.

You can also specify a custom `expires_at` timestamp (up to 70 days) when creating a payment link.
Once set, the expiration time cannot be changed.

After a payment link expires, visiting its `payment_page_url` in a browser will show an expiration message instead of a payment page. Expired payment links cannot be reactivated, but you can create a new payment link if needed.

![](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/docs.monite.com/ef8497d96bbf90a8ae6ee8374bae9673998bc7a0d379a48623a077be7e12bf30/assets/img/payments/payment-link-expired.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260926%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260926T025846Z&X-Amz-Expires=604800&X-Amz-Signature=a51493a4cd34bd747e8114a70155c184f4e718c7b641ee15067284027147b8f2&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

You can also force the expiration of a payment link by calling [`POST /payment_links/{payment_link_id}/expire`](/api/payment-links/post-payment-links-id-expire). This may be needed, for example, if the related invoice was updated or canceled, making the original payment link outdated.

```sh
curl -X POST 'https://api.sandbox.monite.com/v1/payment_links/{payment_link_id}/expire' \
     -H 'X-Monite-Version: 2024-05-25' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: YOUR_PARTNER_TOKEN'
```

This changes the payment link's `status` to `"expired"`. The response returns the payment link details with the updated `status`:

```json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "amount": 1000,
  "currency": "EUR",
  ...
  "status": "expired"
}
```

When a payment link expires (whether automatically or upon request), a `payment_link.status_updated` [webhook](../references/webhooks/index) is triggered. Also, the associated [payment intent](./payment-intents) is automatically moved to the `payment_cancelled` status.