Skip to main content
A payment link is a hosted checkout page you can send to a customer. Same settlement, same verification, no integration.

When to use one

Good for

Invoices, one-off sales, deposits, quotes over email, selling in DMs, testing before you integrate.

Use the embed instead for

A real storefront with a cart, where the customer should never leave your site.

Create one

Open Payment links

In the dashboard.

Set the amount

Price and currency. Optionally a title the customer will see.

Pick what you accept

Which tokens and which chains, from those you’ve enabled.

Set an expiry

Defaults to one hour. The price is locked for that window.

Generate and send

You get a URL. Send it however you like.

What the customer sees

The same checkout as the embedded widget — the same rails, the same on-chain verification, the same confirmation flow. Only the wrapper differs.

Expiry and late payment

Expiry locks the price, not the address. If a customer pays after expiry, the money still arrives and is still credited — it shows as paid late rather than clean. You decide whether to honour the original price or contact them. Edge cases.
Set expiry deliberately. A long window on a volatile pair means you’re holding a price you may not want. An hour is a reasonable default for stablecoin pricing.

Tracking

Links appear in Payment links with status, and any payment appears in Payments like any other. Webhooks fire exactly as they do for embedded checkouts, so a link payment can drive the same fulfilment code.

Current limitations

Two behaviours to know about in the current release:
  • Single-use isn’t enforced server-side. A link that’s been paid can still open a working checkout. Don’t rely on the link itself to prevent a double payment — check your own order state.
  • Amounts in the URL can be edited. Treat the amount as advisory and reconcile against what actually arrived, which is authoritative in your dashboard and webhooks.
Both are being fixed. Until then, for anything where a duplicate or altered payment would matter, use the embed or verify amounts server-side.

Embed instead

Two script tags, customer stays on your site.