Skip to content

Morpho Vaults

How to query Morpho Vaults Data thanks to the API?

Select the query you are interested in in the list below, and paste it into the GraphQL Playground: https://api.morpho.org/graphql

Basic Queries

Morpho Vaults and their current states

query {
  vaults(first: 1000, where: { chainId_in: [1, 8453] }) {
    items {
      address
      symbol
      name
      whitelisted
      asset {
        id
        address
        decimals
      }
      chain {
        id
        network
      }
    }
  }
}

Total deposits for all vaults

query {
  vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      state {
        totalAssets
        totalAssetsUsd
        totalSupply
      }
    }
  }
}

Total deposits for a specific vault

query {
  vaultByAddress(
    address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
    chainId: 1
  ) {
    address
    state {
      totalAssets
      totalAssetsUsd
      totalSupply
    }
  }
}

APY for all vaults

query {
  vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      asset {
        yield {
          apr
        }
      }
      state {
        apy
        netApy
        netApyWithoutRewards
        dailyApy
        dailyNetApy
        weeklyApy
        weeklyNetApy
        monthlyApy
        monthlyNetApy
        rewards {
          asset {
            address
          }
          supplyApr
          yearlySupplyTokens
        }
        allocation {
          supplyAssets
          supplyAssetsUsd
          market {
            uniqueKey
            state {
              rewards {
                asset {
                  address
                }
                supplyApr
                borrowApr
              }
            }
          }
        }
      }
    }
  }
}

APY for a specific vault

query {
  vaultByAddress(
    address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
    chainId: 1
  ) {
    address
    asset {
      yield {
        apr
      }
    }
    state {
      apy
      netApy
      netApyWithoutRewards
      dailyApy
      dailyNetApy
      weeklyApy
      weeklyNetApy
      monthlyApy
      monthlyNetApy
      rewards {
        asset {
          address
        }
        supplyApr
        yearlySupplyTokens
      }
      allocation {
        supplyAssets
        supplyAssetsUsd
        market {
          uniqueKey
          state {
            rewards {
              asset {
                address
              }
              supplyApr
              borrowApr
            }
          }
        }
      }
    }
  }
}

Current vault market allocations for all vaults

query {
  vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      state {
        allocation {
          market {
            uniqueKey
            loanAsset {
              name
            }
            collateralAsset {
              name
            }
            oracleAddress
            irmAddress
            lltv
          }
          supplyCap
          supplyAssets
          supplyAssetsUsd
        }
      }
    }
  }
}

Current vault market allocations for a specific vault

query {
  vaultByAddress(
    address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
    chainId: 1
  ) {
    address
    state {
      allocation {
        market {
          uniqueKey
          loanAsset {
            name
          }
          collateralAsset {
            name
          }
          oracleAddress
          irmAddress
          lltv
        }
        supplyCap
        supplyAssets
        supplyAssetsUsd
      }
    }
  }
}

Vault token price for all vaults

query {
  vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      state {
        sharePrice
        sharePriceUsd
      }
    }
  }
}

Vault token price for a specific vault

query {
  vaultByAddress(
    address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
    chainId: 1
  ) {
    address
    state {
      sharePrice
      sharePriceUsd
    }
  }
}

Vault configuration for all vaults

query {
  vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      name
      whitelisted
      metadata {
        description
        forumLink
        image
        curators {
          image
          name
          url
        }
      }
      allocators {
        address
      }
      state {
        owner
        curator
        guardian
        timelock
      }
    }
  }
}

Vault configuration for a specific vault

query {
  vaultByAddress(
    address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
    chainId: 1
  ) {
    address
    name
    whitelisted
    metadata {
      description
      forumLink
      image
      curators {
        image
        name
        url
      }
    }
    allocators {
      address
    }
    state {
      owner
      curator
      guardian
      timelock
    }
  }
}

10 latest Morpho Vaults transactions

query {
  transactions(
    first: 10
    orderBy: Timestamp
    orderDirection: Desc
    where: { type_in: [MetaMorphoFee, MetaMorphoWithdraw, MetaMorphoWithdraw] }
  ) {
    items {
      hash
      timestamp
      type
      chain {
        id
        network
      }
      user {
        address
      }
      data {
        ... on VaultTransactionData {
          shares
          assets
          vault {
            address
          }
        }
        ... on MarketTransferTransactionData {
          shares
          market {
            uniqueKey
          }
        }
      }
    }
  }
}

Depositors for a set of vaults

query {
  vaultPositions(
    first: 10
    orderBy: Shares
    orderDirection: Desc
    where: {
      vaultAddress_in: [
        "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
        "0x73e65DBD630f90604062f6E02fAb9138e713edD9"
      ]
    }
  ) {
    items {
      vault {
        address
      }
      user {
        address
      }
      state {
        shares
        assets
        assetsUsd
      }
    }
  }
}

10 biggest positions for a specific vault

query {
  vaultPositions(
    first: 10
    orderBy: Shares
    orderDirection: Desc
    where: { vaultAddress_in: ["0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"] }
  ) {
    items {
      user {
        address
      }
      state {
        shares
        assets
        assetsUsd
      }
    }
  }
}

Transaction history for a specific vault

query {
  transactions(
    first: 10
    orderBy: Timestamp
    orderDirection: Desc
    where: { vaultAddress_in: ["0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"] }
  ) {
    items {
      blockNumber
      hash
      type
      user {
        address
      }
    }
  }
}

Vault queues for all vaults

query {
  vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      state {
        totalAssets
        lastTotalAssets
        allocation {
          supplyQueueIndex
          withdrawQueueIndex
          market {
            uniqueKey
          }
        }
      }
    }
  }
}

Vault queues for a specific vault

query {
  vaultByAddress(
    address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
    chainId: 1
  ) {
    address
    state {
      totalAssets
      lastTotalAssets
      allocation {
        supplyQueueIndex
        withdrawQueueIndex
        market {
          uniqueKey
        }
      }
    }
  }
}

User's vaults positions

query {
  userByAddress(
    chainId: 1
    address: "0x821880a3E2bac432d67E5155e72BB655Ef65fa5E"
  ) {
    address
    marketPositions {
      market {
        uniqueKey
      }
      borrowAssets
      borrowAssetsUsd
      supplyAssets
      supplyAssetsUsd
    }
    vaultPositions {
      vault {
        address
        name
      }
      assets
      assetsUsd
      shares
    }
    transactions {
      hash
      timestamp
      type
    }
  }
}

User all vaults position

query GetAllUserPositions($chainId: Int!, $userAddress: String!) {
  vaultPositions(
    where: {
      chainId_in: [$chainId]
      shares_gte: 0
      userAddress_in: [$userAddress]
    }
  ) {
    items {
      id
      assets
      vault {
        id
        address
      }
    }
  }
}

Vaults potential warnings

a. Warnings type are:

  • unrecognized_deposit_asset,
  • unrecognized_vault_curator.
  • not_whitelisted.

b. Warning level is either:

  • YELLOW,
  • RED.
query {
  vaults {
    items {
      name
      warnings {
        type
        level
      }
    }
  }
}

Config of the Public Allocator for a Morpho Vault

query {
  vaultByAddress(
    address: "0x38989BBA00BDF8181F4082995b3DEAe96163aC5D"
    chainId: 1
  ) {
    address
    publicAllocatorConfig {
      fee
      flowCaps {
        market {
          uniqueKey
        }
        maxIn
        maxOut
      }
    }
  }
}

Reallocations made by a Morpho Vault

query {
  vaultReallocates(
   first: 10
   skip: 0
   orderBy: Timestamp
   where: {vaultAddress_in:["0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"]}
   orderDirection: Desc
  ) {
   items {
    id
    timestamp
    hash
    blockNumber
    caller
    shares
    assets
    type
    vault {
     id
     chain {
      id
     }
    }
    market {
     id
     uniqueKey
     lltv
     oracleAddress
     irmAddress
     creationBlockNumber
     loanAsset {
      symbol
     }
     collateralAsset {
      symbol
     }
    }
   }
   pageInfo {
    countTotal
    count
    skip
    limit
   }
  }
 }

Current vaults' pending caps

query {
  vaults {
    items {
      pendingCaps {
        validAt
        supplyCap
        market {
          uniqueKey
        }
      }
    }
  }
}

Current vaults' allocators

query {
  vaults {
    items {
      name
      allocators {
        address
      }
    }
  }
}

Advanced Queries with variables

Historical vaults APY for all vaults

query VaultApys($options: TimeseriesOptions) {
  vaults(first: 10, orderBy: TotalAssetsUsd, orderDirection: Desc) {
    items {
      address
      historicalState {
        apy(options: $options) {
          x
          y
        }
        netApy(options: $options) {
          x
          y
        }
      }
    }
  }
}

Historical vaults APY for a specific vault

query VaultApys($options: TimeseriesOptions) {
  vaultByAddress(address: "0x73e65DBD630f90604062f6E02fAb9138e713edD9") {
    address
    historicalState {
      apy(options: $options) {
        x
        y
      }
      netApy(options: $options) {
        x
        y
      }
    }
  }
}
{
  "options": {
    "startTimestamp": 1716249600,
		"endTimestamp": 1716422400,
		"interval": "DAY"
  }
}

Example: