---
title: "Create payment link"
method: POST
path: "/v2/payment-links"
tags: ["Payment Links API"]
---

# Create payment link

`POST /v2/payment-links`

With the Payment links API you can generate payment links that by default, unlike regular payments, do not expire.
The payment link can be shared with your customers and will redirect them to them the payment page where they can
complete the payment. A [payment](get-payment) will only be created once the customer initiates the payment.

## Headers

- `idempotency-key` string

## Request body

- object
  - `resource` string — Indicates the response contains a payment link object. Will always contain the string `payment-link` for this endpoint.
  - `id` string
  - `mode` 'live' | 'test' — Whether this entity was created in live mode or in test mode.
  - `description` string, required — A short description of the payment link. The description is visible in the Dashboard and will be shown on the customer's bank or card statement when possible.
  - `amount` AmountNullable, nullable — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `minimumAmount` AmountNullable, nullable — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `archived` boolean — Whether the payment link is archived. Customers will not be able to complete payments on archived payment links.
  - `redirectUrl` string, nullable — The URL your customer will be redirected to after completing the payment process. If no redirect URL is provided, the customer will be shown a generic message after completing the payment.
  - `webhookUrl` string, nullable — The webhook URL where we will send payment status updates to. The webhookUrl is optional, but without a webhook you will miss out on important status changes to any payments resulting from the payment link. The webhookUrl must be reachable from Mollie's point of view, so you cannot use `localhost`. If you want to use webhook during development on `localhost`, you must use a tool like ngrok to have the webhooks delivered to your local machine.
  - `lines` PaymentLineItem[], nullable — Optionally provide the order lines for the payment. Each line contains details such as a description of the item ordered and its price. All lines must have the same currency as the payment. Required for payment methods `billie`, `in3`, `klarna`, `riverty` and `voucher`.
    - `type` 'physical' | 'digital' | 'shipping_fee' | 'discount' | 'store_credit' | 'gift_card' | 'surcharge' | 'tip' — The type of product purchased. For example, a physical or a digital product. The `tip` payment line type is not available when creating a payment.
    - `description` string, required — A description of the line item. For example *LEGO 4440 Forest Police Station*.
    - `quantity` integer, required — The number of items.
    - `quantityUnit` string — The unit for the quantity. For example *pcs*, *kg*, or *cm*.
    - `unitPrice` Amount, required — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `discountAmount` Amount — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `totalAmount` Amount, required — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `vatRate` string — The VAT rate applied to the line, for example `21.00` for 21%. The vatRate should be passed as a string and not as a float, to ensure the correct number of decimals are passed.
    - `vatAmount` Amount — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `sku` string — The SKU, EAN, ISBN or UPC of the product sold.
    - `categories` LineCategories[] — An array with the voucher categories, in case of a line eligible for a voucher. See the [Integrating Vouchers](https://docs.mollie.com/docs/integrating-vouchers/) guide for more information.
    - `imageUrl` string — A link pointing to an image of the product sold.
    - `productUrl` string — A link pointing to the product page in your web shop of the product sold.
  - `billingAddress` PaymentAddress
    - `title` string — The title of the person, for example *Mr.* or *Mrs.*.
    - `givenName` string — The given name (first name) of the person should be at least two characters and cannot contain only numbers. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `familyName` string — The given family name (surname) of the person should be at least two characters and cannot contain only numbers. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `organizationName` string — The name of the organization, in case the addressee is an organization.
    - `streetAndNumber` string — A street and street number. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `streetAdditional` string — Any additional addressing details, for example an apartment number.
    - `postalCode` string — A postal code. This field may be required if the provided country has a postal code system. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `email` string — A valid e-mail address. If you provide the email address for a `banktransfer` payment, we will automatically send the instructions email upon payment creation. The language of the email will follow the locale parameter of the payment. Required for payment methods `billie`, `in3`, `klarna` and `riverty`. If the domain contains non-ASCII characters, encode it as Punycode per [RFC 3492](https://www.rfc-editor.org/rfc/rfc3492).
    - `phone` string — If provided, it must be in the [E.164](https://en.wikipedia.org/wiki/E.164) format. For example: +31208202070.
    - `city` string — A city name. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `region` string — The top-level administrative subdivision of the country. For example: Noord-Holland.
    - `country` string — A country code in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
  - `shippingAddress` PaymentAddress
    - `title` string — The title of the person, for example *Mr.* or *Mrs.*.
    - `givenName` string — The given name (first name) of the person should be at least two characters and cannot contain only numbers. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `familyName` string — The given family name (surname) of the person should be at least two characters and cannot contain only numbers. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `organizationName` string — The name of the organization, in case the addressee is an organization.
    - `streetAndNumber` string — A street and street number. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `streetAdditional` string — Any additional addressing details, for example an apartment number.
    - `postalCode` string — A postal code. This field may be required if the provided country has a postal code system. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `email` string — A valid e-mail address. If you provide the email address for a `banktransfer` payment, we will automatically send the instructions email upon payment creation. The language of the email will follow the locale parameter of the payment. Required for payment methods `billie`, `in3`, `klarna` and `riverty`. If the domain contains non-ASCII characters, encode it as Punycode per [RFC 3492](https://www.rfc-editor.org/rfc/rfc3492).
    - `phone` string — If provided, it must be in the [E.164](https://en.wikipedia.org/wiki/E.164) format. For example: +31208202070.
    - `city` string — A city name. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
    - `region` string — The top-level administrative subdivision of the country. For example: Noord-Holland.
    - `country` string — A country code in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format. Required for payment methods `billie`, `in3`, `klarna` and `riverty`.
  - `profileId` string, nullable — The identifier referring to the [profile](get-profile) this entity belongs to. Most API credentials are linked to a single profile. In these cases the `profileId` must not be sent in the creation request. For organization-level credentials such as OAuth access tokens however, the `profileId` parameter is required.
  - `reusable` boolean, nullable — Indicates whether the payment link is reusable. If this field is set to `true`, customers can make multiple payments using the same link. If no value is specified, the field defaults to `false`, allowing only a single payment per link.
  - `createdAt` string — The entity's date and time of creation, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `paidAt` string, nullable — The date and time the payment link became paid, in ISO 8601 format.
  - `expiresAt` string, nullable — The date and time the payment link is set to expire, in ISO 8601 format. If no expiry date was provided up front, the payment link will not expire automatically.
  - `allowedMethods` PaymentLinkMethod[], nullable — An array of payment methods that are allowed to be used for this payment link. When this parameter is not provided or is an empty array, all enabled payment methods will be available.
  - `applicationFee` object — With Mollie Connect you can charge fees on payment links that your app is processing on behalf of other Mollie merchants. If you use OAuth to create payment links on a connected merchant's account, you can charge a fee using this `applicationFee` parameter. If a payment on the payment link succeeds, the fee will be deducted from the merchant's balance and sent to your own account balance.
    - `amount` Amount, required — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `description` string, required — The description of the application fee. This will appear on settlement reports towards both you and the connected merchant.
  - `sequenceType` 'oneoff' | 'first'
  - `customerId` string, nullable — **Only relevant when `sequenceType` is set to `first`** The ID of the [customer](get-customer) the payment link is being created for. If a value is not provided, the customer will be required to input relevant information which will be used to establish a mandate after the payment is made.
  - `testmode` boolean, nullable — Whether to create the entity in test mode or live mode. Most API credentials are specifically created for either live mode or test mode, in which case this parameter must not be sent. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting `testmode` to `true`.
  - `_links` object — An object with several relevant URLs. Every URL object will contain an `href` and a `type` field.
    - `self` Url, required — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
      - `href` string, required — The actual URL string.
      - `type` string, required — The content type of the page or endpoint the URL points to.
    - `paymentLink` Url, required — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
      - `href` string, required — The actual URL string.
      - `type` string, required — The content type of the page or endpoint the URL points to.

## Response `201`

The newly created payment link object.

## Other responses

- `404` — No entity with this ID exists.
- `422` — The request contains issues. For example, if the payment link description is missing.
- `429` — Rate Limit has been reached.

---

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