NoHoldPay

Payment Links

Shareable URLs that spawn a fresh checkout for every customer. No code required.

A payment link is a shareable URL (e.g. checkout.noholdpay.com/donate-2026). Fixed-amount links spawn a new payment with source_type='link' on every visit and land the customer on the standard hosted checkout. Customer-entered and preset links show an amount step first and spawn the payment when the customer submits. Send the same link to a thousand customers and you get a thousand isolated payments.

List page

Sidebar: Payment Links. The list page shows your most recent 100 links per mode.

  • Search by title, slug, public URL, or description.
  • Filter with the Status dropdown: All, Active, Inactive. The filter follows the link's on/off toggle only. An expired or exhausted link keeps its toggle state, so it shows an Expired or Exhausted badge but still lists under Active unless you also deactivate it.
  • Each row shows the link title with its share URL beneath it, the Price (or "any amount"), Uses (e.g. 18 of 20), the Status badge with a context line (e.g. last paid 2h ago), the Created date, and copy/open buttons on active rows.
  • Top-right CTA: New link.

Bulk actions

Tick the row checkboxes to reveal:

  • Activate (re-opens selected links).
  • Deactivate (closes their share URLs until you reactivate them).
  • Clear (deselect).

Confirmation dialogs cover both bulk actions explicitly. In-flight payments already spawned from a link keep working through a deactivation.

Go to Payment Links in the sidebar and click New link.

In the Basics card, fill in the Title (shown above the amount on the checkout), the Amount, and the Currency. Currency defaults to your account's default fiat currency. The same card holds the optional Description and Custom URL fields.

(Optional) Flip the Any amount switch to let the customer set the amount instead of a fixed price, then choose Customer enters amount or Preset amounts.

In Accepted payment methods, pick which chains and coins this link accepts. Defaults to every coin on every wallet you have.

(Optional) Set Max uses, Expires at, and redirect URLs in the Limits and redirects card.

Click Create link. The detail page opens with the share URL ready to copy.

A live Preview panel on the right summarises the link's configuration (title, public URL, amount, accepted methods, limits, redirects) as you type.

Amount modes

The Any amount switch on the create form picks the mode (off means Fixed amount, the default):

ModeWhat the customer sees
Fixed amountA single locked amount. Every visit pays the same thing.
Customer enters amountFree-form input. Use for donations or pay-what-you-want. Optional Min and Max bounds.
Preset optionsA list of labelled tiers (e.g. "Coffee, $5", "Lunch, $25"). The customer picks one.

The amount, currency, and amount mode are fixed at creation and can never be edited. Changing them would silently re-price share URLs already in the wild. To change them, deactivate the link and create a new one.

Custom slugs

The Custom URL field in the Basics card lets you pick the slug for the share URL.

  • 3 to 30 characters.
  • Lowercase letters, digits, and dashes only.
  • No leading or trailing dash.
  • Reserved words (top-level dashboard routes, framework paths, single letters) are rejected.

Leave the field empty and the system auto-generates a 10-character random slug on save. The Generate button next to the field gives you a suggested random slug without saving.

The slug locks once the first payment spawns from the link.

Limits and redirects

In the Limits and redirects card:

FieldPurpose
Max usesStop accepting new visits after this many payments confirm. Empty = unlimited.
Expires atThe link stops accepting visits after this date. Empty = no expiry.
Success URLWhere the customer lands after a confirmed payment. Optional.
Cancel URLWhere the customer lands if they cancel. Optional.

Statuses

Each link surfaces one of four statuses:

StatusWhen
ActiveLink accepts new payments.
InactiveYou toggled it off.
ExpiredExpires at has passed.
ExhaustedThe confirmed count has reached the Max uses cap.

Detail page

Opens at /payment-links/{id}. Top-right action buttons:

ButtonWhen it appears
EditAlways.
Activate or DeactivateAlways.
DeleteOnly when no payment has spawned. Otherwise deactivate.

The page is organised as:

  1. Header with the share URL, Copy and Open buttons, and the Accepting payments toggle.
  2. Three stat tiles: Uses, Collected, Last payment.
  3. Configuration card (price, slug, max uses, expires, created, redirect URLs, accepted methods).
  4. Activity card with confirmed counts for the last 24 h, 7 d, and 30 d.
  5. Spawned payments list. Each row links to the underlying payment.

Click Edit on the detail page. You can change:

  • Title, description.
  • Accepted chains and coins.
  • Max uses, expires at, success URL, cancel URL.

The following are locked:

  • Public URL (slug) once the first payment has spawned.
  • Amount, Currency, and amount mode from the moment the link is created. To change them, deactivate this link and create a new one.

Public URL behaviour

When a customer visits the share URL of a fixed-amount link, the platform spawns a fresh payment and redirects to the hosted checkout. For customer-entered and preset links, the visit shows an amount step first and the payment spawns when the customer submits. If the link is Inactive, Expired, or Exhausted, the URL serves a closed-link page.

Webhooks

There are no link.* webhook events. Each payment spawned from a link fires the standard payment.* lifecycle events. The payload includes source_type: "link" and payment_link_id so your handler can branch.

See Webhooks for the full event list.

Errors you may see

CodeWhen
INVALID_SLUGSlug fails the length or character rules.
SLUG_RESERVEDSlug is on the platform's reserved-word list.
SLUG_TAKENAnother link already uses this slug.
SLUG_LOCKEDYou tried to change the slug after the first payment spawned.
NO_VIABLE_OPTIONSThe chains and coins you allowed don't intersect any wallet you have.
PAYMENT_LINK_INACTIVE / _EXPIRED / _EXHAUSTEDA customer tried to spawn a payment but the link is closed.
PAYMENT_LINK_HAS_PAYMENTSYou tried to delete a link that already has spawned payments. Deactivate instead.

On this page