Docs

Get V2 vault APY history

Historical APY for a Morpho Vault V2. The APY averaging window is derived automatically from lookback: one_day and seven_days use one_day; thirty_days uses seven_days; ninety_days, one_year, and inception use thirty_days. Points that do not have enough historical data for the derived window are omitted.

Vault selector example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11 (format: <chain_id>:<vault_address>; replace with the target vault).

Path Parameters

vault-selector*string

Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.

Format<chain_id>:<vault_address>

Query Parameters

lookback?string

Lookback period. Defaults to thirty_days. Historical sampling is selected automatically. The APY averaging window is derived automatically from lookback: one_day and seven_days use one_day; thirty_days uses seven_days; ninety_days, one_year, and inception use thirty_days. Points that do not have enough historical data for the derived window are omitted.

Value in"one_day" | "seven_days" | "thirty_days" | "ninety_days" | "one_year" | "inception"

Response Body

application/json

const baseUrl = process.env.CORE_REST_BASE_URL ?? "https://api.morpho.org";const apiKey = process.env.MORPHO_API_KEY ?? "<MORPHO_API_KEY>";const vaultSelector = "1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11";const url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/apy/history`);url.searchParams.set("lookback", "thirty_days");const response = await fetch(url, {  headers: {    accept: "application/json",    "x-api-key": apiKey,  },});if (!response.ok) throw new Error(await response.text());const body = await response.json();
{
  "params": {
    "chain_id": "1",
    "vault_address": "0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"
  },
  "data": [
    {
      "timestamp": 1729900800,
      "apy": 0.0215
    },
    {
      "timestamp": 1729987200,
      "apy": 0.0219
    }
  ],
  "last_indexed_block": "19847234"
}