Skip to main content

Morpho API changelog

Updated yesterday

In this changelog:

  • Field deprecation: a field that is still present in the schema but not maintained anymore. Will be removed at a later stage.

  • Field removal: a field that is or will be removed from the schema. Using this field in a query will throw an error.


Legacy rewards API deprecation

Implementation ETA - May 6th, 2026

Announced on March 13, 2026

Rewards distribution has migrated from the legacy Morpho Universal Rewards Distributor (URD) system to Merkl. All new campaigns from July 2025 onwards use Merkl exclusively.

Today, we announce the deprecation of the legacy rewards API endpoints (rewards.morpho.org/docs).

Unclaimed rewards from historical Morpho programs (pre-Merkl migration), can still be claimed via https://rewards-legacy.morpho.org/


pnl API fields removal

Implemented on April 2, 2026

Announced on February 17, 2026

Removed fields:

  • vaultPosition.state.roeUsd

  • vaultPosition.historicalState.pnl/pnlUsd/roe/roeUsd

  • vaultV2Position.roeUsd

  • vaultV2Position.historicalState.pnl/pnlUsd/roe/roeUsd

  • marketPosition.state.pnl/pnlUsd/roe/roeUsd

  • marketPosition.state.supplyPnl/supplyPnlUsd/supplyRoe/supplyRoeUsd

  • marketPosition.state.borrowRoeUsd

  • marketPosition.state.collateralPnlUsd/collateralRoeUsd

  • marketPosition.state.marginPnl/marginPnlUsd/marginRoe/marginRoeUsd

  • marketPosition.historicalState.supplyPnl/supplyPnlUsd/supplyRoe/supplyRoeUsd

  • marketPosition.historicalState.borrowPnl/borrowPnlUsd/borrowRoe/borrowRoeUsd

  • marketPosition.historicalState.collateralPnlUsd/collateralRoeUsd

  • marketPosition.historicalState.marginPnl/marginPnlUsd/marginRoe/marginRoeUsd

  • user.state.vaultsPnlUsd/vaultsRoeUsd/vaultV2sPnlUsd/vaultV2sRoeUsd/marketsPnlUsd/marketsRoeUsd/marketsSupplyPnlUsd/marketsSupplyRoeUsd/marketsBorrowPnlUsd/marketsBorrowRoeUsd/marketsCollateralPnlUsd/marketsCollateralRoeUsd/marketsMarginPnlUsd/marketsMarginRoeUsd

  • user.historicalState.vaultsPnlUsd/vaultsRoeUsd/vaultV2sPnlUsd/vaultV2sRoeUsd/marketsPnlUsd/marketsRoeUsd/marketsSupplyPnlUsd/marketsSupplyRoeUsd/marketsBorrowPnlUsd/marketsBorrowRoeUsd/marketsCollateralPnlUsd/marketsCollateralRoeUsd/marketsMarginPnlUsd/marketsMarginRoeUsd

The fields that will be kept are:

  • vaultPosition.state.pnl

  • vaultPosition.state.pnlUsd (changed definition from "p&l if each interaction was realizing profit/loss in USD" to "currently p&l in underlying assets quoted in USD at the latest price")

  • vaultPosition.state.roe

  • vaultV2Position.pnl/pnlUsd/roe

  • marketPosition.state.borrowPnl/borrowPnlUsd/borrowRoe


API fields removal

Implemented on April 2, 2026

Announced on January 26, 2026

This is the first removal notice of the Morpho API. One can expect this kind of removal notice every 6 months. This is a cleanup fields removal, removing only fields that are marked as deprecated for more than 1 year, with an alternative or a non longer maintained feature.

Fields removed & alternatives

Field

Alternative

_crossVersionVaults

NA

marketAverageApys

market(s).state

transactionByHash

NA

marketOracleAccuracy

NA

asset.historicalSpotPriceEth

NA

asset.spotPriceEth

NA

asset.riskAnalysis

NA

asset.totalSupply

NA

curators.items.url

curators.items.socials.url

market(s).allTimeApys

market(s).dailyApys

market(s).monthlyApys

market(s).quaterlyApys

market(s).weeklyApys

market(s).yearlyApys

market(s).state.allTimeBorrowApy

market(s).state.dailyApys

market(s).state.monthlyApys

market(s).state.quaterlyApys

market(s).state.weeklyApys

market(s).state.yearlyApys

market(s).collateralPrice

market(s).state.price

market(s).concentration

NA

market(s).oracleAddress

market(s).oracleFeed

market(s).oracleInfo

market(s).oracle.address

market(s).oracle.data...

market(s).oracle.data...

vault(s).dailyApy(s)

vault(s).monthlyApy(s)

vault(s).weeklyApy(s)

vault(s).pendingCaps

vault(s).state.dailyApy

vault(s).state.monthlyApy

vault(s).state.weeklyApy

vault(s).state.pendingConfigs

marketPosition(s).borrowAssets

marketPosition(s).borrowAssetsUsd

marketPosition(s).borrowShares

marketPosition(s).collateral

marketPosition(s).collateralUsd

marketPosition(s).supplyAssets

marketPosition(s).supplyAssetsUsd

marketPosition(s).supplyShares

marketPosition(s).state.borrowAssets

marketPosition(s).state.borrowAssetsUsd

marketPosition(s).state.borrowShares

marketPosition(s).state.collateral

marketPosition(s).state.collateralUsd

marketPosition(s).state.supplyAssets

marketPosition(s).state.supplyAssetsUsd

marketPosition(s).state.supplyShares

vaultPosition(s).assets

vaultPosition(s).assetsUsd

vaultPosition(s).shares

vaultPosition(s).state.assets

vaultPosition(s).state.assetsUsd

vaultPosition(s).state.shares

on MorphoChainlinkOracleV2Data

.baseVault


on MorphoChainlinkOracleV2Data

.quoteVault

on MorphoChainlinkOracleData

.vault

on MorphoChainlinkOracleV2Data

.baseOracleVault


on MorphoChainlinkOracleV2Data .quoteOracleVault

on MorphoChainlinkOracleData

.baseOracleVault

Changes represented by market(s) / vault(s) are also applied to marketByUniqueKey and vaultByAddress queries.


Limiting the maximum complexity of a query

16/10/2025

Action

GraphQL complexity details:

- Max allowed complexity: 1,000,000

- Base cost per operation: 10

- Each field adds cost; some fields declare explicit costs and/or multipliers.

Troubleshoot

Most queries are unaffected but you can check your queries' complexity in https://api.morpho.org/graphql -> the complexity number is returned as an extension.

If one of you query is above the threshold, you have the following alternatives:

- Trim the selection set: keep only fields you actually use. Prefer cheap snapshots (state.*) over histories when possible.

- Lower fan-out: reduce first (e.g., 25 or 50), then paginate.

- Split the work: fetch a light list first (IDs + a few cheap fields), then run follow-up queries for heavy history on a subset.

- Tune multipliers: for fields like currentIrmCurve(numberOfPoints: N), lower N.


Search limitation

20/09/2025

Rational

The numberOfResults was previously unbounded so the query can yield a huge amount of results which can have an impact on the performance of the Morpho API.

Action

The numberOfResults parameter in the search root resolver (previously unconstrained) will be constrained to be within [0, 1000] (its default value 5 remains unchanged)

Here is an example of search query


Fields removal

19/09/2025

Rational

Some rewards fields were wrongly computed since the Merkl integration:

yearlySupplyTokens

yearlyBorrowTokens

amountPerSuppliedToken

amountPerBorrowedToken

Action

These fields will always be set to 0 and be removed in the schema.

Troubleshoot

The Morpho API is integrating Merkl, these fields shouldn’t be used and instead supplyApy and borrowApy fields should satisfy integrators needs.

The only removed use-cases along with this 4 fields should be:

- displaying rewards for an unpriced asset

- computing the apy with a custom price (fdv feature on the Morpho app)


Did this answer your question?