---
updatedAt: 2026-08-24T10:41:31.000Z
---

Fetch the complete documentation index at: https://docs.blockdaemon.com/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# How to Deposit in Vaults

Lending and borrowing protocols let you deposit assets as collateral to earn interest, and borrow other assets against that collateral. This guide walks you through the entire flow — from fetching pool information and checking allowances, to depositing, signing, and verifying transactions.

## Before You Begin: Dedicated Vaults

This guide assumes you're working with **dedicated vaults** — custom vaults built to support specific product requirements such as isolated strategies, protocol-specific behavior, or institutional use cases.

To interact with dedicated vaults, include the following parameter in your requests:

| Parameter         | Value  | Used In                                                          |
| ----------------- | ------ | ---------------------------------------------------------------- |
| `useCustomVaults` | `true` | Pool queries, position queries, deposit, and withdrawal requests |

This flag ensures all data and interactions are routed to your dedicated vaults instead of shared or default ones.

> 📘 Need a Dedicated Vault?
>
> If you'd like to set up a dedicated vault for your product or strategy, [reach out to our team](https://www.blockdaemon.com/support). We'll work with you to define the vault configuration, supported protocols, and any custom parameters for your use case.

***

## Flow Overview

Here's a high-level look at the lending deposit flow:

| Step | Operation                                                    | Description                                                             |
| ---- | ------------------------------------------------------------ | ----------------------------------------------------------------------- |
| 1    | [Get Pool Information](#step-1-get-pool-information)         | Retrieve the pool address, interest rates, and liquidity for your asset |
| 2    | [Check Token Allowance](#step-2-check-token-allowance)       | Verify the lending pool has permission to access your tokens            |
| 3    | [Approve the Lending Pool](#step-3-approve-the-lending-pool) | Grant the pool contract permission to spend your tokens                 |
| 4    | [Deposit Assets](#step-4-deposit-assets)                     | Supply assets to start earning interest                                 |
| 5    | [Sign & Broadcast](#step-5-sign--broadcast-the-transaction)  | Sign the transaction and submit it to the blockchain                    |
| 6    | [Verify Transaction](#step-6-verify-the-transaction)         | Confirm the transaction executed successfully                           |
| 7    | [Get User Positions](#step-7-get-user-positions)             | Check your lending positions, balances, and rewards                     |

<Image align="center" src="https://files.readme.io/3d20651f3006bc645dc4618b04299a146b85ef52bd56258e46552f5d04c890fb-Frame_1-3.png" />

***

## Step 1: Get Pool Information

Start by retrieving pool information for the asset you want to deposit. This response gives you the **pool address** (which you'll need in Steps 2 and 3), along with current interest rates, the loan-to-value ratio, and available liquidity.

**Endpoint**

```http
GET https://svc.blockdaemon.com/defi/v1/lendborrow/pools
```

### Parameters

| Parameter         | Required | Description                                                                        |
| ----------------- | -------- | ---------------------------------------------------------------------------------- |
| `lendborrowId`    | Yes      | Identifier for the lending protocol (e.g., `1200` for Aave V3 on Ethereum Mainnet) |
| `assets`          | Yes      | Token symbol (e.g., `USDC`) or ERC-20 contract address to query                    |
| `useCustomVaults` | Yes      | Set to `true` to fetch data from your dedicated vaults                             |

### Example Request

```bash
curl --location \
  'https://svc.blockdaemon.com/defi/v1/lendborrow/pools?lendborrowId=1200&assets=USDC&useCustomVaults=true' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

### Example Response

```json
{
  "status": 200,
  "msg": "success",
  "data": {
    "USDC": {
      "tokenSymbol": "USDC",
      "tokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
      "logoUrl": "https://images.ctfassets.net/hwqnbx905qdp/153HkqSJWC5wZw7YNCZbQc/c7222120de244ea254c9bc4bdef76fae/eip155_1-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48.webp",
      "tags": ["stablecoin"],
      "poolAddress": "0x7C15E25AD5a219030A2F748fbd68eeEa36191e29",
      "variableBorrowRate": "4.95",
      "estimatedVariableBorrowAPY": "5.08",
      "stableSupplyRate": "0.00",
      "variableSupplyRate": "3.66",
      "estimatedSupplyAPY": "3.72",
      "ltv": "75",
      "availableLiquidity": "398699845269846",
      "reserveSize": "4508504190717153",
      "prices": {
        "usd": [
          {
            "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "0.9999232435582142"
          }
        ]
      }
    }
  }
}
```

> ❗️ Important
>
> Save the `poolAddress` from this response. You'll use it as the `spender` parameter in Step 2 and the `to` parameter in Step 3.

***

## Step 2: Check Token Allowance

Before depositing, verify that the lending pool contract has enough allowance to access your tokens. This check uses the `poolAddress` from Step 1 as the `spender`.

**Endpoint**

```http
GET https://svc.blockdaemon.com/account/v1/allowance
```

### Parameters

| Parameter      | Required | Description                                                   |
| -------------- | -------- | ------------------------------------------------------------- |
| `owner`        | Yes      | The wallet address that owns the tokens                       |
| `tokenAddress` | Yes      | The ERC-20 token contract address to check                    |
| `spender`      | Yes      | The lending pool contract address (`poolAddress` from Step 1) |

### Example Request

```bash
curl --location \
  'https://svc.blockdaemon.com/account/v1/allowance?owner=0x6Fb447Ae94F5180254D436A693907a1f57696900&tokenAddress=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&spender=0x7C15E25AD5a219030A2F748fbd68eeEa36191e29' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

### Example Response

```json
{
  "status": 200,
  "msg": "success",
  "data": {
    "allowance": "1000000000000000000",
    "prices": {
      "usd": [
        {
          "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "0.9999173038291085"
        }
      ]
    }
  }
}
```

> 📘 What Next?
>
> * If the `allowance` value is **less than** the amount you want to deposit → proceed to **Step 3** to approve the pool.
> * If the `allowance` is **sufficient** → skip ahead to **Step 4** and deposit directly.

***

## Step 3: Approve the Lending Pool

If the current allowance is insufficient, you need to approve the lending pool contract to spend your tokens. This generates an unsigned transaction that, once signed and broadcast, grants the pool permission to transfer tokens on your behalf.

This is typically a **one-time transaction per token**, unless you need to increase the allowance later.

**Endpoint**

```http
POST https://svc.blockdaemon.com/defi/v1/fungibletoken/approve
```

### Parameters

| Parameter      | Required | Description                                                                               |
| -------------- | -------- | ----------------------------------------------------------------------------------------- |
| `from`         | Yes      | The wallet address initiating the approval                                                |
| `tokenAddress` | Yes      | The ERC-20 token contract address to approve                                              |
| `amount`       | Yes      | Amount to approve, in the token's smallest unit. Use a large value for unlimited approval |
| `to`           | Yes      | The lending pool contract address (`poolAddress` from Step 1)                             |
| `chainId`      | Yes      | The blockchain network ID (e.g., `1` for Ethereum Mainnet, `8453` for Base)               |

### Example Request

```bash
curl --location \
  'https://svc.blockdaemon.com/defi/v1/fungibletoken/approve' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
    "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "tokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
    "amount": "1000000",
    "to": "0x7C15E25AD5a219030A2F748fbd68eeEa36191e29",
    "chainId": "1"
  }'
```

### Example Response

```json
{
  "status": 200,
  "msg": "success",
  "data": {
    "chainId": "1",
    "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
    "gas": "56361",
    "value": "0",
    "data": "0x095ea7b30000000000000000000000007c15e25ad5a219030a2f748fbd68eeea36191e2900000000000000000000000000000000000000000000000000000000000f4240",
    "estimationCheck": true,
    "referenceId": "1599881a6bb445a192c3b028bcd65243"
  }
}
```

> 📘 Security Tip
>
> Consider approving only the exact amount you need rather than granting unlimited approval. This minimizes exposure if a contract is compromised. You can always approve additional amounts later.

***

## Step 4: Deposit Assets

With sufficient allowance in place, you can now deposit tokens into the lending pool. Upon deposit, you'll receive **vault share tokens** that represent your position.

**Endpoint**

```http
POST https://svc.blockdaemon.com/defi/v1/lendborrow/deposit
```

### Parameters

| Parameter         | Required | Description                                                                                            |
| ----------------- | -------- | ------------------------------------------------------------------------------------------------------ |
| `lendborrowId`    | Yes      | Identifier for the lending protocol (e.g., `1200` for Aave V3 on Ethereum, `1206` for Aave V3 on Base) |
| `asset`           | Yes      | The token contract address to deposit                                                                  |
| `amount`          | Yes      | Amount to deposit, in the token's smallest unit (e.g., `1000000` = 1 USDC, since USDC has 6 decimals)  |
| `from`            | Yes      | The wallet address initiating the deposit                                                              |
| `onBehalfOf`      | Yes      | The address that will receive the vault share tokens (usually the same as `from`)                      |
| `useCustomVaults` | Yes      | Set to `true` to route the deposit to your dedicated vault                                             |

### Example Request

```bash
curl --location \
  'https://svc.blockdaemon.com/defi/v1/lendborrow/deposit' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
    "lendborrowId": "1200",
    "asset": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
    "amount": "1000000",
    "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "onBehalfOf": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "useCustomVaults": true
  }'
```

### Example Response

```json
{
  "status": 200,
  "msg": "success",
  "data": {
    "chainId": "1",
    "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "to": "0x7C15E25AD5a219030A2F748fbd68eeEa36191e29",
    "gas": "500000",
    "value": "0",
    "data": "0x6e553f6500000000000000000000000000000000000000000000000000000000000f42400000000000000000000000006fb447ae94f5180254d436a693907a1f57696900",
    "estimationCheck": true,
    "referenceId": "d0b8ebab4b544d1b9182c1ea94baf017"
  }
}
```

> 📘 How Interest Works
>
> After depositing, your vault share token balance stays constant, but the **value of each share increases over time** as interest accrues from Aave. This means your position grows in value without the token count changing.

***

## Step 5: Sign & Broadcast the Transaction

The deposit endpoint returns an **unsigned transaction payload**. You need to sign it with your private key and then broadcast it to the blockchain.

### Signing the Transaction

1. **Retrieve the transaction object** from the deposit response (Step 4).
2. **Sign the transaction** using your preferred wallet or signing infrastructure (e.g., MetaMask, WalletConnect, or a backend signer).
   * Make sure the `from` address matches the wallet performing the signature.
   * The output will be a `rawTransaction` — a hex-encoded signed transaction string.
3. **Verify the signed transaction** includes the correct `nonce`, `gas`, and `to` fields before broadcasting.

### Broadcasting the Transaction

Once signed, submit the transaction to the network.

**Endpoint**

```http
POST https://svc.blockdaemon.com/tx/v1/{blockchain_id}/send
```

### Parameters

| Parameter       | Required | Description                                                                         |
| --------------- | -------- | ----------------------------------------------------------------------------------- |
| `blockchain_id` | Yes      | A hyphen-separated protocol-network pair (e.g., `ethereum-mainnet`, `base-mainnet`) |
| `tx`            | Yes      | The signed transaction in hexadecimal format                                        |

### Example Request

```bash
curl --request POST \
  --url https://svc.blockdaemon.com/tx/v1/ethereum-mainnet/send \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "tx": "0xf8ad82006c8504a817c80083063cba94a238dd80c259a72e81d7e4664a9801593f98d1c580b844e8eda9df000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda029130000000000000000000000000000000000000000000000000000000000f424000000000000000000000000006fb447ae94f5180254d436a693907a1f5769690025a0..."
  }'
```

### Example Response

```json
{
  "id": "0x2aed3cd0901952a0b3d95e7ece2ff4d0671e5b8162261fcd42fee66e72ea4bd5"
}
```

The `id` field is your **transaction hash**. You'll use it in the next step to track and verify the transaction.

***

## Step 6: Verify the Transaction

After broadcasting, check the transaction status to confirm it executed successfully.

**Endpoint**

```http
GET https://svc.blockdaemon.com/universal/v1/{protocol}/{network}/tx/{hash}
```

### Parameters

| Parameter  | Required | Description                                        |
| ---------- | -------- | -------------------------------------------------- |
| `protocol` | Yes      | The blockchain protocol (e.g., `ethereum`, `base`) |
| `network`  | Yes      | The network name (e.g., `mainnet`)                 |
| `hash`     | Yes      | The transaction hash from Step 5                   |

### Example Request

```bash
curl --location \
  'https://svc.blockdaemon.com/universal/v1/ethereum/mainnet/tx/0x2aed3cd0901952a0b3d95e7ece2ff4d0671e5b8162261fcd42fee66e72ea4bd5' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Accept: application/json'
```

### Example Response

```json
{
  "id": "0x2aed3cd0901952a0b3d95e7ece2ff4d0671e5b8162261fcd42fee66e72ea4bd5",
  "status": "completed",
  "block_number": 24227052,
  "timestamp": 1768322615,
  "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
  "to": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5",
  "events": [
    {
      "type": "fee",
      "asset": "ETH",
      "amount": "0.00019594"
    },
    {
      "type": "transfer",
      "asset": "USDC",
      "amount": "1.00",
      "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
      "to": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"
    }
  ]
}
```

A `"status": "completed"` confirms your deposit was successful. The `events` array shows the token transfer and any fees paid.

***

## Step 7: Get User Positions

Finally, retrieve your lending positions to confirm the deposit and view your current balances, accrued rewards, and APY.

**Endpoint**

```http
GET https://svc.blockdaemon.com/defi/v1/lendborrow/userpositions
```

### Parameters

| Parameter         | Required | Description                                                                |
| ----------------- | -------- | -------------------------------------------------------------------------- |
| `useCustomVaults` | Yes      | Set to `true` to query positions in your dedicated vaults                  |
| `lendborrowId`    | Yes      | Identifier for the lending protocol (e.g., `1200` for Aave V3 on Ethereum) |
| `address`         | Yes      | The wallet address to query positions for                                  |

### Example Request

```bash
curl --location \
  'https://svc.blockdaemon.com/defi/v1/lendborrow/userpositions?useCustomVaults=true&lendborrowId=1200&address=0x50cff7e5c7d76a1e8a089625178614c0de63cbe8' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

### Example Response

```json
{
  "status": 200,
  "msg": "success",
  "data": [
    {
      "underlyingAsset": "0x853d955aCEf822Db058eb8505911ED77F175b99e",
      "scaledATokenBalance": "4745866419141874213",
      "usageAsCollateralEnabledOnUser": false,
      "aToken": "0xd4e245848d6E1220DBE62e155d89fa327E43CB06",
      "currentBalance": "5622165768846743216",
      "rewardsAPYPercentage": "3.94",
      "accruedRewards": "876299349704869003",
      "estimatedSupplyAPY": "4.01",
      "prices": {
        "usd": [
          {
            "0x853d955acef822db058eb8505911ed77f175b99e": "0.9925565390932398"
          }
        ]
      }
    }
  ]
}
```

> 👍 Tip
>
> Use this endpoint to monitor your positions over time. The `currentBalance` will grow as interest accrues, and `accruedRewards` tracks any additional protocol incentives you've earned.

***

## Additional Operations

Beyond depositing, the lending protocol supports withdrawing.

***

### Withdraw

Retrieve your deposited collateral — either partially or in full. To withdraw, you return the vault share tokens you received during deposit.

**Endpoint**

```http
POST https://svc.blockdaemon.com/defi/v1/lendborrow/withdraw
```

> 📘 Api Reference
>
> See the [API Reference](https://docs.blockdaemon.com/reference/lendborrowwithdraw) for the full request/response schema.

***

For this operation, follow the same **Sign & Broadcast** (Step 5) and **Verify Transaction** (Step 6) process described earlier in this guide.

***

## 👋 Need Help?

Interested in a B2B2C setup, true-ups, or revenue-share arrangements? We'd love to chat about how dedicated vaults can work for your business.

For any issues, bugs, or questions, reach out to us via [email](mailto:support@blockdaemon.com) or our [support page](https://www.blockdaemon.com/support).