> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.coinflow.cash/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.