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 — an internal label only. It appears in your Payment links list so you can find the link again, and is searchable there. The customer never sees it on the checkout page.
Token and network are picked for you
The form doesn’t ask. Each link is assigned one token and one network from what you’ve already activated under Tokens, preferring your default stablecoin. If you haven’t activated a token and a network there, generation is blocked until you do.
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 two ways to pay, the same on-chain verification, the same confirmation flow. Only the wrapper differs.Sending customers back to your site
Addreturn_url to a link and, once the customer has paid, the checkout offers Return to your-shop.example instead of leaving them on our page:
cc_order (your order reference) and cc_intent (ours). Read order state from your server on that page — the webhook is still what fulfils.
The URL must be https, and its origin must be on your Allowed origins list in Settings → Integration. Anything else is ignored and the customer is told they can close the page — a link someone else crafted cannot use your checkout to send your customers somewhere else. If you only use payment links, add your shop’s domain to that list; it has no other effect.
Expiry and late payment
Expiry locks the price, not the address. On the EVM networks, a customer who pays after expiry still has the money arrive and credited — it shows as paid late rather than clean — as long as it lands inside the window that address is watched for, seven days by default. You decide whether to honour the original price or contact them. On TRON a late payment is not reconciled automatically today: once the quote lapses that address stops being watched, so recovering the funds needs us to step in. Edge cases.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.What a link enforces
A link generated from Payment links is enforced on the server, not just in the page:- Single use. The link’s effective status is derived in the database each time it’s opened — voided, then paid (including a link matched to a payment that has already settled), then expired, then whatever is stored. A link that’s been paid, voided or expired doesn’t open a working checkout: the hosted page blocks it, and the quote endpoint independently refuses with
link_not_openeven if the page is bypassed. The customer sees a plain reason — expired, already paid, or no longer active — and is told to ask you for a new link. - The price. Amount, currency, token and network come from the stored link, not from the URL. Editing
&amount=in the link does nothing — the quote endpoint re-checks the same four values against the stored link and refuses a mismatch withlink_params_mismatch.
Embed instead
Two script tags, customer stays on your site.