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

# Payment sources

> The three ways a payer can pay in Flow payments, what each requires, which are screened, and how to choose which to offer.

A payment source is where the payer's funds come from. Flow payments supports three: a wallet the payer connects, a purchase on an exchange, and a deposit address the payer sends funds to. The payer attaches one source to the flow, and can switch to another until the payment is sent.

## Wallet

The payer connects a wallet they already own, chooses the token and chain to pay with, and signs the payment in the wallet. Dynamic quotes the payment first. When the payer's token and chain match one of your settlement tokens, the payment is a direct transfer; otherwise Dynamic converts it with a swap or bridge, as described in [Conversions](https://www.dynamic.xyz/docs/flow/conversions.md).

A wallet quote is valid for a short time, so the payer must sign before it expires or request a new one. [Expiry and cancellation](https://www.dynamic.xyz/docs/flow/expiry-and-cancellation.md#quote-expiry) gives the limits.

Wallet sources are the only sources that Dynamic screens. Dynamic screens the wallet address when the payer attaches it, and again in `deposit` mode when the payer changes the amount on a quote. See [Screening](https://www.dynamic.xyz/docs/flow/screening.md).

Receipt: the flow's `txHash` is the transaction the payer's wallet sent.

## Exchange

The payer pays from an exchange account, such as Coinbase, through a purchase link the flow provides. They complete the purchase on the exchange, and the exchange confirms the payment to Dynamic and sends the funds to your destination. The payer signs nothing in your UI, and your UI only waits for the flow to change state after the payer opens the link.

To offer an exchange, enable it for your environment in the [Dynamic dashboard](https://app.dynamic.xyz). An exchange is available for a flow only when the flow settles in a token and on a network that exchange supports and has a destination on that network. For Coinbase, that is USDC. Your UI can ask the flow which exchanges it supports before showing them to the payer.

If the payer attaches an exchange again, they get a new purchase link. A purchase already completed through an earlier link can still reach your destination.

In `deposit` mode, the amount the payer actually paid on the exchange is what settles. In `payment` mode, an exchange payment that comes in short is not accepted, and the flow fails.

Receipt: an exchange payment has no source transaction hash, because the payer pays on the exchange rather than on chain. Identify it with `exchangeTransactionId`, which is the exchange's ID for the payment, and with `settlementTxHash`, which is the on-chain transaction that delivered the funds to your destination. Both arrive in [webhooks](https://www.dynamic.xyz/docs/flow/webhooks.md#what-each-event-carries).

> [!NOTE]
>
> Paying from an exchange in Flow payments is separate from [exchange connections](https://www.dynamic.xyz/docs/flow/exchange-connections.md), where a user links an exchange account to read balances and make transfers. A payer does not need a linked exchange account to pay from an exchange.

## Deposit address

The payer chooses a chain and token and gives a refund address, and the flow receives a deposit address generated for the payment. The payer then sends the quoted amount to that address from anywhere: another wallet, a cold wallet, or an exchange withdrawal. Nothing is connected and nothing is signed in your UI. Deposit addresses are available on EVM chains, Solana, Bitcoin, and TRON.

When the deposit is seen, the flow moves to `source_detected`, and then to `source_confirmed` once the deposit is confirmed. The address stays open for as long as the flow, but the quoted amount to send is guaranteed for only 60 seconds, so request a new quote if the payer has not sent funds by then. [Quote expiry](https://www.dynamic.xyz/docs/flow/expiry-and-cancellation.md#quote-expiry) explains the difference.

The refund address is where the deposit provider returns funds it does not accept. Dynamic does not initiate refunds, and a refund can fail. [Failures and refunds](https://www.dynamic.xyz/docs/flow/failures-and-refunds.md#refunds) explains how refunds are reported.

If the payer switches to another chain or token, the flow gets a new deposit address. Funds already sent to an earlier address for the same flow can still complete the payment, so tell the payer which address is current and that funds already sent may still count.

In `deposit` mode, a smaller deposit than requested is accepted and settles for what arrived. In `payment` mode, a short deposit is not accepted: the provider attempts to return it to the refund address. Funds sent to a deposit address after the flow is cancelled or expired are described in [Expiry and cancellation](https://www.dynamic.xyz/docs/flow/expiry-and-cancellation.md#funds-sent-after-cancellation-or-expiry).

Receipt: the flow's `txHash` is the deposit transaction as reported by the deposit provider. It can be absent when the provider does not report one. The `source_confirmed` webhook carries the same hash with the chain it was sent on and block explorer links.

## Which sources are screened

| Source | Screened by Dynamic |
| - | - |
| Wallet | Yes, at attach and when the amount changes on a `deposit` mode quote |
| Exchange | No |
| Deposit address | No |

Dynamic does not screen the funder of an exchange or deposit-address payment. If your compliance program requires screening those payers, you are responsible for it. [Screening](https://www.dynamic.xyz/docs/flow/screening.md) describes what is screened and when.

## Choosing which sources to offer

You can offer any combination, and the payer chooses per payment. Wallets suit payers who arrive with a self-custody wallet. An exchange suits payers who keep funds on an exchange and would rather pay there than from a wallet. A deposit address works from anywhere, including other exchanges and wallets you do not support directly.

The chains each source supports are listed in [Supported chains](https://www.dynamic.xyz/docs/flow/supported-chains.md).

> [!NOTE]
>
> A flow's `uiConfig.enabledPaymentMethods` lists the sources a payment UI should show. It applies only to UIs that read it: Dynamic's hosted payment page for [payment links](https://www.dynamic.xyz/docs/flow/payment-links.md) uses it, and your own app's UI can read it from the flow. The API does not enforce it, so it does not stop a payer from attaching another source with direct requests. Do not rely on it to enforce a compliance rule.

## Next

> **[Payment lifecycle and states](https://www.dynamic.xyz/docs/flow/lifecycle-walkthrough.md)**
>
> How each source moves a flow through its states.

> **[Screening](https://www.dynamic.xyz/docs/flow/screening.md)**
>
> What is screened, when, and what a blocked result does.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.