Fiat Deposits & Withdrawals via the API
This page is for developers building their own app or website on top of the Fiat Controls you configure in Operator Controls. It covers the user-facing API only. Operators configure Fiat Controls in Operator Controls → Exchange → Treasury → Fiat Controls (see Initial Setup).
For authentication, base URLs and the full endpoint reference, see the Developer guide and the API reference.
Your app never moves money. Users transfer fiat outside the exchange, and an operator approves each request. Your app reads the configuration, collects the right inputs and submits the request. Call these endpoints with the user's token, never an admin key.
Read the configuration
The public GET /kit response contains everything you need:
| Field | What it holds |
|---|---|
features.ultimate_fiat | Whether Fiat Controls are on. If it's off, hide all fiat deposit and withdrawal UI. |
user_payments | The payment account types (from Payment accounts) and the fields each one needs, keyed by type. |
onramp | Per fiat currency, the deposit methods (from On-ramp). A manual method holds the deposit details to show the user; a plugin method is handled by a payment plugin. |
offramp | Per fiat currency, the payment account types accepted for withdrawals (from Off-ramp). |
fiat_fees | Your fee overrides per currency (from Fiat Fees & Customization). |
coins | Per-asset details, including type, minimum and maximum amounts and default fees. |
A user's saved payment accounts are in the bank_account field of GET /user. Only verified accounts (status 3) can be used for withdrawals.
Endpoints
| Task | Endpoint | Body |
|---|---|---|
| Request a deposit | POST /fiat/deposit | amount, transaction_id (the user's bank reference), currency, optional address (the on-ramp method) |
| Request a withdrawal | POST /fiat/withdrawal | amount, bank_id (the ID of a verified saved account), currency |
| List, add, edit or delete payment accounts | GET/POST/PUT/DELETE /user/payment-details | Set is_fiat_control: true for Fiat Controls accounts |
Both requests create a pending transaction that an operator must approve. Show that pending state in your app.
Rules to check before submitting
- The user must be verified.
- A user can have at most 3 pending deposits, and 3 pending withdrawals, per currency.
- The amount must be within the asset's minimum and maximum and the user's limits.
- For withdrawals, the account must be one of the user's verified accounts of a type in
offrampfor that currency, and the balance must cover the amount plus the fee. Sub-accounts can't withdraw. - Users can't change an account's status or edit an account once it's verified. Operators verify accounts.