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

# Deposits

> How to deposit funds into your Consul balance

Before you can issue payouts, your Consul balance must be funded. There are two ways to move
money into your balance: stablecoin deposits and fiat deposits.

## Stablecoin Deposits

If you already hold USDC or USDT in a wallet or exchange, you can transfer it to your Consul
balance directly. This is instant and requires no conversion. You will receive an
`inbound_transfer.created` webhook event once funds arrive.

<Info>
  By default, funds must be sent as **USDC or USDT on Base**. If you need support for other
  tokens or chains, contact support to enable.
</Info>

<Tip>
  To find your Consul wallet address, go to
  [Dashboard](https://app.onconsul.com) **→ Add Funds** and copy the displayed
  wallet address.
</Tip>

## Fiat Deposits

Consul converts fiat deposits into USDC and credits your balance. Use the
[Deposits API](/api-reference/deposits/create-a-deposit-quote) to initiate a fiat deposit
programmatically.

| Method                  | Currency | Speed             | Notes                                                                     |
| ----------------------- | -------- | ----------------- | ------------------------------------------------------------------------- |
| Domestic Wire (FedWire) | USD      | 0-1 business days | Fastest for large USD deposits                                            |
| ACH Push                | USD      | 1-2 business days | You initiate the transfer from your bank                                  |
| ACH Debit               | USD      | 1-2 business days | Consul pulls funds from your linked bank account. **Enabled on request.** |
| PIX                     | BRL      | A few minutes     | Instant Brazilian payments                                                |
| Transfers 3.0           | ARS      | A few minutes     | Argentine instant transfers                                               |
| SWIFT (coming soon)     | USD      | 2-5 business days | SWIFT international wire transfers                                        |

*PSE in Colombia and SPEI in Mexico can be enabled on request.*

### Example

#### 1. Link a Bank Account

Before creating a deposit, you need a linked bank account. The bank account determines the
currency and payment rail. See the [Bank Accounts guide](/guides/bank-accounts) for the full
schema and examples for each supported currency.

#### 2. Create a Deposit Quote

Request a quote with the [Create a Deposit Quote](/api-reference/deposits/create-a-deposit-quote)
endpoint. The currency and payment rail are determined by the linked bank account:

```bash theme={"system"}
curl -X POST https://api.onconsul.com/v1/deposits/quote \
  -H "Authorization: Basic base64($CONSUL_API_KEY)" \
  -H "Content-Type: application/json" \
  -d '{
    "source_bank_account_id": "ba_abc123",
    "amount": "10000"
  }'
```

The response includes the exchange rate, fees, and a quote `id`.

#### 3. Execute the Deposit

Execute the quote with the [Execute a Deposit](/api-reference/deposits/execute-a-deposit)
endpoint to lock in the rate and receive transfer instructions:

```bash theme={"system"}
curl -X POST https://api.onconsul.com/v1/deposits/quote/qt_abc123/execute \
  -H "Authorization: Basic base64($CONSUL_API_KEY)" \
```

The response is a `Transfer` object containing `fiat_transfer_instructions` - the details
needed to complete the transfer from your bank:

```json theme={"system"}
{
  "id": "tr_8xKp2mNvQw",
  "transfer_type": "deposit",
  "status": "awaiting_funds",
  "source": {
    "currency": "USD",
    "amount": "10000.00"
  },
  "destination": {
    "currency": "USDC",
    "amount": "9995.00"
  },
  "market_rate": "0.9995",
  "fiat_transfer_instructions": {
    "payment_method": "usd_fedwire",
    "usd_fedwire_transfer_instructions": {
      "routing_number": "021000089",
      "account_number": "9876543210",
      "bank_name": "Lead Bank",
      "beneficiary_name": "Consul Inc.",
      "beneficiary_address": "123 Main St, Kansas City, MO 64108",
      "transfer_memo": "AVK2H1VVP1Z"
    }
  },
  "created_at": "2025-03-24T14:30:00Z"
}
```

For USD wires and ACH pushes, use the `transfer_memo` when initiating the wire or transfer from your bank.
Each payment rail has a different set of transfer instructions. See the schema in
[Execute a Deposit](/api-reference/deposits/execute-a-deposit) for the full details or contact support.

### Deposit Lifecycle

A deposit can be in one of the following states:

| State               | Description                                                                                                                                                                           |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `awaiting_transfer` | The deposit is awaiting transfer to your Consul balance.                                                                                                                              |
| `processing`        | Funds have been received and the deposit is being processed.                                                                                                                          |
| `completed`         | The deposit has been completed successfully. Funds have been credited to your Consul balance.                                                                                         |
| `failed`            | The deposit has failed. A failure reason is provided.                                                                                                                                 |
| `cancelled`         | The deposit has been canceled. Funds have not been credited.                                                                                                                          |
| `expired`           | The deposit has expired while waiting for funds to be received. If funds are received after expiry, they are still credited to your Consul balance but may require manual processing. |

<Accordion title="Deposit Lifecycle Diagram" defaultOpen={true}>
  The following state diagram shows the lifecycle of a deposit.

  ```mermaid theme={"system"}
  stateDiagram-v2
  [*] --> awaiting_transfer: Quote executed
  awaiting_transfer --> processing: Funds received
  awaiting_transfer --> expired: Timed out
  awaiting_transfer --> cancelled: Cancelled
  processing --> completed: Funds credited
  processing --> failed: Error
  expired --> processing: Late funds received
  ```
</Accordion>
