Skip to content

Payment links

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, or in a pop-up on your own site with @kite-01/js.

The Payment links page

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.

In the dashboard, under Payment links:

Creating a payment link: title, currency, amount and optional line items

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 },
});

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 as reference.
  • 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",
},
});