Crypto-to-fiat payout¶
TL;DR - Generate a single-use deposit address. The customer sends stablecoin to it within 24 hours. The provider converts it to USD and wires the recipient. The customer's balance is not affected - this is a pass-through flow.
How this differs from a fiat payout¶
| Fiat payout | Crypto-to-fiat payout | |
|---|---|---|
| Source of funds | Customer's USD balance | Customer's external crypto wallet |
| Affects balance? | Yes (debited) | No (pass-through) |
| Recipient receives | Wire / SWIFT / ACH | Wire / SWIFT (USD) |
| TOTP confirmation? | Yes | Operator confirms in UI; no separate OTP |
| Settlement window | Immediate to 5 BD | 24 h deposit window + provider conversion + wire |
Before you start¶
- A customer in
activestatus. - A fiat recipient - the destination is a bank account, not a wallet. The crypto only enters at the deposit step.
- A supporting document (invoice or other) - required for crypto-to-fiat to satisfy compliance.
Step 1 - Pick the customer and recipient¶
From the customer dashboard click Send crypto-to-fiat payout, or open the global payout menu and pick Crypto-to-fiat.
| Field | Notes |
|---|---|
| Customer | Searchable list of active customers. |
| Recipient | Same searchable fiat recipient picker as on a fiat payout. |

Step 2 - Amount, network, and documents¶
A warning banner reminds you of the deposit rules:
Single-use deposit address
Magma generates a unique deposit address for this transaction. The customer must send the exact amount in the chosen token within 24 hours. After that the address expires and any deposit will be rejected. The address is not reusable.
| Field | Notes |
|---|---|
| Network | Dropdown - polygon, solana, tron, ethereum, arbitrum, base. |
| Token | Filtered by network: USDC or USDT. |
| Amount (USD) | Minimum $1.00. The wizard converts to the equivalent in the chosen token at preview time. |
| Memo | Optional. |
| Invoice number | Optional. |
| Supporting document | Required. PDF, PNG, or JPG, up to 10 MB. Multiple uploads supported. |

Step 3 - Preview¶
The fee breakdown card has the same three-tier shape as a fiat payout (see Fee breakdown). The recap row shows the chosen network and token as tags so it's easy to spot mistakes.

Step 4 - Generate the deposit address¶
Click Confirm & get deposit address. Magma asks the upstream provider to mint a fresh address for this transaction.
Step 5 - Hand the address to the customer¶
The result screen shows everything the customer needs to make the deposit:
| Field | Notes |
|---|---|
| Payout ID | Internal identifier. |
| Deposit address | Single-use. Copyable. |
| QR code | Encodes the payment URI (chain + address + amount) so the customer can scan from their wallet. |
| Network | What chain to send on. |
| Token to send | USDC or USDT. |
| Amount to send | Exact amount in the chosen token - must match precisely. |
| Recipient gets | What the recipient's bank account will receive in USD. |
| Expires | Timestamp 24 hours from creation. After this the deposit address rejects. |
| Status | Starts as awaiting_deposit (amber pulse). |

You can copy the address, copy the URI, or scan the QR code from the customer's wallet. Magma can also email the same details directly to the customer's contact email if your fintech has that template enabled.
After the customer deposits¶
- Provider detects the deposit on-chain.
- Status moves through
processingas the conversion clears. - Provider executes the wire to the recipient.
- Status moves to
completed.
You can track all of this on the transactions page. The same row will show the on-chain txHash once the deposit is detected.
Why the customer balance isn't affected¶
This flow is end-to-end pass-through: the customer's USD balance never moves. The crypto enters at the deposit step, the upstream provider converts and wires the recipient. If your customer wants to fund the balance instead, that's the Get Crypto flow - a separate operation where they top up the USD balance first and then pay from it.
What happens behind the scenes¶
| UI action | Endpoint |
|---|---|
| Generate deposit address | POST /api/v1/payouts/crypto |
| Upload extra docs after the fact | POST /api/v1/payouts/crypto/upload-doc |
| Read networks / tokens supported | GET /api/v1/crypto/networks |
Response fields: depositAddress, amountCrypto, recipientGets, fees, expiresAt (ISO 8601), status, network, token.
What's next¶
- Transactions - watch the payout move through statuses.
- Fee breakdown - what your customer pays.