Payment Links Overview

Single-use URLs that take your end-user to a Hosted Payments Page to complete a deposit (into a wallet) or a withdrawal (out of a wallet).


A Payment Link is a single-use URL that lets an end-user complete a one-off crypto deposit into a wallet, or a withdrawal out of one. The link is generated by the Create Payment API endpoint. From there, the merchant chooses how to render the customer's experience — either using BEEM's pre-built Hosted Payments Page, or by building a custom UI on top of the API response.

Payment Links are also the only way crypto leaves a wallet. Every outbound flow on BEEM — withdrawal to a saved Contact, to a one-time address, or "send the link and let the recipient enter their own address" — is implemented as an outbound Payment Link.

Two directions

DirectionWhat it doesWhen to use
Payment Link InAccepts a one-off deposit into a wallet.One-off checkouts, invoices, top-ups. For ongoing inflows from the same customer, use Channels instead.
Payment Link OutSends a one-off withdrawal out of a wallet.Refunds, payouts to a Contact, treasury moves, recipient-completes flows. There is no alternative — every outbound flow goes through a Payment Link Out.

Two integration approaches

After calling Create Payment, the merchant directs the end-user to complete the payment. There are two ways to do this:

ApproachWhat it isWhen to use
Hosted Payments Page (HPP)The merchant redirects (or iframes) the end-user to the redirectUrl returned by the API. BEEM renders the asset selection, address/QR, status updates, and confirmation screens.The standard, recommended approach. Fastest to integrate.
Custom UIThe merchant builds their own end-user UI using the BEEM API and webhook payloads.Possible but more involved — the merchant team takes responsibility for rendering, network selection, QR generation, and live status updates. The full API specification for this approach is documented separately; contact your Solutions Manager for access.

If you use the HPP, the redirectUrl points to one of these hosts:

EnvironmentHost
Productionpay.hostedpaymentspage.net
Sandboxpay.sandbox.layer1.com

Either approach can be combined with either of the creation modes below.

Two creation modes

Either direction can be created in one of two modes. They differ in how much the merchant decides upfront and how much the end-user picks at the point of payment.

ModeWhat the merchant suppliesWhat the end-user does
With detailAsset, network, and (for OUT) the destination address are fixed at creation time via payInDetails / payOutDetails.Skips the asset/network selection step. Lands directly on the address/QR (IN) or the confirmation step (OUT).
Without detailOnly the bare essentials: amount, currency, reference.Picks the asset and network themselves. For OUT, also enters their own receiving address.

Use with detail when your application already knows what the end-user will pay with (or where to send to). Use without detail when the end-user makes that choice on the spot.

The three currencies

Every Payment Link involves the same three currencies as a Channel:

CurrencyWhat it is
Display CurrencyWhat the merchant prices the payment in. Shown to the end-user at the point of payment.
Paid CurrencyThe crypto asset that actually moves on-chain.
Wallet CurrencyWhat the merchant wallet settles in.

A merchant pricing in EUR who has the end-user pay 11.57 USDT into a EUR wallet: Display Currency = EUR, Paid Currency = USDT, Wallet Currency = EUR. Conversion is automatic and the rate is recorded against the payment.

Lifecycle

The status field on every payment moves through a small number of states. Terminal statuses cannot transition further. The exact set differs by direction.

StatusINOUTTerminalMeaning
PENDINGNoCreated. For IN, no payment detected yet. For OUT, the end-user has not yet entered their receiving details.
PROCESSINGNoFor IN, transaction detected on the blockchain. For OUT, asset/address received and the payment is being submitted. This state also covers any approval wait and the on-chain confirmation period.
COMPLETEYesFunds credited (IN) or sent (OUT).
UNDERPAIDYesThe customer sent less than expected. Funds are still credited; see Payment Exceptions.
EXPIREDYesThe end-user did not complete the journey within the expiry window.
CANCELLEDYesFor IN, the payment was cancelled before completion. For OUT, the payout was rejected during approval review — the wallet is not debited.

Approvals on outbound

If your account has approvals configured, outbound Payment Links are gated on approval before they pay out. The approval step sits between PENDING and on-chain submission, while the status field remains PROCESSING throughout.

Approval policies are configurable along two axes:

  • Initiator — Portal-initiated and API-initiated payouts can each be gated independently.
  • Amount threshold — approvals can apply to every payout, or only to payouts above a defined amount.

A rejected payout terminates in CANCELLED and the wallet is not debited. See Approvals for the configuration UI and full policy options.

Compliance and holds

Both inbound and outbound payments pass through compliance screening. A payment that triggers a screening rule emits a transaction-held webhook and stays in PROCESSING until it clears review. Most payments clear automatically; held payments remain visible in your operations queue.

Expiry

Every Payment Link has two distinct expiry windows that operate independently:

ExpiryDefaultConfigurablePurpose
Link expiry1440 minutes (24 hours)Yes — set via expiryMinutes on Create PaymentHow long the URL itself remains valid. Sets the deadline for the end-user to complete the journey.
Quote expiry60 minutesNo — fixed at 60 minutesHow long the FX rate quoted for the payment remains valid. Protects the merchant against rate movement between quote and settlement.
📘

The deposit address stays live after a link is terminal

A Payment Link is single-use in concept, but the underlying deposit address remains technically capable of receiving funds even after the link reaches a terminal state. Funds arriving late — whether the link is COMPLETE, UNDERPAID, or EXPIRED — are detected on-chain and emit a transaction-late webhook. The original FX quote has long since expired, so if conversion is required, late funds settle at the current spot rate at the time of arrival, not at the rate that was quoted when the link was created. The link itself does not change status; your operations team decides how to handle the funds (typically refund or credit). See Payment Exceptions.

What's next