> ## 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.

# Flow payments

> What Flow payments does, who does each part of a payment, the three modes, and how you know a payment has finished.

Flow payments moves value from a payer to a destination you control. The payer can pay from a wallet, from an exchange account such as Coinbase, or by sending funds to a deposit address, in a token and on a chain of their choice. You receive the token you configured, on the chain you configured, at the address you configured.

Each payment is represented by a **flow**: one request to move one amount, created by your server and completed by the payer. Flow payments is one part of [Fireblocks Flow](https://www.dynamic.xyz/docs/flow/overview.md), alongside wallet connections and linked exchange accounts, which work without a payment.

> [!NOTE]
>
> Flow payments is an enterprise feature. [Contact us](https://www.dynamic.xyz/book-a-call) to enable it for your environment.

## Who does what

A payment involves your server, the payer, and Dynamic. Each one does a different part of the work.

| Participant | Does |
| - | - |
| Your server | Creates the flow with your environment API token, chooses the mode, the amount, the settlement tokens and chains, and the destinations, and passes the flow ID to the payer's page |
| The payer | Chooses a payment source in your UI and pays from it |
| Dynamic | Screens the addresses described in [Screening](https://www.dynamic.xyz/docs/flow/screening.md), quotes the payment, converts it when needed, confirms that the payment arrived, and settles it to your destination |

Your server keeps the API token. The payer's page needs only the flow ID to start, and it receives a short-lived session token when the payer chooses a source. [Access and data](https://www.dynamic.xyz/docs/flow/security.md) explains what each credential allows.

Everything you configure when you create a flow is fixed from then on. The payer can change their payment source before paying, and in `deposit` mode they can also change the amount. [Payment lifecycle and states](https://www.dynamic.xyz/docs/flow/lifecycle-walkthrough.md#what-can-change-and-until-when) lists what can change and until when.

## Modes

You choose a mode when you create the flow, and it cannot change afterwards. The mode decides who sets the amount and in which currency.

| Mode | Amount | Currency |
| - | - | - |
| `payment` | You set a fixed amount. With `SETTLEMENT_TOKEN`, the flow must have exactly one settlement token, and the flow's `currencyTokenInfo` describes that token. | `USD` or `SETTLEMENT_TOKEN` |
| `deposit` | You set a suggested amount. The payer can change it when they request a quote, in `USD` or in the token they pay with (`SOURCE_TOKEN`). | `USD` |
| `withdraw` | Your platform pays out a fixed USD amount and signs with its own wallet. | `USD` |

Only `deposit` mode accepts an amount change. A quote that changes the amount in any other mode is rejected.

The mode also decides what happens when less than the requested amount arrives. A `deposit` flow accepts the smaller amount and settles it, while a `payment` flow does not. [Amounts you will see](https://www.dynamic.xyz/docs/flow/lifecycle-walkthrough.md#amounts-you-will-see) describes both cases.

## Payment sources

The payer pays from one of three sources, and your UI decides which ones to offer.

| Source | What the payer does |
| - | - |
| Wallet | Connects a wallet, chooses a token, and signs the payment |
| Exchange | Buys and pays on an exchange, such as Coinbase, through a purchase link |
| Deposit address | Sends funds to an address generated for the payment, from anywhere |

Every Flow payment includes risk screening by default, and only wallet sources are screened. [Payment sources](https://www.dynamic.xyz/docs/flow/payment-sources.md) compares the three and explains what each requires.

## How you know a payment worked

A flow has no single status. It reports progress on three independent axes:

* **Execution** tracks what the payer and their source did, from `initiated` to `source_confirmed`.
* **Settlement** tracks delivery to your destination, from `none` to `completed`.
* **Risk** records the screening result: `unknown`, `cleared`, or `blocked`.

A payment is done when `settlementState` is `completed`. Execution reaching `source_confirmed` means the payer's funds arrived, but delivery to your destination can still be in progress. Your server learns about each change from [webhooks](https://www.dynamic.xyz/docs/flow/webhooks.md), and [Payment lifecycle and states](https://www.dynamic.xyz/docs/flow/lifecycle-walkthrough.md) describes every state.

## Choose your path

> **[Payment lifecycle and states](https://www.dynamic.xyz/docs/flow/lifecycle-walkthrough.md)**
>
> Every state, what moves a flow between them, and what can change.

> **[Payment links](https://www.dynamic.xyz/docs/flow/payment-links.md)**
>
> Share a link instead of building a payment page.

> **[API guide](https://www.dynamic.xyz/docs/flow/api.md)**
>
> Create and complete a flow with HTTP requests.

> **[JavaScript SDK](https://www.dynamic.xyz/docs/javascript/reference/flow-getting-started.md)**
>
> Run a payment from a web or React Native app.

> **[Flutter SDK](https://www.dynamic.xyz/docs/flow/flutter.md)**
>
> Run a payment from a Flutter app.

> [!WARNING]
>
> Dynamic does not control the swap, bridge, or routing protocols used to convert and deliver assets. Rates and fees are sourced from third-party providers and may change between quote and execution. Cross-chain transfers carry risk, including slippage, partial fills, and failed conversions. On-chain transactions are final and cannot be reversed.


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