Payment Link Out — With Detail

Create a Payment Link Out with the asset, network, and destination address fixed at creation. The payout executes with no end-user interaction.


Use With Detail mode when the merchant already knows exactly where the funds are going — a refund to a known address, a scheduled payout to a saved Contact, or a treasury transfer. The merchant supplies the asset, network, and destination address up front. There is nothing for an end-user to do: the payout proceeds on its own, subject to compliance screening and any approval policy.

📘

No end-user interaction

A fully-specified With Detail payout still returns a redirectUrl, but it is not meant to be sent to anyone. If the URL is opened, it only displays the payment's processing and completion status — there is no asset to pick and no address to enter. Treat With Detail as a server-to-server operation.

1. Create the payout

Via the API

The Create Payment endpoint accepts the standard top-level fields plus a payOutDetails object that fixes the destination.

Request fields

FieldTypeRequiredDescription
merchantIdstringYesUUID of the wallet the payout draws from. Identical to the wallet's ID.
amountnumberYesThe amount to send, in the Display Currency.
currencystringYesThe Display Currency code (e.g. EUR, USD).
referencestringYesA unique reference for the payout, recorded against the transaction.
typestringYesOUT for this flow.
payOutDetails.currencystringYesThe crypto asset to send (e.g. USDT, BTC, ETH).
payOutDetails.protocolstringYesThe network to send on (e.g. TRC20, ERC20, POLYGON).
payOutDetails.addressstringYesThe destination address. Sourced from a saved Contact, entered manually, or set programmatically.
payOutDetails.tagstringConditionalThe destination tag/memo. Required for networks that use them, such as XRP.
expiryMinutesintegerNoLink expiry in minutes. Defaults to 1440 (24 hours).

Example request

{
  "merchantId": "00a4af9d-ad4b-42d5-bec4-b7a8c90161fe",
  "amount": 100,
  "currency": "EUR",
  "reference": "REFUND-9087",
  "type": "OUT",
  "payOutDetails": {
    "currency": "USDT",
    "protocol": "TRC20",
    "address": "TTwyxkKzenGBhVX2TsjYLVFfApEQ3hPXGc"
  }
}

Example response

Because payOutDetails is fully specified, the quote is auto-accepted — there is no separate accept step. The payment moves into PROCESSING and proceeds toward submission.

{
  "uuid": "8c2f9d11-4a7e-4e91-bb20-6f3a1d92e4c7",
  "merchantId": "00a4af9d-ad4b-42d5-bec4-b7a8c90161fe",
  "merchantDisplayName": "Metallica Inc",
  "dateCreated": 1704807605678,
  "expiryDate": 1704894005678,
  "quoteExpiryDate": 1704811205678,
  "reference": "REFUND-9087",
  "type": "OUT",
  "status": "PROCESSING",
  "displayCurrency": {
    "currency": "EUR",
    "amount": 100,
    "actual": 100
  },
  "walletCurrency": {
    "currency": "EUR",
    "amount": 100,
    "actual": 100
  },
  "paidCurrency": {
    "currency": "USDT",
    "amount": 108.45,
    "actual": 0
  },
  "feeCurrency": {
    "currency": "EUR",
    "amount": 0.90,
    "actual": 0
  },
  "networkFeeCurrency": {
    "currency": "USDT",
    "amount": 1.20,
    "actual": 0
  },
  "displayRate": {
    "base": "USDT",
    "counter": "EUR",
    "rate": 0.92635
  },
  "exchangeRate": {
    "base": "USDT",
    "counter": "EUR",
    "rate": 0.92635
  },
  "address": {
    "address": "TTwyxkKzenGBhVX2TsjYLVFfApEQ3hPXGc",
    "tag": null,
    "protocol": "TRC20",
    "uri": "TTwyxkKzenGBhVX2TsjYLVFfApEQ3hPXGc",
    "alternatives": []
  },
  "redirectUrl": "https://pay.hostedpaymentspage.net/payout/8c2f9d11-4a7e-4e91-bb20-6f3a1d92e4c7",
  "transactions": []
}

The response separates two costs:

  • feeCurrency — BEEM's processing fee for the payout.
  • networkFeeCurrency — the network fee for settling the payout on-chain. It is smoothed: set from market averages rather than real-time gas pricing, giving a predictable, balanced fee. Network fees apply to outbound payouts only. See Network Fees for more details.

Both fees are visible on the response so you can reconcile the full cost of the payout.

Via the Portal

📘

Looking for the Portal flow?

The Portal equivalent of With Detail is the Send Crypto action on the Wallets page. See Send Crypto for the walkthrough. The payout proceeds identically once initiated, whether via API or Portal.

2. Approval (if configured)

If your account has an approval policy that applies to this payout, the payment is held after creation and before on-chain submission. The status stays PROCESSING throughout — there is no separate AWAITING_APPROVAL status. An approver acts in the Portal:

  • Approve — BEEM runs a final address screening check, then submits the on-chain transaction. Status moves to COMPLETE.
  • Reject — the payout terminates in CANCELLED and the wallet is not debited.

Whether an approval is required depends on your policy configuration — it can apply to all payouts or only to payouts above a defined amount, and can be set independently for Portal-initiated and API-initiated payouts. See Approvals.

3. Receive webhooks

A Payment Link Out emits two event types:

  • layer1:payment:checkout:status-change — status transitions: PENDINGPROCESSINGCOMPLETE, or PROCESSINGCANCELLED (rejected at approval), or PENDINGEXPIRED.
  • layer1:payment:checkout:transaction-held — the payout was held for compliance screening.

There is no transaction-detected or transaction-confirmed event for an outbound payment — those are specific to confirming inbound deposits. For a payout, on-chain confirmation is rolled into the status-change → COMPLETE event.

See Payment Link Webhooks for event payloads and recommended handler patterns.

What's next