> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.coinflow.cash/guides/payouts/source-of-funds-for-payouts/advanced/crypto-deposit-withdraw/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.coinflow.cash/_mcp/server. # Crypto Deposit Withdraw > **Warning** > > **This page is for advanced / cryptocurrency-native companies.** If that's not you, head back to the [Quickstart](/guides/getting-started/quickstart) for the standard flows. ## Crypto Deposit Withdraw Crypto Deposit Withdraw allows merchants to accept stablecoin deposits from users on supported blockchains and automatically convert them into fiat payouts. When a user sends crypto to the provided deposit address, Coinflow detects the deposit, converts it to USD, and initiates a payout to the user's linked bank account or debit card. This is ideal for platforms that want to offer crypto off-ramps without building and maintaining their own blockchain settlement infrastructure. > **Info** > > **How It Works** > > 1. Your platform requests a deposit address for a user > 2. The user sends stablecoins (USDC or USDT) to the deposit address > 3. Coinflow detects the deposit and automatically initiates a fiat payout to the user's linked account --- ## Supported Chains Crypto Deposit Withdraw supports the following chains: **Production:** | Chain | Supported Tokens | | -------- | ---------------- | | Polygon | USDC, USDT | | Solana | USDC, USDT | | Ethereum | USDC, USDT | | Arbitrum | USDC, USDT | | Base | USDC, USDT | **Sandbox:** | Chain | Supported Tokens | | ------------- | ---------------- | | Polygon Amoy | USDC, USDT | | Solana Devnet | USDC, USDT | | Base Sepolia | USDC, USDT | > **Info** > > Use the [Get Supported Chains](#get-supported-chains) endpoint to dynamically retrieve the current list of supported chains and tokens. --- ## Prerequisites Before using Crypto Deposit Withdraw, ensure: * The user has completed [KYC verification](/guides/payouts/kyc-verification) * The user has a linked payout destination (bank account or debit card) * Your merchant account is configured for crypto withdrawals — contact the [Coinflow integrations team](mailto:sales@coinflowlabs.app) to enable this feature --- ## Integration ### Get Supported Chains Retrieve the list of supported blockchains and tokens. Use this to display available deposit options to your users. ```bash GET /withdraw/crypto-deposit-address ``` **Response:** ```json { "chains": [ { "name": "Polygon", "image": "https://example.com/polygon-logo.png", "tokens": [ { "name": "USD Coin", "symbol": "USDC", "image": "https://example.com/usdc-logo.png" }, { "name": "Tether USD", "symbol": "USDT", "image": "https://example.com/usdt-logo.png" } ] } ] } ``` > **Warning** > > The example response above shows **sample values**. Actual chain names, token names, and image URLs will differ in production. Always use the API response to populate your UI. ### Create a Deposit Session Create a deposit session to generate a deposit address for a user. The user sends stablecoins to this address — any amount is accepted — and once the deposit is confirmed, Coinflow automatically initiates the fiat payout for the value received. > **Info** > > Deposit addresses are **open-ended**: the user chooses the amount they send, and the payout is sized to match the value of the tokens received. ```bash POST /withdraw/crypto-deposit-address ``` **Request Body:** | Parameter | Type | Required | Description | | --------- | -------- | -------- | ---------------------------------------------------------------------------------------------- | | `account` | `string` | Yes | The user's payout account token (bank account or debit card token) | | `speed` | `string` | Yes | Payout speed — see [Payout Speeds](/guides/payouts/beyond-payouts/understanding-payout-speeds) | | `chain` | `string` | Yes | The blockchain to accept deposits on (e.g., `"Polygon"`, `"Ethereum"`, `"Solana"`) | | `token` | `string` | Yes | The token symbol to accept (e.g., `"USDC"`, `"USDT"`) | **Example Request:** ```json { "account": "act_abc123", "speed": "asap", "chain": "Polygon", "token": "USDC" } ``` > **Warning** > > The `account` value above is an **example**. Use the actual payout account token from your user's linked bank account or debit card. **Response:** ```json { "depositAddress": "0x1234...abcd", "paymentChainName": "Polygon", "paymentCurrencySymbol": "USDC", "chainLogoUrl": "https://example.com/polygon-logo.png", "currencyLogoUrl": "https://example.com/usdc-logo.png" } ``` | Field | Description | | ----------------------- | ------------------------------------------------------ | | `depositAddress` | The on-chain address where the user should send tokens | | `paymentChainName` | The name of the blockchain for the deposit | | `paymentCurrencySymbol` | The token symbol the user should send | | `chainLogoUrl` | URL for the blockchain logo (use in your UI) | | `currencyLogoUrl` | URL for the token logo (use in your UI) | --- ## Authentication The Create Deposit Session endpoint requires both: * **Merchant authentication** — Admin-level merchant API key * **User authentication** — The user must be an approved withdrawer (via wallet auth or session key) See [User Identification](/guides/payouts/user-identification) for details on authenticating users for payouts. --- ## Payout Lifecycle Once a user sends tokens to the deposit address: 1. **Deposit detected** — Coinflow monitors the deposit address and detects the incoming transaction 2. **Conversion** — The stablecoins are converted to USD 3. **Payout initiated** — A fiat payout is automatically initiated to the user's linked account at the specified speed 4. **Payout completed** — The user receives funds in their bank account or on their debit card > **Info** > > Monitor payout status using [Withdraw Webhooks](/guides/developer-resources/webhooks/withdraw-webhooks) to notify your users when their payout is complete. --- ## Supported Payout Speeds All standard payout speeds are available with Crypto Deposit Withdraw. The `speed` parameter determines how quickly the user receives their fiat funds after the deposit is confirmed. | Speed | Description | | ------------ | -------------------------------- | | `"asap"` | RTP / Instant (24/7/365) | | `"card"` | Push to debit card (instant) | | `"same_day"` | Same-day ACH | | `"standard"` | Standard ACH (2-3 business days) | See [Understanding Payout Speeds](/guides/payouts/beyond-payouts/understanding-payout-speeds) for full details.