Payment links
What a customer pays, in which currency, and how you match it to your order.
A payment link is something to pay for: a title and an amount in a currency. Customers pay it at /pay/<id> on your server: share the link, or send customers to it from your site.

Fields
| Field | Description |
|---|---|
title | Shown at checkout. Up to 200 characters. |
currency | USD, or any currency you've added a price feed for. |
amount | A decimal string, such as "49" or "12.50". |
usage | OneTime (default) or Reusable. A OneTime link can be paid once; further payments are rejected. A Reusable link accepts unlimited payments. |
lineItems | Optional. Each has a name, price, quantity and optional image. They must add up to amount exactly. |
reference | Optional. Your own ID for it, such as an order ID. Unique within the app, so creating a second link with the same reference fails with 409. |
meta | Optional JSON for your own use. |
reference and meta are never shown to customers. They come back on the link, and on every transfer webhook for a payment made through it.
Creating one
In the dashboard, under Payment links:

From your backend, with the SDK:
const { data: link } = await kite.paymentLinks.create({
body: {
title: "Pro plan",
currency: "USD",
amount: "49",
usage: "OneTime", // or "Reusable"
reference: order.id,
},
});
const url = `https://pay.example.com/pay/${link.id}`;Find it again later by reference:
const { data } = await kite.paymentLinks.list({
query: { reference: order.id },
});One link or many
A link's usage field controls how many times it can be paid:
OneTime(default): The link can be paid once. After a successful payment, further attempts are rejected. Use this for order-specific links where each order gets its own link with the order ID asreference.Reusable: The link accepts unlimited payments. Use this for donation pages, fixed-price products, or invoices sent by hand.
// One link per order (one-time)
const { data: link } = await kite.paymentLinks.create({
body: {
title: "Order #1234",
currency: "USD",
amount: "49",
usage: "OneTime",
reference: "order-1234",
},
});
// One reusable link for a product
const { data: link } = await kite.paymentLinks.create({
body: {
title: "Pro subscription",
currency: "USD",
amount: "49",
usage: "Reusable",
},
});Changing a link's amount affects payments that haven't been quoted yet, not ones already open.