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
Discovery and Listing
Vaults List
query {
vaultV2s(first: 1000, where: { chainId_in: [1, 8453] }) {
items {
address
symbol
name
listed
asset {
id
address
decimals
}
chain {
id
network
}
}
}
}Vault Metrics
Total Deposits & Assets
All Vaults
query {
vaultV2s(first: 100) {
items {
address
totalAssets
totalAssetsUsd
totalSupply
liquidityUsd
idleAssetsUsd
}
}
}Specific Vault
query {
vaultV2ByAddress(
address: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId: 1
) {
address
totalAssets
totalAssetsUsd
totalSupply
liquidity
liquidityUsd
idleAssetsUsd
}
}APY (Native + Rewards)
All Vaults
query {
vaultV2s(first: 10) {
items {
address
asset {
yield {
apr
}
}
avgNetApyExcludingRewards
avgNetApy
performanceFee
managementFee
maxRate
rewards {
asset {
address
chain {
id
}
}
supplyApr
}
}
}
}Specific Vault
query {
vaultV2ByAddress(
address: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId: 1
) {
address
asset {
yield {
apr
}
}
avgNetApyExcludingRewards
avgNetApy
performanceFee
managementFee
maxRate
rewards {
asset {
address
chain {
id
}
}
supplyApr
}
}
}Share Price (Token Value)
All Vaults
query {
vaultV2s(first: 10) {
items {
address
totalSupply
totalAssets
sharePrice
}
}
}Specific Vault
query {
vaultV2ByAddress(
address: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId: 1
) {
totalAssets
totalSupply
sharePrice
}
}Allocation & Strategy
Vault V2 allocation data is expressed via adapters, whereas Vault V1 allocations reference the underlying variable rate markets. For Vault V2, MorphoMarketV1Adapter exposes its per-market breakdown through positions.items: use each position's state.supplyAssetsUsd for market-level rows, and avoid counting both adapter.assetsUsd and the nested positions.items.state.supplyAssetsUsd in the same table. Include idleAssetsUsd when computing allocation percentages that should sum to 100%.
Current Allocations
All Vaults
query {
vaultV2s(first: 10) {
items {
address
totalAssetsUsd
totalAssets
totalSupply
idleAssets
idleAssetsUsd
adapters(first: 5) {
items {
__typename
address
assets
assetsUsd
type
... on MorphoMarketV1Adapter {
positions(first: 10) {
items {
market {
marketId
collateralAsset {
symbol
}
loanAsset {
symbol
}
}
state {
supplyAssets
supplyAssetsUsd
}
}
}
}
... on MetaMorphoAdapter {
metaMorpho {
address
name
asset {
symbol
}
}
}
... on MorphoVaultV2Adapter {
innerVault {
address
name
asset {
symbol
}
}
}
}
}
}
}
}Specific Vault
query {
vaultV2ByAddress(
address: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId: 1
) {
address
totalAssetsUsd
totalAssets
totalSupply
idleAssets
idleAssetsUsd
adapters(first: 20) {
items {
__typename
address
assets
assetsUsd
type
... on MorphoMarketV1Adapter {
positions(first: 50) {
items {
market {
marketId
collateralAsset {
symbol
}
loanAsset {
symbol
}
}
state {
supplyAssets
supplyAssetsUsd
}
}
}
}
... on MetaMorphoAdapter {
metaMorpho {
address
name
asset {
symbol
}
}
}
... on MorphoVaultV2Adapter {
innerVault {
address
name
asset {
symbol
}
}
}
}
}
}
}Strategy: Vault Queues (Morpho Vaults V1)
query {
vaults(first: 100, orderBy: TotalAssetsUsd, orderDirection: Desc) {
items {
address
state {
totalAssets
allocation {
supplyQueueIndex
withdrawQueueIndex
market {
marketId
}
}
}
}
}
}Configuration & Curation
Vault Parameters
All Vaults
query {
vaultV2s(first: 10) {
items {
address
name
listed
metadata {
description
image
}
allocators {
allocator {
address
}
}
owner {
address
}
curators {
items {
addresses {
address
}
}
}
sentinels {
sentinel {
address
}
}
timelocks {
duration
selector
functionName
}
}
}
}Specific Vault
query {
vaultV2ByAddress(
address: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId: 1
) {
address
name
listed
metadata {
description
image
}
allocators {
allocator {
address
}
}
owner {
address
}
curators {
items {
addresses {
address
}
}
}
sentinels {
sentinel {
address
}
}
timelocks {
duration
selector
functionName
}
}
}Pending Actions
query VaultV2PendingActions {
vaultV2ByAddress(
address: "VAULT_ADDRESS"
chainId: 1
) {
address
name
# pending timelocked actions
pendingConfigs(first: 100) {
items {
validAt
functionName
txHash
decodedData {
__typename
... on VaultV2SetIsAllocatorPendingData {
isAllocator
account { address }
}
... on VaultV2SetReceiveSharesGatePendingData {
receiveSharesGate
}
... on VaultV2SetSendSharesGatePendingData {
sendSharesGate
}
... on VaultV2SetReceiveAssetsGatePendingData {
receiveAssetsGate
}
... on VaultV2SetSendAssetsGatePendingData {
sendAssetsGate
}
... on VaultV2SetAdapterRegistryPendingData {
adapterRegistry
}
... on VaultV2AdapterPendingData {
adapterAddress
}
... on VaultV2TimelockPendingData {
timelock
selector
functionName
}
... on VaultV2SetPerformanceFeePendingData {
performanceFee
}
... on VaultV2SetManagementFeePendingData {
managementFee
}
... on VaultV2SetPerformanceFeeRecipientPendingData {
performanceFeeRecipient
}
... on VaultV2SetManagementFeeRecipientPendingData {
managementFeeRecipient
}
... on VaultV2IncreaseCapPendingData {
cap
config {
id
type
}
}
... on VaultV2SetForceDeallocatePenaltyPendingData {
adapterAddress
forceDeallocatePenalty
}
... on VaultV2AbdicatePendingData {
selector
functionName
}
}
}
}
}
}Risk Indicators
Vault Warnings
a. Warning type can be:
- unrecognized_deposit_asset,
- unrecognized_vault_curator.
- not_whitelisted.
b. Warning level is either:
YELLOW,RED.
query {
vaultV2s(first: 5) {
items {
name
warnings {
type
level
}
}
}
}You can read more about warnings in the dedicated section here.
Vault Curation
Note: These curator-focused endpoints currently expose Vault V1 data.
Current Vaults Pending Caps
query {
vaults {
items {
pendingCaps {
validAt
supplyCap
market {
marketId
}
}
}
}
}Current Vaults Allocators
query {
vaultV2s(first: 10) {
items {
name
allocators {
allocator {
address
}
}
}
}
}Fee Wrapper
A Fee Wrapper is a Vault V2 configured in a specific, constrained mode that enables distribution channels to add a fee layer on top of an existing Morpho Vault V2.
FeeWrapper List
query VaultV2ByAddress {
vaultV2ByAddress(
address: "0xd4468EF3745c315949a97090eD27b3F73b9b7C02"
chainId: 8453
) {
type
address
name
}
}FeeWrapper Exposure
query VaultV2ByAddress {
vaultV2ByAddress(
address: "0xd4468EF3745c315949a97090eD27b3F73b9b7C02"
chainId: 8453
) {
type
adapters {
items {
type
address
... on MorphoVaultV2Adapter {
address
innerVault {
address
name
}
}
}
}
historicalState {
sharePrice(options: {
startTimestamp: 1771015645
endTimestamp: 1771915645
interval: HOUR
}) {
x
y
}
}
}
}FeeWrapper Yield
query VaultV2ByAddress {
vaultV2ByAddress(
address: "0xd4468EF3745c315949a97090eD27b3F73b9b7C02"
chainId: 8453
) {
type
apy
avgNetApyExcludingRewards
avgNetApy
performanceFee
performanceFeeRecipient
managementFee
managementFeeRecipient
rewards {
asset {
symbol
address
}
supplyApr
}
}
}Position Tracking
Vault Depositors
Specific Vault
query {
vaultV2ByAddress(
address: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId: 1
) {
positions(first: 10, skip:0) {
items {
user {
address
}
assets
assetsUsd
shares
}
}
totalSupply
asset {
address
symbol
}
}
}Set of Vaults (Morpho Vaults V1)
Vault V2 does not yet expose an equivalent batched depositor query.
query {
vaultPositions(
first: 10
orderBy: Shares
orderDirection: Desc
where: {
vaultAddress_in: [
"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"
"0x73e65DBD630f90604062f6E02fAb9138e713edD9"
]
}
) {
items {
vault {
address
}
user {
address
}
state {
shares
assets
assetsUsd
}
}
}
}User Positions
User All Vaults Position
query GetUserVaultPositions($address: String!, $chainId: Int!) {
userByAddress(address: $address, chainId: $chainId) {
address
chain {
id
}
vaultV2Positions {
shares
vault {
address
symbol
}
}
vaultPositions {
state {
shares
}
vault {
address
symbol
}
}
}
}{
"address": "USER_ADDRESS",
"chainId": 8453
}User Account Overview
query {
userByAddress(
chainId: 1
address: "0x821880a3E2bac432d67E5155e72BB655Ef65fa5E"
) {
address
marketPositions {
market {
marketId
}
state {
borrowAssets
borrowAssetsUsd
supplyAssets
supplyAssetsUsd
}
}
vaultPositions {
vault {
address
name
}
state {
assets
assetsUsd
shares
}
}
vaultV2Positions {
vault {
address
name
}
assets
assetsUsd
shares
}
}
vaultV1Transactions(
first: 10
orderBy: Time
orderDirection: Desc
where: {
userAddress_in: ["0x821880a3E2bac432d67E5155e72BB655Ef65fa5E"]
chainId_in: [1]
}
) {
items {
txHash
timestamp
type
}
}
marketTransactions(
first: 10
orderBy: Timestamp
orderDirection: Desc
where: {
userAddress_in: ["0x821880a3E2bac432d67E5155e72BB655Ef65fa5E"]
chainId_in: [1]
}
) {
items {
txHash
timestamp
type
}
}
vaultV2transactions(
first: 10
orderBy: Time
orderDirection: Desc
where: {
userAddress_in: ["0x821880a3E2bac432d67E5155e72BB655Ef65fa5E"]
chainId_in: [1]
}
) {
items {
txHash
timestamp
type
shares
assets
vault {
address
name
}
}
}
}User Earnings
Earnings on a Specific Vault
query {
vaultV2PositionByAddress(
userAddress: "USERADDRESS"
vaultAddress: "MORPHOVAULTV2ADDRESS"
chainId: 1
) {
vault {
name
address
}
assets
assetsUsd
shares
pnl
pnlUsd
roe # time-weighted return since inception (non-annualized)
}
}Earnings Across All Vaults
query {
userByAddress(address: "USERADDRESS", chainId: 1) {
vaultV2Positions {
vault {
name
address
}
assets
assetsUsd
shares
pnl
pnlUsd
roe # time-weighted return since inception (non-annualized)
}
vaultPositions {
vault {
name
address
}
state {
assets
assetsUsd
shares
pnl
pnlUsd
roe # time-weighted return since inception (non-annualized)
}
}
}
}Transaction History
Specific Vault
query {
vaultV2transactions(
skip: 0
first: 10
orderBy: Time
orderDirection: Desc
where: {
vaultAddress_in: "0x04422053aDDbc9bB2759b248B574e3FCA76Bc145"
chainId_in: [1]
}
) {
items {
vault {
address
}
type
shares
blockNumber
timestamp
txHash
txIndex
logIndex
}
}
}Latest Transactions (All Vaults)
query {
vaultV2transactions(
first: 10
orderBy: Time
orderDirection: Desc
where: { type_in: [Deposit, Withdraw] }
) {
items {
type
shares
assets
blockNumber
timestamp
txHash
logIndex
chain {
id
network
}
vault {
address
}
data {
... on VaultV2DepositData {
sender
onBehalf
}
... on VaultV2WithdrawData {
sender
receiver
onBehalf
}
}
}
}
}Public Allocator
Configuration
query {
vaultByAddress(
address: "0x38989BBA00BDF8181F4082995b3DEAe96163aC5D"
chainId: 1
) {
address
publicAllocatorConfig {
fee
flowCaps {
market {
marketId
}
maxIn
maxOut
}
}
}
}Reallocations
query {
vaultReallocates(
first: 10
skip: 0
orderBy: Timestamp
where: {vaultAddress_in:["0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"]}
orderDirection: Desc
) {
items {
id
timestamp
hash
blockNumber
caller
shares
assets
type
vault {
address
chain {
id
}
}
market {
marketId
chain {
id
}
lltv
oracle {
address
}
irmAddress
creationBlockNumber
loanAsset {
symbol
}
collateralAsset {
symbol
}
}
}
pageInfo {
countTotal
count
skip
limit
}
}
}Historical Data
APY Historical State (Morpho Vaults V1)
query VaultApys($options: TimeseriesOptions) {
vaults(first: 10, orderBy: TotalAssetsUsd, orderDirection: Desc) {
items {
address
historicalState {
apy(options: $options) {
x
y
}
netApy(options: $options) {
x
y
}
}
}
}
}{
"options": {
"startTimestamp": 1716249600,
"endTimestamp": 1716422400,
"interval": "DAY"
}
}Historical Allocation (Morpho Vaults V1)
query Vaults($options: TimeseriesOptions) {
vaults (first: 10, skip: 0, orderBy: TotalAssetsUsd, orderDirection: Desc) {
items {
address
name
historicalState {
allocation {
market {
marketId
}
supplyAssets(options: $options) {
x
y
}
supplyAssetsUsd(options: $options) {
x
y
}
}
}
}
}
}{
"options": {
"startTimestamp": 1768211594,
"endTimestamp": 1768384394,
"interval": "DAY"
}
}