poolDetails

Fetch pool and market data across protocols.

poolDetails(inputs: [PoolInput!]!): MultiPoolResponse!

Returns pool-level data (APY, TVL, token metadata) for one or more pools across protocols.

Warning
Maximum 5 inputs per request. Requests with more than 5 inputs are rejected.
Warning
Rate limit: 100 requests per 60-second window. Maximum 5 inputs per request. Exceeding the limit returns HTTP 429.

Input

input PoolInput {
  protocol: String!    # "morpho" | "pendle" | "aave"
  chainId: Int!        # Chain ID
  poolAddress: String! # Pool/vault/market contract address
}
FieldTypeDescription
protocolString!Protocol identifier
chainIdInt!Blockchain network ID
poolAddressString!Pool or market contract address (hex)
Info
Pool details are currently supported for Morpho, Pendle, and Aave.

Response

type PoolOutput {
  protocol: String!    # Protocol that returned the data
  chainId: Int!        # Chain ID of the pool
  poolAddress: String! # Pool address queried
  data: String!        # JSON-serialized protocol-native pool data
}

type MultiPoolResponse {
  data: [PoolOutput!]!
  errors: [PoolProtocolError!]!
}
Warning
The data field is a JSON string. Parse it with JSON.parse() to access the typed object. Use the type field in the parsed object to determine the response shape.
Note
Partial failures: If one protocol fails, the others still return data. Always check both data and errors arrays in the response.

Examples

Morpho supports two pool types. Pass a vault address (42-character hex) for vault pool data, or a market unique key (66-character hex) for market pool data.

Vault pool

Query
query {
  poolDetails(inputs: [
    { protocol: "morpho", chainId: 1, poolAddress: "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb" }
  ]) {
    data { protocol chainId poolAddress data }
    errors { protocol chainId poolAddress error { code message retryable } }
  }
}
Parsed data field
{
  "type": "morpho-vault-pool",
  "vaultAddress": "0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb",
  "name": "Morpho Blue USDC",
  "symbol": "mbUSDC",
  "asset": { "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "symbol": "USDC", "decimals": 6 },
  "chainId": 1,
  "network": "mainnet",
  "apy": 0.072,
  "netApy": 0.068,
  "avgApy": 0.065,
  "avgNetApy": 0.061,
  "totalAssets": "52000000000",
  "totalAssetsUsd": 52000000.0,
  "totalSupply": "50800000000000000000000"
}

Market pool

Query
query {
  poolDetails(inputs: [
    { protocol: "morpho", chainId: 1, poolAddress: "0xb323495f7e4148be5643a4ea4a8221eef163e4bccfdedc2a6f4696baacbc86cc" }
  ]) {
    data { protocol chainId poolAddress data }
    errors { protocol chainId poolAddress error { code message retryable } }
  }
}
Parsed data field
{
  "type": "morpho-market-pool",
  "marketId": "0xb323495f7e4148be5643a4ea4a8221eef163e4bccfdedc2a6f4696baacbc86cc",
  "loanAsset": { "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "symbol": "USDC", "decimals": 6 },
  "collateralAsset": { "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "symbol": "WETH", "decimals": 18 },
  "chainId": 1,
  "metrics": {
    "supplyApy": 0.042, "borrowApy": 0.058,
    "netSupplyApy": 0.055, "netBorrowApy": 0.045,
    "fee": 0.1, "utilization": 0.72
  },
  "tvl": {
    "supplyAssets": "120000000000", "supplyAssetsUsd": 120000000.0,
    "borrowAssets": "86400000000", "borrowAssetsUsd": 86400000.0,
    "collateralAssets": "28000000000000000000000", "collateralAssetsUsd": 88200000.0,
    "liquidityAssets": "33600000000", "liquidityAssetsUsd": 33600000.0
  },
  "lltv": 0.86
}
Query
query {
  poolDetails(inputs: [
    { protocol: "pendle", chainId: 1, poolAddress: "0xD0354D4e7bCf345fB117cabe41aCaDb724eccCa2" }
  ]) {
    data { protocol chainId poolAddress data }
    errors { protocol chainId poolAddress error { code message retryable } }
  }
}
Parsed data field
{
  "type": "pendle-market-pool",
  "marketAddress": "0xd0354d4e7bcf345fb117cabe41acadb724eccca2",
  "chainId": 1,
  "name": "stETH 26DEC2025",
  "expiry": "2025-12-26T00: 00: 00Z",
  "pt": "1-0xc69Ad9baB1dEE23F4605a82b3354F8E40d665F49",
  "yt": "1-0x76bf3565833927b94c0020a3eef57bf29d52e568",
  "sy": "1-0xcbC72d92b2dc8187414F6734718563898740C0BC",
  "underlyingAsset": "1-0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
  "impliedApy": 0.038,
  "underlyingApy": 0.034,
  "aggregatedApy": 0.072,
  "maxBoostedApy": 0.145,
  "liquidity": 45000000.0,
  "totalTvl": 120000000.0,
  "totalPt": 35000.5,
  "totalSy": 42000.3
}
Query
query {
  poolDetails(inputs: [
    { protocol: "aave", chainId: 1, poolAddress: "0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e" }
  ]) {
    data { protocol chainId poolAddress data }
    errors { protocol chainId poolAddress error { code message retryable } }
  }
}
Parsed data field
{
  "type": "aave-market-pool",
  "marketAddress": "0x2f39d218133afab8f2b819b1066c7e434ad94e9e",
  "marketName": "Aave V3 Ethereum",
  "chainId": 1,
  "totalMarketSize": 28534000000.0,
  "totalAvailableLiquidity": 12890000000.0,
  "reserves": [
    {
      "underlyingToken": { "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "symbol": "WETH", "name": "Wrapped Ether", "decimals": 18 },
      "aToken": { "address": "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8", "symbol": "aEthWETH" },
      "vToken": { "address": "0xea51d7853eefb32b6ee06b1c12e6dcca88be0ffe", "symbol": "variableDebtEthWETH" },
      "supplyApy": 0.0198,
      "borrowApy": 0.0285,
      "sizeUsd": 7722750000.0
    }
  ]
}