> ## Documentation Index
> Fetch the complete documentation index at: https://docs.request.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Secure Payment

> pay.request.network — the hosted payment link app payers open to settle a Request Network payment. Defense-in-depth, multi-chain, EVM + Tron.

**Secure Payment** ([pay.request.network](https://pay.request.network)) is the hosted page your payers land on when they click a payment link. It's a defense-in-depth checkout: trusted contract addresses are hardcoded, every transaction is decoded and verified client-side, and the payer can pay from any of 8 supported chains in any supported wallet.

<Frame>
  <img src="https://mintcdn.com/requestnetwork/elzJqr5uGx8XLS6C/images/secure-payments/payment-options.webp?fit=max&auto=format&n=elzJqr5uGx8XLS6C&q=85&s=4dad37f9ea0db1acf015f0bda0cfd8e7" alt="Secure Payment options view" width="1280" height="720" data-path="images/secure-payments/payment-options.webp" />
</Frame>

## Why it exists

The Secure Payment page is intentionally separated from the merchant frontend so a compromised merchant site or API endpoint can't trick a payer into signing the wrong transaction. The page:

* Loads payment metadata from the Request API using a one-time token
* Validates every contract address against a hardcoded trusted set
* Decodes the transaction calldata and shows the payer what they're about to sign
* Resolves payee addresses to ENS where available
* Refuses to broadcast if anything looks off

## What the payer sees

<Steps>
  <Step title="Open the link">
    The payer clicks a `pay.request.network/?token=...` URL you generated via [`POST /v2/secure-payments`](/api-reference/secure-payments). The page loads payment details (amount, recipient, reference).
  </Step>

  <Step title="Connect a wallet">
    The connect modal lists EVM and Tron wallets side by side.

    <Frame>
      <img src="https://mintcdn.com/requestnetwork/elzJqr5uGx8XLS6C/images/secure-payments/connect-wallet.webp?fit=max&auto=format&n=elzJqr5uGx8XLS6C&q=85&s=5e2fadc23138b9ee4a98e357c5943d88" alt="Connect wallet modal — EVM" width="1280" height="720" data-path="images/secure-payments/connect-wallet.webp" />
    </Frame>

    When the destination is on Tron, the same modal shows Tron wallets (TronLink, Guarda, Trust, WalletConnect-Tron) instead of the EVM list — try a [Tron-destination payment link](https://pay.request.network) to see it.
  </Step>

  <Step title="Choose a chain and token">
    The page reads the connected wallet's balances across supported chains and surfaces every chain × token combo with a sufficient balance. The same-chain options view is shown at the top of this page; for cross-chain payments the layout is identical except the banner reads "You'll be paying across chain via Li.Fi" (in pink) instead of "You'll be paying on the same chain as your recipient" (in slate).
  </Step>

  <Step title="Approve and sign">
    For ERC-20s, an approval transaction precedes the payment. The page shows a stepper (connect → confirm → setup → pay) and an optional **Advanced** view that decodes the calldata for inspection.

    <Frame>
      <img src="https://mintcdn.com/requestnetwork/elzJqr5uGx8XLS6C/images/secure-payments/advanced-view.webp?fit=max&auto=format&n=elzJqr5uGx8XLS6C&q=85&s=53aca6feda26e700cfc4fbd84cab95ec" alt="Advanced view with decoded calldata" width="1280" height="720" data-path="images/secure-payments/advanced-view.webp" />
    </Frame>
  </Step>

  <Step title="Confirm">
    The success screen shows the source and destination transaction hashes, with explorer links per chain. For cross-chain payments, a Li.Fi badge is displayed. If you set a `redirectUrl` when creating the payment link, an extra button appears at the bottom of the screen — defaulting to **"Go Back and Close"**, or whatever you set as `redirectLabel` — that takes the payer back to your site.

    <Frame>
      <img src="https://mintcdn.com/requestnetwork/elzJqr5uGx8XLS6C/images/secure-payments/payment-success.webp?fit=max&auto=format&n=elzJqr5uGx8XLS6C&q=85&s=ad2c7e740710d25d6d2e4450f9eb48e6" alt="Payment success screen" width="1280" height="720" data-path="images/secure-payments/payment-success.webp" />
    </Frame>
  </Step>
</Steps>

## Wallet support

The connect modal offers a curated wallet list — only the wallets explicitly registered in the app are surfaced; unrecognised injected providers are filtered out (this is what filters TronLink's EVM injection out of the EVM list).

| EVM wallets     | Tron wallets       |
| --------------- | ------------------ |
| MetaMask        | TronLink           |
| Coinbase Wallet | Guarda             |
| WalletConnect   | Trust Wallet       |
| Ledger          | WalletConnect-Tron |
| Phantom         |                    |
| Rabby           |                    |

EVM and Tron are presented as co-equal columns. The first 5 wallets render up-front; the rest appear behind a "show more" toggle.

<Note>
  TronLink also injects an EVM provider that converts Tron addresses to EVM-style. Secure Payment **filters this out** of the EVM wallet list because it would mis-route Tron payments — Tron is handled exclusively via the TronWeb integration.
</Note>

## Cross-chain via Li.Fi

When the payer's selected source chain differs from the destination chain, Secure Payment routes through Li.Fi. The UI displays:

* "You'll be paying across chain via [Li.Fi](https://li.fi/)" on the options view
* The bridge fee in the cost breakdown
* A Li.Fi badge on the success screen

Supported source chains for Li.Fi swap-to-pay: Ethereum, Arbitrum One, Optimism, Base, Polygon, BSC, Tron.

## Tron support

Tron is fully supported as both a **source** and a **destination** for single-recipient payments:

| Direction               | Same-chain | Cross-chain (Li.Fi) |
| ----------------------- | ---------- | ------------------- |
| Tron → Tron (USDT/USDC) | ✓          | —                   |
| EVM → Tron              | —          | ✓                   |
| Tron → EVM              | —          | ✓                   |

<Warning>
  **Multi-recipient Tron Secure Payments are not supported.** A Secure Payment link with multiple `requests[]` entries pointing at Tron destinations is rejected at creation time with a 400. EVM batches up to 200 payees per link work as expected.
</Warning>

## Multicall payouts

When several outgoing payout links are combined into a [multicall payout](/api-features/payouts#multicall-payouts), the payer opens one Secure Payment link that lists every recipient and settles the whole bundle in a single flow. The page shows a per-recipient breakdown (including each payout's reference), totals, and — for cross-chain bundles — the Li.Fi routing, then a single confirm step. Bundles settle same-chain, across chains, or as a Tron batch depending on the recipients and the payer's chosen source.

## Compliance-gated payments (KYT)

When the merchant has enabled a Know Your Transaction policy on the receiving destination, the secure payment app screens the connected wallet before showing payment options. Wallets that fail the screen see a policy-failure view and cannot reach the sign step. Optional privacy flags can also keep the payment amount and the payee address masked until the screening passes.

See [Compliance-gated payments](/use-cases/compliance-gated-payments) for the merchant-side configuration and [Hypernative Standard Screening Policy](/use-cases/hypernative-standard-screening-policy) for the default KYT categories and thresholds.

## Smart accounts & gasless approvals (EVM)

For supported EVM payments, Secure Payment can route through an [ERC-4337](https://www.alchemy.com/overviews/what-is-account-abstraction) smart account derived from the payer's connected wallet and bundled via Pimlico, so the approval, funding, and payment execute as a single operation. The flow is invisible to the payer beyond the signature step.

On this path, ERC-20 approvals are **gasless** for tokens that support [EIP-2612 `permit`](/api-features/secure-payment-pages#gasless-token-approvals-eip-2612) (such as USDC) — the payer signs instead of broadcasting a separate approval transaction. Tokens without permit (such as USDT) use a one-time on-chain approval. See [Secure payment pages](/api-features/secure-payment-pages#smart-account-payments) for the full spec.

Smart-account routing is EVM-only; Tron payments use the standard TronWeb path. To pay from an existing **Gnosis Safe multisig**, use the [Safe multisig payments](/api-features/safe-multisig-payments) API flow.

## Error states

The Secure Payment app handles a few well-defined error states with clear copy:

| State                                           | Message                                                                                                       |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| Link expired (>7 days, or already paid expired) | "You are coming too late. Please contact the recipient to send you a new payment link."                       |
| Token not found / invalid URL                   | "This URL is invalid. Please check the link and try again, or contact the recipient of this payment."         |
| Already paid                                    | "If that is not the case, please check the link and try again, or contact the recipient of this payment."     |
| Calldata validation fails                       | "There is an issue with this payment call data. Please contact the recipient to send you a new payment link." |

## What Secure Payment does *not* do

* It does **not** persist transaction history beyond the immediate confirmation screen — explorers and webhook events are the source of truth.
* It does **not** provide a payee-side dashboard — that's [Dashboard](/tools/dashboard) at `dashboard.request.network`.
* It does **not** accept payments without a backing Request — the link must originate from `POST /v2/secure-payments`.

## Open Secure Payment

<Card title="Open pay.request.network" href="https://pay.request.network" icon="arrow-up-right-from-square">
  Try a payment link in the live app.
</Card>

## Related

<CardGroup cols={2}>
  <Card title="Multi-chain checkout" href="/use-cases/multi-chain-checkout" icon="shuffle">
    The payer experience and how it routes across chains.
  </Card>

  <Card title="Programmatic payment links" href="/use-cases/programmatic-payment-links" icon="code">
    The API call that mints these links.
  </Card>

  <Card title="Secure Payments reference" href="/api-reference/secure-payments" icon="lock">
    Full request/response schemas.
  </Card>

  <Card title="Dashboard" href="/tools/dashboard" icon="gauge">
    The payee-side companion.
  </Card>
</CardGroup>
