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

# Payment modes

> checkout, deposit, withdrawal — one table, three permissions.

All three modes are rows in the same table with the same lifecycle. `mode` is
stored verbatim and echoed on every read, so you can branch on it directly.

| Mode         | Who is paid                       | Amount            | Typical use                    |
| ------------ | --------------------------------- | ----------------- | ------------------------------ |
| `checkout`   | your recipient address            | usually **fixed** | billing for something specific |
| `deposit`    | a wallet you manage for the payer | usually **open**  | funding a balance              |
| `withdrawal` | the payer                         | open or fixed     | paying a balance back out      |

## Open vs fixed amounts

Omit `amount` (or send `"0"`) for an **open** session — the payer names the
figure. Bound it with `minAmount` / `maxAmount`; both are ignored when `amount`
is fixed.

A `checkout` almost always fixes the amount, because you are billing for a
specific thing. A `deposit` almost never does.

## Withdrawal is not just a reversed deposit

The connected wallet is the **source**, not the destination. So a withdrawal
never offers the send-to-an-address flow, and the backend rejects a
deposit-address mint on that mode — there is nothing to mint one for.

Checkout destinations also use **payout addresses**: an allowlist of
self-custody destinations the merchant proved control of by signing a
challenge. Withdrawals are different: their recipient is supplied per session
and is deliberately not checked against that checkout allowlist.
