APY Breakdown

See how yield flows from Morpho markets through the fee wrapper to end users, with fees deducted at each layer.

Calculate APY

Enter a fee wrapper address to see the full yield breakdown

The deployed fee wrapper to analyze

Include Rewards

Rewards pass through to depositors

Note: Newly deployed fee wrappers may take up to 5 minutes to appear in the Morpho API. If you see "No results", please wait and try again.

Integration Guide

Exact query and formulas used in this page so partners can integrate the same post-fee APY logic directly. No on-chain reads needed — all data comes from the API.

1) Query the Morpho API

Endpoint: POST https://api.morpho.org/graphql

Supported chain IDs: 1, 8453, 42161, 10, 137, 59144

Use the fee wrapper address directly (not the underlying vault address).

query FeeWrapperAPY($feeWrapper: String!, $chainId: Int!) {
  feeWrapper: vaultV2ByAddress(address: $feeWrapper, chainId: $chainId) {
    avgNetApy
    avgNetApyExcludingRewards
    performanceFee
    managementFee
    name
    symbol
    rewards {
      supplyApr
      asset { address, symbol }
    }
    adapters {
      items {
        type
        address
        ... on MorphoVaultV2Adapter {
          innerVault {
            address
            name
            avgNetApyExcludingRewards
            performanceFee
            managementFee
            rewards {
              supplyApr
              asset { address, symbol }
            }
          }
        }
      }
    }
  }
}

2) Compute Net APY

// Primary approach — use the fee wrapper's own fields directly:
// netApyExclRewards = feeWrapper.avgNetApyExcludingRewards
// rewardsApr        = sum(innerVault.rewards[].supplyApr)
// netApy            = netApyExclRewards + rewardsApr

// Advanced — manual breakdown from inner vault post-fee data:
// adapterYield = innerVault.avgNetApyExcludingRewards  (already post inner vault fees)
// Rewards      = innerVault.rewards[].supplyApr         (pass through to depositors)

// Back-calculate gross for display:
// preFee   = adapterYield + innerVault.managementFee
// grossApy = preFee > 0 ? preFee / (1 - innerVault.performanceFee) : preFee

wrapperPerfFeeDeduction = max(adapterYield, 0) * feeWrapper.performanceFee
nativeYield = adapterYield - wrapperPerfFeeDeduction - feeWrapper.managementFee
rewardsApr = sum(innerVault.rewards[].supplyApr)
netApy = nativeYield + rewardsApr

avgNetApyExcludingRewards is the post-fee yield (after performance and management fees). For simple integrations, use feeWrapper.avgNetApyExcludingRewards directly. For a full breakdown, use the inner vault's avgNetApyExcludingRewards and back-calculate the gross. Rewards are sourced from the inner vault (innerVault.rewards[]) — fee wrappers never have rewards in the API; rewards are distributed via Merkl based on the inner vault's market positions.

3) Notes on API fields

avgNetApyExcludingRewards is the recommended field — it reflects yield after vault fees but before external rewards. The deprecated avgApy (gross, pre-fee) should no longer be used.

The fee wrapper also exposes avgNetApy (includes rewards) and avgNetApyExcludingRewards directly. For newly deployed fee wrappers, these fields may be noisy or zero until sufficient history accumulates.