Skip to main content

User positions

GET 

/v1/data/lending/user-positions

Fetches lending and borrowing positions for a given account across one or more chains.

Response Structure:

  • items: Flat array of lender entries sorted by net worth (descending). Each entry fuses sub-account position data with aggregated summary metrics (deposits, debt, APRs, health, leverage).
  • summary: Portfolio-wide totals (net worth, APRs, leverage, active counts) plus per-chain breakdowns.
  • partial / incompleteLenders: only present when some lender could not be read in full (RPC error or reverted call). A lender whose reads all failed is omitted rather than returned as an empty position, so totals are a lower bound for that request.

Lender Entry includes:

  • Per-asset deposits and debt (in USD and token units)
  • Sub-account data with health factors and borrow capacity
  • Aggregated lender-level metrics (total deposits/debt, weighted APRs, health factor, leverage)
  • Collateral status, withdrawable/borrowable amounts per position

Portfolio Summary includes:

  • Total deposits, debt, and net worth (current + 24h ago) across all chains
  • Weighted average APRs and overall leverage ratio
  • Count of active lenders and chains
  • Per-chain totals (deposits, debt, net worth, lender count)

The server executes RPC calls internally and returns fully parsed results.


Using with action endpoints (POST simulation):

All action endpoints (/v1/actions/lending/*, /v1/actions/loop/*) accept an optional POST body for post-trade simulation. The data comes directly from this endpoint:

// 1. Fetch positions
GET /v1/data/lending/user-positions?account=0x...&chains=1

// 2. Pick the lender entry + sub-account you're acting on
const sub = response.data.items[i].data[j]

// 3. POST to any action endpoint with the same query params as GET, plus:
POST /v1/actions/lending/deposit?marketUid=AAVE_V3:1:0x...&amount=1000000
{
"balanceData": sub.balanceData,
"aprData": sub.aprData,
"positions": sub.positions,
"modeId": sub.userConfig.selectedMode
}

// 4. Response includes a "simulation" field with pre/post health factor,
// borrow capacity, and projected balanceData/aprData.

See the SimulationBody schema for full details.

Plain-text reference — GET /v1/data/lending/user-positions

Parameters

ParameterInTypeRequiredDescription
accountquerystringyesEVM account address (0x-prefixed, 40 hex chars)
chainsquerystringyesComma-separated chain IDs
lendersquerystringnoComma-separated lender IDs to filter by. If omitted, all supported lenders for each chain are included. See the LenderId schema for the full set of accepted values.

Response 200

FieldTypeDescription
successTrue
dataobjectUser lending positions as a flat array with portfolio summary and per-chain breakdowns.
data.itemsobject[]Flat array of lender entries sorted by net worth (descending). Each entry fuses position data with aggregated summary metrics.
data.items[].lenderstringLender identifier
data.items[].chainIdstringChain ID
data.items[].accountstringUser account address
data.items[].dataobject[]Sub-account position data
data.items[].data[].accountIdstringSub-account identifier (e.g., "0" for default, NFT ID for Init)
data.items[].data[].healthnumberHealth factor (null if no debt). Values > 1 are healthy, < 1 at risk of liquidation.
data.items[].data[].borrowCapacityUSDnumberTotal USD borrowable while maintaining health >= 1
data.items[].data[].balanceDataobjectAggregated balance data for a sub-account.
data.items[].data[].aprDataobjectAPR breakdown for a sub-account.
data.items[].data[].positionsobject[]Individual asset positions in this sub-account
data.items[].data[].userConfigobjectUser configuration for a sub-account.
data.items[].balanceDataobjectSummary-level balance data (without discounted/adjusted fields).
data.items[].balanceData.depositsnumberTotal deposits in USD
data.items[].balanceData.debtnumberTotal debt in USD
data.items[].balanceData.collateralnumberCollateral value in USD
data.items[].balanceData.collateralAllActivenumberCollateral if all assets were enabled
data.items[].balanceData.navnumberNet asset value (deposits - debt)
data.items[].balanceData.deposits24hnumberDeposits 24h ago
data.items[].balanceData.debt24hnumberDebt 24h ago
data.items[].balanceData.nav24hnumberNAV 24h ago
data.items[].balanceData.rewardsobject[]Pending reward token claims. Each entry represents a single reward program.
data.items[].aprDataobjectSummary-level APR breakdown.
data.items[].aprData.aprnumberNet APR (deposit - borrow)
data.items[].aprData.depositAprnumberWeighted deposit APR
data.items[].aprData.borrowAprnumberWeighted borrow APR
data.items[].aprData.rewardAprnumberTotal reward APR
data.items[].aprData.rewardDepositAprnumberReward APR on deposits
data.items[].aprData.rewardBorrowAprnumberReward APR on borrows
data.items[].aprData.intrinsicAprnumberIntrinsic yield APR (e.g., stETH staking)
data.items[].aprData.intrinsicDepositAprnumberIntrinsic yield APR portion from deposits
data.items[].aprData.intrinsicBorrowAprnumberIntrinsic yield APR portion from borrows
data.items[].aprData.rewardsobjectPer-reward-token APR breakdown. Keys are reward token addresses.
data.items[].leveragenumberLeverage ratio (deposits / nav)
data.summaryobjectPortfolio-wide totals with per-chain breakdowns. Per-lender summaries are fused into each LenderDataEntry in the items array.
data.summary.balanceDataobjectSummary-level balance data (without discounted/adjusted fields).
data.summary.balanceData.depositsnumberTotal deposits in USD
data.summary.balanceData.debtnumberTotal debt in USD

Request

Responses

User position data with portfolio summary