Skip to main content
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.
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.
To find your Consul wallet address, go to Dashboard → Add Funds and copy the displayed wallet address.

Fiat Deposits

Consul converts fiat deposits into USDC and credits your balance. Use the Deposits API to initiate a fiat deposit programmatically.
MethodCurrencySpeedNotes
Domestic Wire (FedWire)USD0-1 business daysFastest for large USD deposits
ACH PushUSD1-2 business daysYou initiate the transfer from your bank
ACH DebitUSD1-2 business daysConsul pulls funds from your linked bank account. Enabled on request.
PIXBRLA few minutesInstant Brazilian payments
Transfers 3.0ARSA few minutesArgentine instant transfers
SWIFT (coming soon)USD2-5 business daysSWIFT international wire transfers
PSE in Colombia and SPEI in Mexico can be enabled on request.

Example

Before creating a deposit, you need a linked bank account. The bank account determines the currency and payment rail. See the Bank Accounts guide for the full schema and examples for each supported currency.

2. Create a Deposit Quote

Request a quote with the Create a Deposit Quote endpoint. The currency and payment rail are determined by the linked bank account:
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 endpoint to lock in the rate and receive transfer instructions:
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:
{
  "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 for the full details or contact support.

Deposit Lifecycle

A deposit can be in one of the following states:
StateDescription
awaiting_transferThe deposit is awaiting transfer to your Consul balance.
processingFunds have been received and the deposit is being processed.
completedThe deposit has been completed successfully. Funds have been credited to your Consul balance.
failedThe deposit has failed. A failure reason is provided.
cancelledThe deposit has been canceled. Funds have not been credited.
expiredThe 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.

Deposit Lifecycle Diagram

The following state diagram shows the lifecycle of a deposit.