{"components":{"schemas":{"BlockTimestampResponse":{"properties":{"data":{"description":"Block timestamp.","properties":{"block_hash":{"description":"Block hash.","type":"string"},"block_number":{"description":"Block number.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp, in unix seconds.","exclusiveMinimum":true,"minimum":0,"type":"integer"}},"required":["chain_id","block_hash","timestamp"],"type":"object"}},"required":["data"],"type":"object"},"ChainsResponse":{"properties":{"data":{"description":"Supported EVM chains.","items":{"properties":{"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Last block fully processed by all realtime service jobs for this chain. Null when no realtime processing has been recorded yet.","internalType":"bigint","nullable":true,"type":"string"},"name":{"description":"Human-readable chain name.","type":"string"},"supported_protocols":{"description":"Morpho protocols deployed on the chain.","items":{"enum":["blue","vault-v1","vault-v2","midnight","preliquidation"],"type":"string"},"type":"array"}},"required":["chain_id","name","supported_protocols"],"type":"object"},"type":"array"}},"required":["data"],"type":"object"},"CoreCuratorDetailsResponse":{"properties":{"data":{"description":"Curator details resolved by a chain-specific on-chain curator address.","properties":{"chain_id":{"description":"Chain of the selected curator address.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"curator_address":{"description":"Checksummed on-chain curator role address selected by the path.","type":"string"},"curators":{"description":"Every curator registry profile registered to this chain and address, sorted by registry `id`; empty when none.","items":{"properties":{"id":{"description":"Stable curator registry ID; distinguishes multiple profiles registered to one address.","type":"string"},"logo_uri":{"description":"Editorial curator logo URI from the registry. Null when the registry has no image.","nullable":true,"type":"string"},"name":{"description":"Editorial curator display name from the registry.","type":"string"},"socials":{"description":"Editorial curator social links from the registry; empty when none.","items":{"properties":{"type":{"description":"Social-link type key from the curator registry.","type":"string"},"url":{"description":"Social link URL.","type":"string"}},"required":["type","url"],"type":"object"},"type":"array"}},"required":["id","name","logo_uri","socials"],"type":"object"},"type":"array"}},"required":["chain_id","curator_address","curators"],"type":"object"}},"required":["data"],"type":"object"},"CoreCuratorListResponse":{"properties":{"cursor":{"description":"Opaque cursor for the next page. Null on the last page.","nullable":true,"type":"string"},"data":{"description":"Page of curator registry identities, sorted by `curator_id`.","items":{"properties":{"addresses":{"description":"Every address registered to the curator on a chain Core exposes, one entry per chain and address, sorted by chain then address. Not narrowed by `chain_ids`.","items":{"properties":{"chain_id":{"description":"Chain the curator address is registered on.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"curator_address":{"description":"Checksummed address registered to the curator on this chain. Pass `{chain_id}:{curator_address}` to `GET /v0/curators/{curator-selector}/details` for socials.","type":"string"}},"required":["chain_id","curator_address"],"type":"object"},"type":"array"},"curator_id":{"description":"Stable curator registry ID. Approved Global registry metadata, not an on-chain fact; matches `id` on the curator details route.","type":"string"},"image_url":{"description":"Editorial curator logo URL from the registry. Null when the registry has no image.","nullable":true,"type":"string"},"name":{"description":"Editorial curator display name from the registry.","type":"string"},"verified":{"description":"Registry verification flag set by Morpho. Approved Global registry metadata, not an on-chain fact.","type":"boolean"}},"required":["curator_id","name","image_url","verified","addresses"],"type":"object"},"type":"array"}},"required":["data","cursor"],"type":"object"},"MarketApyAveragesResponseDto":{"properties":{"data":{"description":"Morpho Blue market APY averages.","properties":{"borrow_apy_averages":{"description":"Average borrow APYs excluding rewards.","properties":{"1y":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"24h":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"30d":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"6h":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"7d":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"90d":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"}},"required":["6h","24h","7d","30d","90d","1y"],"type":"object"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute these APY averages.","internalType":"bigint","type":"string"},"market_id":{"description":"Morpho Blue market id (bytes32 unique key).","type":"string"},"supply_apy_averages":{"description":"Average supply APYs excluding rewards.","properties":{"1y":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"24h":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"30d":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"6h":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"7d":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"},"90d":{"description":"Average APY as a decimal rate. Null when historical snapshots are not available for the full window.","nullable":true,"type":"number"}},"required":["6h","24h","7d","30d","90d","1y"],"type":"object"}},"required":["chain_id","market_id","supply_apy_averages","borrow_apy_averages","last_indexed_block"],"type":"object"}},"required":["data"],"type":"object"},"MarketApyHistoryResponse":{"properties":{"data":{"description":"Morpho Blue market historical APY points.","items":{"properties":{"borrow_apy":{"description":"Historical borrow APY.","nullable":true,"type":"number"},"supply_apy":{"description":"Historical supply APY.","nullable":true,"type":"number"},"timestamp":{"description":"Historical sample timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","supply_apy","borrow_apy"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical APY.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the market selector.","pattern":"^\\d+$","type":"string"},"market_id":{"description":"Morpho Blue market id from the market selector.","type":"string"}},"required":["chain_id","market_id"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"MarketLiquidityResponse":{"properties":{"data":{"description":"Morpho Blue market and Public Allocator V2 liquidity.","properties":{"borrow_amount_to_target_utilization":{"description":"Additional borrow capacity to target utilization, including Public Allocator V2 reallocations, in loan token native units.","internalType":"bigint","type":"string"},"last_indexed_block":{"description":"Indexer tip block number when serving the response.","internalType":"bigint","type":"string"},"market_liquidity":{"description":"Market liquidity in loan token native units.","internalType":"bigint","type":"string"},"reallocatable_liquidity":{"description":"Liquidity available through Public Allocator V2 in loan token native units.","internalType":"bigint","type":"string"}},"required":["market_liquidity","reallocatable_liquidity","borrow_amount_to_target_utilization","last_indexed_block"],"type":"object"}},"required":["data"],"type":"object"},"MarketListResponse":{"properties":{"cursor":{"description":"Opaque cursor. Null on the last page.","nullable":true,"type":"string"},"data":{"items":{"properties":{"chain_id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"collateral_token":{"type":"string"},"creation_block_number":{"internalType":"bigint","type":"string"},"creation_timestamp":{"minimum":0,"type":"integer"},"irm_address":{"type":"string"},"lltv_wad":{"description":"Liquidation LTV in WAD (1e18 = 100%).","internalType":"bigint","type":"string"},"loan_token":{"type":"string"},"market_id":{"description":"Morpho Blue market id. Use <chain_id>:<market_id> for resource selectors, for example 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","type":"string"},"oracle_address":{"type":"string"}},"required":["chain_id","market_id","loan_token","collateral_token","oracle_address","irm_address","lltv_wad","creation_block_number","creation_timestamp"],"type":"object"},"type":"array"}},"required":["data","cursor"],"type":"object"},"MarketPublicAllocatorVaultsResponse":{"properties":{"data":{"description":"Candidate vault and adapter rows. Order is unspecified.","items":{"properties":{"absolute_cap":{"description":"Absolute cap from the vault's Public Allocator V2 market config for this adapter, in loan-token native units. Not the vault's own Vault V2 cap.","internalType":"bigint","type":"string"},"adapter_address":{"description":"Adapter contract address.","type":"string"},"can_pull_from_idle":{"description":"Whether the Public Allocator V2 can pull idle assets from this vault.","type":"boolean"},"can_pull_from_market":{"description":"Whether the Public Allocator V2 can pull assets from this market.","type":"boolean"},"cap_id":{"description":"Adapter-qualified market cap identifier (bytes32) from the vault's Public Allocator V2 config for this adapter.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"penalty_wad":{"description":"Public Allocator V2 penalty, WAD-scaled (1e18 = 100%).","internalType":"bigint","type":"string"},"public_allocator_address":{"description":"Public Allocator V2 contract address.","type":"string"},"vault_address":{"description":"Vault V2 contract address.","type":"string"}},"required":["vault_address","adapter_address","cap_id","can_pull_from_market","can_pull_from_idle","public_allocator_address","absolute_cap","penalty_wad"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Indexer tip block number when serving the response.","internalType":"bigint","type":"string"}},"required":["data","last_indexed_block"],"type":"object"},"MarketRootResponse":{"properties":{"data":{"properties":{"chain_id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"collateral_token":{"type":"string"},"creation_block_number":{"internalType":"bigint","type":"string"},"irm_address":{"type":"string"},"lltv_wad":{"description":"Liquidation LTV in WAD (1e18 = 100%).","internalType":"bigint","type":"string"},"loan_token":{"type":"string"},"market_id":{"type":"string"},"oracle_address":{"type":"string"}},"required":["chain_id","market_id","loan_token","collateral_token","oracle_address","irm_address","lltv_wad","creation_block_number"],"type":"object"}},"required":["data"],"type":"object"},"MarketStateHistoryResponse":{"properties":{"data":{"description":"Morpho Blue market historical state points. Missing snapshots are omitted from the series; available snapshots with null collateral totals are retained.","items":{"properties":{"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"},"total_borrow_assets":{"description":"Total borrowed assets in loan token units.","internalType":"bigint","type":"string"},"total_borrow_shares":{"description":"Total borrow shares.","internalType":"bigint","type":"string"},"total_collateral_assets":{"description":"Total collateral in raw collateral-token asset units (not decimal-adjusted). Null when unavailable from the source, including markets without a collateral token (zero address).","internalType":"bigint","nullable":true,"type":"string"},"total_supply_assets":{"description":"Total supplied assets in loan token units.","internalType":"bigint","type":"string"},"total_supply_shares":{"description":"Total supply shares.","internalType":"bigint","type":"string"}},"required":["timestamp","total_supply_assets","total_supply_shares","total_borrow_assets","total_borrow_shares","total_collateral_assets"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical state.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the market selector.","pattern":"^\\d+$","type":"string"},"market_id":{"description":"Morpho Blue market id from the market selector.","type":"string"}},"required":["chain_id","market_id"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"MarketStateResponse":{"properties":{"data":{"description":"Morpho Blue market live state.","properties":{"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"fee_wad":{"description":"Protocol fee scaled by WAD (1e18).","internalType":"bigint","type":"string"},"last_accrual_timestamp":{"description":"Latest accrual timestamp, in Unix seconds.","minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this market state.","internalType":"bigint","type":"string"},"market_id":{"description":"Morpho Blue market id (bytes32 unique key).","type":"string"},"rate_at_target_per_second_wad":{"description":"AdaptiveCurveIRM borrow rate per second at target utilization (90%), scaled by WAD (1e18). It describes the market at the same moment as the totals in this response: on indexed responses both are accrued forward from `last_accrual_timestamp` (Midx to the request time, realtime to its indexed block), and on the RPC fallback both are the values stored on-chain at `last_accrual_timestamp`. Null when the market's IRM is not the chain's AdaptiveCurveIRM (including markets with no IRM) or no rate at target is stored for the market.","internalType":"bigint","nullable":true,"type":"string"},"total_borrow_assets":{"description":"Total borrowed assets in loan token units.","internalType":"bigint","type":"string"},"total_borrow_shares":{"description":"Total borrow shares.","internalType":"bigint","type":"string"},"total_supply_assets":{"description":"Total supplied assets in loan token units.","internalType":"bigint","type":"string"},"total_supply_shares":{"description":"Total supply shares.","internalType":"bigint","type":"string"}},"required":["chain_id","market_id","last_indexed_block","last_accrual_timestamp","total_supply_assets","total_supply_shares","total_borrow_assets","total_borrow_shares","fee_wad","rate_at_target_per_second_wad"],"type":"object"}},"required":["data"],"type":"object"},"OracleStateResponse":{"properties":{"data":{"description":"Oracle live state.","properties":{"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this oracle state.","internalType":"bigint","type":"string"},"last_updated_at":{"description":"Unix timestamp (seconds) at which the oracle price was last updated onchain.","internalType":"bigint","nullable":true,"type":"string"},"oracle_address":{"description":"Oracle contract address.","type":"string"},"price":{"description":"Oracle quote, null when the latest quote is unavailable.","internalType":"bigint","nullable":true,"type":"string"}},"required":["oracle_address","chain_id"],"type":"object"}},"required":["data"],"type":"object"},"TokenPriceResponse":{"properties":{"data":{"description":"Token spot price in USD. Nullable price fields indicate that the known token cannot currently be priced.","properties":{"address":{"description":"ERC-20 token contract address.","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"price":{"description":"Spot price in USD. Null when the API cannot currently price the known token.","nullable":true,"type":"number"},"provider":{"description":"Upstream price data provider. Null when no price point is available.","nullable":true,"type":"string"},"timestamp":{"description":"Unix timestamp (seconds) of the price point. Null when no price point is available.","internalType":"bigint","nullable":true,"type":"string"}},"required":["chain_id","address","price","provider"],"type":"object"}},"required":["data"],"type":"object"},"TokenRootResponse":{"properties":{"data":{"description":"ERC-20 token identity and metadata.","properties":{"address":{"description":"ERC-20 token contract address.","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"decimals":{"description":"ERC-20 token decimals.","maximum":255,"minimum":0,"type":"integer"},"logo_uri":{"description":"Token logo URI.","nullable":true,"type":"string"},"name":{"description":"ERC-20 token name. May be overridden by the Morpho team.","nullable":true,"type":"string"},"symbol":{"description":"ERC-20 token symbol. May be overridden by the Morpho team.","nullable":true,"type":"string"},"tags":{"description":"Curated asset tags.","items":{"type":"string"},"nullable":true,"type":"array"}},"required":["chain_id","address","name","symbol","decimals","logo_uri","tags"],"type":"object"}},"required":["data"],"type":"object"},"UserMarketPositionHistoryResponse":{"properties":{"data":{"description":"User's Morpho Blue market historical position points.","items":{"properties":{"borrow_shares":{"description":"Borrow shares owed, denominated in loan token shares.","internalType":"bigint","type":"string"},"collateral_assets":{"description":"Collateral amount deposited, in collateral token units.","internalType":"bigint","type":"string"},"supply_shares":{"description":"Supply shares held, denominated in loan token shares.","internalType":"bigint","type":"string"},"timestamp":{"description":"Historical sample timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","collateral_assets","supply_shares","borrow_shares"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical position.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the market selector.","pattern":"^\\d+$","type":"string"},"market_id":{"description":"Morpho Blue market id from the market selector.","type":"string"},"user_address":{"description":"Position owner address from the user address parameter.","type":"string"}},"required":["chain_id","market_id","user_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"UserMarketPositionPerformanceResponse":{"properties":{"data":{"properties":{"accounting_method":{"enum":["average_cost"],"type":"string"},"borrow_cost_on_capital":{"nullable":true,"type":"number"},"borrow_net_cost_assets":{"description":"Signed realized and unrealized borrow cost in loan-token units; positive means cost.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Minimum of the market-state and position-performance sync blocks.","internalType":"bigint","type":"string"},"market_id":{"description":"Morpho Blue market identifier.","type":"string"},"supply_net_earnings_assets":{"description":"Signed realized and unrealized supply earnings in loan-token units.","internalType":"bigint","type":"string"},"supply_return_on_capital":{"nullable":true,"type":"number"},"user_address":{"description":"Position owner address.","type":"string"}},"required":["chain_id","market_id","user_address","accounting_method","supply_return_on_capital","borrow_cost_on_capital"],"type":"object"}},"required":["data"],"type":"object"},"UserMarketPositionResponse":{"properties":{"data":{"description":"User's live Morpho Blue market position.","properties":{"borrow_shares":{"description":"Borrow shares owed, denominated in loan token shares.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"collateral_assets":{"description":"Collateral amount deposited, in collateral token units.","internalType":"bigint","type":"string"},"last_indexed_block":{"description":"Latest indexed block used to compute this position.","internalType":"bigint","type":"string"},"market_id":{"description":"Morpho Blue market identifier.","type":"string"},"supply_shares":{"description":"Supply shares held, denominated in loan token shares.","internalType":"bigint","type":"string"},"user_address":{"description":"Position owner address.","type":"string"}},"required":["chain_id","market_id","user_address","last_indexed_block","collateral_assets","supply_shares","borrow_shares"],"type":"object"}},"required":["data"],"type":"object"},"UserMarketPositionsResponse":{"properties":{"cursor":{"description":"Opaque cursor. Null on the last page.","nullable":true,"type":"string"},"data":{"description":"User Morpho Blue market positions.","items":{"properties":{"borrow_shares":{"description":"Borrow shares owed, denominated in loan token shares.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"collateral_assets":{"description":"Collateral deposited, in collateral token units.","internalType":"bigint","type":"string"},"market_id":{"description":"Morpho Blue market identifier.","type":"string"},"supply_shares":{"description":"Supply shares held, denominated in loan token shares.","internalType":"bigint","type":"string"}},"required":["chain_id","market_id","supply_shares","borrow_shares","collateral_assets"],"type":"object"},"type":"array"},"params":{"properties":{"user_address":{"description":"Position owner address.","type":"string"}},"required":["user_address"],"type":"object"}},"required":["params","data","cursor"],"type":"object"},"UserVaultPositionsResponse":{"properties":{"cursor":{"description":"Opaque seek cursor for a weakly consistent continuation page. Null on the last page. Do not parse or modify it.","nullable":true,"type":"string"},"data":{"description":"User vault positions.","items":{"properties":{"assets":{"description":"Value of vault shares held, in underlying token units. Computed from the sampled share price and rounded down.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Indexer freshness tip for this chain, or the row source block when the tip is unavailable. Null only when neither exists. This is not a snapshot boundary for pagination.","internalType":"bigint","nullable":true,"type":"string"},"shares":{"description":"Amount of vault shares.","internalType":"bigint","type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["chain_id","vault_address","last_indexed_block","shares","assets"],"type":"object"},"type":"array"},"params":{"properties":{"user_address":{"description":"Position owner address.","type":"string"}},"required":["user_address"],"type":"object"}},"required":["params","data","cursor"],"type":"object"},"UserVaultV1PositionActivityResponse":{"properties":{"cursor":{"description":"Opaque pagination cursor. Null on the last page.","nullable":true,"type":"string"},"data":{"description":"Share balance events, ordered by block number then log index, most recent first.","items":{"oneOf":[{"properties":{"block_number":{"description":"Block in which the event occurred.","internalType":"bigint","type":"string"},"data":{"properties":{"assets":{"description":"Deposited assets in underlying token units, taken from the log.","internalType":"bigint","type":"string"},"on_behalf":{"description":"Address credited with the minted shares (the Deposit event's owner). Always the requested user on this endpoint.","type":"string"},"sender":{"description":"Address that called deposit or mint and supplied the assets (the Deposit event's sender). May differ from the requested user, for example a bundler or router.","type":"string"},"shares":{"description":"Magnitude of the share balance change. Never negative; direction comes from the event type.","internalType":"bigint","type":"string"}},"required":["sender","on_behalf","shares","assets"],"type":"object"},"log_index":{"description":"Index of the event log within the transaction.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["deposit"],"type":"string"}},"required":["tx_hash","log_index","timestamp","type","data","block_number"],"type":"object"},{"properties":{"block_number":{"description":"Block in which the event occurred.","internalType":"bigint","type":"string"},"data":{"properties":{"assets":{"description":"Withdrawn assets in underlying token units, taken from the log.","internalType":"bigint","type":"string"},"on_behalf":{"description":"Address whose shares were burned (the Withdraw event's owner). Always the requested user on this endpoint.","type":"string"},"receiver":{"description":"Address that received the withdrawn assets (the Withdraw event's receiver). May differ from the requested user.","type":"string"},"sender":{"description":"Address that called withdraw or redeem (the Withdraw event's sender). May differ from the requested user when an approved spender or bundler acts for them.","type":"string"},"shares":{"description":"Magnitude of the share balance change. Never negative; direction comes from the event type.","internalType":"bigint","type":"string"}},"required":["sender","receiver","on_behalf","shares","assets"],"type":"object"},"log_index":{"description":"Index of the event log within the transaction.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["withdraw"],"type":"string"}},"required":["tx_hash","log_index","timestamp","type","data","block_number"],"type":"object"},{"properties":{"block_number":{"description":"Block in which the event occurred.","internalType":"bigint","type":"string"},"data":{"properties":{"from_address":{"description":"Sender of the shares.","type":"string"},"shares":{"description":"Magnitude of the share balance change. Never negative; direction comes from the event type.","internalType":"bigint","type":"string"}},"required":["from_address","shares"],"type":"object"},"log_index":{"description":"Index of the event log within the transaction.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["shares_transfer_in"],"type":"string"}},"required":["tx_hash","log_index","timestamp","type","data","block_number"],"type":"object"},{"properties":{"block_number":{"description":"Block in which the event occurred.","internalType":"bigint","type":"string"},"data":{"properties":{"shares":{"description":"Magnitude of the share balance change. Never negative; direction comes from the event type.","internalType":"bigint","type":"string"},"to_address":{"description":"Recipient of the shares.","type":"string"}},"required":["to_address","shares"],"type":"object"},"log_index":{"description":"Index of the event log within the transaction.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["shares_transfer_out"],"type":"string"}},"required":["tx_hash","log_index","timestamp","type","data","block_number"],"type":"object"}]},"type":"array"},"last_indexed_block":{"description":"Latest indexed block covered by this page. Pinned to the first page's indexer tip for every continuation page, so a complete walk to a null cursor reconciles against a single watermark.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"user_address":{"description":"Position owner address from the user address parameter.","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address","user_address"],"type":"object"}},"required":["params","data","cursor","last_indexed_block"],"type":"object"},"UserVaultV1PositionHistoryResponse":{"properties":{"data":{"description":"User's Vault V1 historical position points.","items":{"properties":{"assets":{"description":"Value of vault shares held, in underlying token units.","internalType":"bigint","type":"string"},"shares":{"description":"Amount of vault shares held.","internalType":"bigint","type":"string"},"timestamp":{"description":"Historical sample timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","shares","assets"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical position.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"user_address":{"description":"Position owner address from the user address parameter.","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address","user_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"UserVaultV1PositionPerformanceResponse":{"properties":{"data":{"description":"User's Vault V1 position performance.","properties":{"accounting_method":{"description":"Accounting method used to compute net earnings and return on capital.","enum":["average_cost"],"type":"string"},"as_of":{"description":"Present only when `as_of_date` is set. Historical valuation through the UTC start-of-day cutoff of `as_of_date`. For an open position, valuation uses the last hourly share-price history point or the user's last position change, whichever is later, at or before the cutoff; it is not block-exact, and the gap between the cutoff and `timestamp` indicates the age of the valuation point. For a position fully exited before the cutoff, `timestamp` is its last position change and the value is final, so that gap does not indicate staleness.","properties":{"timestamp":{"description":"Effective valuation timestamp (Unix seconds) used for the historical result; null only when the user had no position before the cutoff and the vault has no share-price history at or before it.","nullable":true,"type":"integer"}},"required":["timestamp"],"type":"object"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this performance snapshot.","internalType":"bigint","type":"string"},"net_earnings_assets":{"description":"Realized + unrealized earnings of the position, in underlying token units; measured up to the cutoff when `as_of_date` is set.","internalType":"bigint","type":"string"},"return_on_capital":{"description":"Time-weighted return of the position over its holding period, non-annualized; measured up to the cutoff when `as_of_date` is set.","nullable":true,"type":"number"},"user_address":{"description":"Position owner address.","type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["user_address","chain_id","vault_address","accounting_method","return_on_capital"],"type":"object"}},"required":["data"],"type":"object"},"UserVaultV1PositionResponse":{"properties":{"data":{"description":"User's live Vault V1 position.","properties":{"assets":{"description":"Value of vault shares held, in underlying token units.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this position.","internalType":"bigint","type":"string"},"shares":{"description":"Amount of vault shares.","internalType":"bigint","type":"string"},"user_address":{"description":"Position owner address.","type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["user_address","chain_id","vault_address"],"type":"object"}},"required":["data"],"type":"object"},"UserVaultV2PositionActivityResponse":{"properties":{"cursor":{"description":"Opaque pagination cursor. Null on the last page.","nullable":true,"type":"string"},"data":{"description":"Events that changed the user's share balance in this Vault V2, newest first.","items":{"oneOf":[{"properties":{"block_number":{"description":"Block that contains the event log.","internalType":"bigint","type":"string"},"data":{"properties":{"assets":{"description":"Assets deposited, in underlying token units.","internalType":"bigint","type":"string"},"shares":{"description":"Vault shares minted to the user.","internalType":"bigint","type":"string"}},"required":["shares","assets"],"type":"object"},"log_index":{"description":"Index of the event log within its block.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event log.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["deposit"],"type":"string"}},"required":["type","data","tx_hash","log_index","timestamp","block_number"],"type":"object"},{"properties":{"block_number":{"description":"Block that contains the event log.","internalType":"bigint","type":"string"},"data":{"properties":{"assets":{"description":"Assets withdrawn, in underlying token units.","internalType":"bigint","type":"string"},"shares":{"description":"Vault shares burned from the user.","internalType":"bigint","type":"string"}},"required":["shares","assets"],"type":"object"},"log_index":{"description":"Index of the event log within its block.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event log.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["withdraw"],"type":"string"}},"required":["type","data","tx_hash","log_index","timestamp","block_number"],"type":"object"},{"properties":{"block_number":{"description":"Block that contains the event log.","internalType":"bigint","type":"string"},"data":{"properties":{"from_address":{"description":"Address the vault shares were sent from.","type":"string"},"shares":{"description":"Vault shares received by the user.","internalType":"bigint","type":"string"}},"required":["from_address","shares"],"type":"object"},"log_index":{"description":"Index of the event log within its block.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event log.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["shares_transfer_in"],"type":"string"}},"required":["type","data","tx_hash","log_index","timestamp","block_number"],"type":"object"},{"properties":{"block_number":{"description":"Block that contains the event log.","internalType":"bigint","type":"string"},"data":{"properties":{"shares":{"description":"Vault shares sent by the user.","internalType":"bigint","type":"string"},"to_address":{"description":"Address the vault shares were sent to.","type":"string"}},"required":["to_address","shares"],"type":"object"},"log_index":{"description":"Index of the event log within its block.","minimum":0,"type":"integer"},"timestamp":{"description":"Block timestamp in Unix seconds.","minimum":0,"type":"integer"},"tx_hash":{"description":"Hash of the transaction that emitted the event log.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"type":{"enum":["shares_transfer_out"],"type":"string"}},"required":["type","data","tx_hash","log_index","timestamp","block_number"],"type":"object"}]},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this activity page.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"user_address":{"description":"Position owner address from the user address parameter.","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address","user_address"],"type":"object"}},"required":["params","data","cursor","last_indexed_block"],"type":"object"},"UserVaultV2PositionHistoryResponse":{"properties":{"data":{"description":"User's Vault V2 historical position points.","items":{"properties":{"assets":{"description":"Value of vault shares held, in underlying token units.","internalType":"bigint","type":"string"},"shares":{"description":"Amount of vault shares held.","internalType":"bigint","type":"string"},"timestamp":{"description":"Historical sample timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","shares","assets"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical position.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"user_address":{"description":"Position owner address from the user address parameter.","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address","user_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"UserVaultV2PositionPerformanceResponse":{"properties":{"data":{"description":"User's Vault V2 position performance.","properties":{"accounting_method":{"description":"Accounting method used to compute net earnings and return on capital.","enum":["average_cost"],"type":"string"},"as_of":{"description":"Present only when `as_of_date` is set. Historical valuation through the UTC start-of-day cutoff of `as_of_date`. For an open position, valuation uses the last hourly share-price history point or the user's last position change, whichever is later, at or before the cutoff; it is not block-exact, and the gap between the cutoff and `timestamp` indicates the age of the valuation point. For a position fully exited before the cutoff, `timestamp` is its last position change and the value is final, so that gap does not indicate staleness.","properties":{"timestamp":{"description":"Effective valuation timestamp (Unix seconds) used for the historical result; null only when the user had no position before the cutoff and the vault has no share-price history at or before it.","nullable":true,"type":"integer"}},"required":["timestamp"],"type":"object"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this performance snapshot.","internalType":"bigint","type":"string"},"net_earnings_assets":{"description":"Realized + unrealized earnings of the position, in underlying token units; measured up to the cutoff when `as_of_date` is set.","internalType":"bigint","type":"string"},"return_on_capital":{"description":"Time-weighted return of the position over its holding period, non-annualized; measured up to the cutoff when `as_of_date` is set.","nullable":true,"type":"number"},"user_address":{"description":"Position owner address.","type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["user_address","chain_id","vault_address","accounting_method","return_on_capital"],"type":"object"}},"required":["data"],"type":"object"},"UserVaultV2PositionResponse":{"properties":{"data":{"description":"User's live Vault V2 position.","properties":{"assets":{"description":"Value of vault shares held, in underlying token units.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this position.","internalType":"bigint","type":"string"},"shares":{"description":"Amount of vault shares.","internalType":"bigint","type":"string"},"user_address":{"description":"Position owner address.","type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["user_address","chain_id","vault_address"],"type":"object"}},"required":["data"],"type":"object"},"VaultRoleListResponse":{"properties":{"data":{"description":"Complete set of active role assignments.","items":{"properties":{"grant_block_number":{"description":"Chain block number of the latest role grant event identified by tx_hash, as a base-10 integer string. After revocation and re-grant, this is the re-grant block, not the first grant block.","internalType":"bigint","type":"string"},"role_address":{"description":"Role account address.","type":"string"},"tx_hash":{"description":"Transaction hash of the latest role grant event.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["role_address","tx_hash","grant_block_number"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to compute this role list.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV1AllocationHistoryResponse":{"properties":{"data":{"description":"Vault V1 allocation history grouped by market.","items":{"properties":{"history":{"description":"Historical allocation points for this market.","items":{"properties":{"supply_assets":{"description":"Assets supplied by the vault to the market, in underlying token units.","internalType":"bigint","type":"string"},"supply_cap":{"description":"Vault supply cap for the market, in underlying token units.","internalType":"bigint","type":"string"},"supply_shares":{"description":"Supply shares owned by the vault in the market.","internalType":"bigint","type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","supply_assets","supply_shares","supply_cap"],"type":"object"},"type":"array"},"market_id":{"description":"Morpho Blue market id.","type":"string"}},"required":["market_id","history"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical allocation state.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV1AllocationsResponse":{"properties":{"data":{"description":"Vault V1 allocation state.","properties":{"allocations":{"description":"Every market with a current or pending relationship to the vault, ordered by ascending market id. Market details are not embedded; join through the Blue market endpoints.","items":{"properties":{"market_id":{"description":"Morpho Blue market id.","type":"string"},"pending":{"description":"Timelocked allocation changes submitted for this market.","properties":{"removal":{"description":"Timelocked market removal, or null when no removal is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds from which the market can be removed from the withdraw queue.","minimum":0,"type":"integer"}},"required":["valid_at_timestamp"],"type":"object"},"supply_cap":{"description":"Timelocked supply cap change, or null when no cap change is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds from which the submitted supply cap can be accepted.","minimum":0,"type":"integer"},"value":{"description":"Submitted supply cap, in underlying token units.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"}},"required":["supply_cap","removal"],"type":"object"},"supply_assets":{"description":"Assets supplied by the vault to the market, in underlying token units.","internalType":"bigint","type":"string"},"supply_cap":{"description":"Vault supply cap for the market, in underlying token units. Stored on-chain as a uint184, so the highest possible cap is 2^184 - 1. A cap of 0 means the vault cannot supply to the market; there is no sentinel value for an uncapped market.","internalType":"bigint","type":"string"},"supply_queue_index":{"description":"Zero-based position in the vault supply queue, or null when the market is not in the supply queue.","minimum":0,"nullable":true,"type":"integer"},"supply_shares":{"description":"Supply shares owned by the vault in the market.","internalType":"bigint","type":"string"},"withdraw_queue_index":{"description":"Zero-based position in the vault withdraw queue, or null when the market is not in the withdraw queue.","minimum":0,"nullable":true,"type":"integer"}},"required":["market_id","supply_assets","supply_shares","supply_cap","supply_queue_index","withdraw_queue_index","pending"],"type":"object"},"type":"array"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this allocation state.","internalType":"bigint","type":"string"},"vault_address":{"description":"Vault V1 contract address.","type":"string"}},"required":["chain_id","vault_address","allocations","last_indexed_block"],"type":"object"}},"required":["data"],"type":"object"},"VaultV1ApyAveragesResponse":{"properties":{"data":{"description":"Vault V1 realized average APY.","properties":{"apy":{"description":"Realized average APY of the vault, calculated from share price evolution over the lookback period. Null when the vault holds fewer than 1,000,000 raw units of its asset (1 USDC, 0.01 WBTC) at the latest snapshot or at the lookback snapshot, because a near-empty vault's share price is dominated by rounding. inception averages from the initial share price at creation, so only the latest snapshot is checked.","nullable":true,"type":"number"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this APY average.","internalType":"bigint","type":"string"},"lookback":{"description":"Lookback period used to compute the average APY.","enum":["one_hour","six_hours","one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["chain_id","vault_address","lookback","apy"],"type":"object"}},"required":["data"],"type":"object"},"VaultV1ApyHistoryResponse":{"properties":{"data":{"description":"Vault V1 historical APY points.","items":{"properties":{"apy":{"description":"Historical vault APY.","nullable":true,"type":"number"},"timestamp":{"description":"Historical sample timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","apy"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical APY.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV1ListResponse":{"properties":{"cursor":{"description":"Opaque cursor for the next page. Null on the last page.","nullable":true,"type":"string"},"data":{"description":"Page of listed Morpho Vault V1 deployments.","items":{"properties":{"asset_address":{"description":"Underlying asset address. Join through `GET /v0/tokens/{chain-id}:{address}` for its name, symbol and decimals.","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"creation_block_number":{"description":"Vault creation block number.","internalType":"bigint","type":"string"},"creation_timestamp":{"description":"Unix seconds of the creation block.","minimum":0,"type":"integer"},"creator_address":{"description":"Address that called the factory to deploy the vault (the `caller` of the factory's `CreateMetaMorpho` event).","type":"string"},"curator":{"description":"Current curator address. Null when no curator is set.","nullable":true,"type":"string"},"factory_address":{"description":"Factory contract address that deployed the vault.","type":"string"},"guardian":{"description":"Current guardian address (guardian()), factual onchain data. Null when no guardian has been set; an explicitly-set zero address is returned verbatim.","nullable":true,"type":"string"},"name":{"description":"Current ERC-20 name of the vault share token.","type":"string"},"owner":{"description":"Current owner address.","type":"string"},"performance_fee_recipient":{"description":"Active performance fee recipient. Null when the vault has never set one; an explicitly-set zero address is returned verbatim.","nullable":true,"type":"string"},"performance_fee_wad":{"description":"Active performance fee, WAD-scaled (1e18 = 100%). \"0\" when no fee has ever been set, which is the on-chain value.","internalType":"bigint","type":"string"},"symbol":{"description":"Current ERC-20 symbol of the vault share token.","type":"string"},"vault_address":{"description":"Vault V1 contract address. The compound `{chain-id}:{vault_address}` form identifies the vault in resource URLs.","type":"string"},"version":{"description":"Factory lineage of the vault contract.","enum":["1.0","1.1"],"type":"string"}},"required":["chain_id","vault_address","version","name","symbol","asset_address","factory_address","creator_address","creation_block_number","creation_timestamp","performance_fee_wad","performance_fee_recipient","owner","curator","guardian"],"type":"object"},"type":"array"}},"required":["data","cursor"],"type":"object"},"VaultV1PendingGovernanceActionsResponse":{"properties":{"cursor":{"description":"Opaque pagination cursor.","nullable":true,"type":"string"},"data":{"description":"Pending governance actions for this Vault V1.","items":{"oneOf":[{"properties":{"action_type":{"enum":["set_cap"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"market_id":{"description":"Morpho Blue market id.","type":"string"},"new_supply_cap":{"description":"Pending supply cap in underlying token units.","internalType":"bigint","type":"string"}},"required":["market_id","new_supply_cap"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","action_type","parameters","executable_at_timestamp"],"type":"object"},{"properties":{"action_type":{"enum":["set_timelock"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_timelock_seconds":{"description":"Pending timelock duration, in seconds.","minimum":0,"type":"integer"}},"required":["new_timelock_seconds"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","action_type","parameters","executable_at_timestamp"],"type":"object"},{"properties":{"action_type":{"enum":["set_guardian"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_guardian":{"description":"Pending guardian address.","type":"string"}},"required":["new_guardian"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","action_type","parameters","executable_at_timestamp"],"type":"object"},{"properties":{"action_type":{"enum":["remove_market"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"market_id":{"description":"Morpho Blue market id.","type":"string"}},"required":["market_id"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","action_type","parameters","executable_at_timestamp"],"type":"object"},{"properties":{"action_type":{"enum":["transfer_ownership"],"type":"string"},"executable_at_timestamp":{"description":"Ownable2Step ownership transfers are not timelocked.","type":"null"},"parameters":{"properties":{"pending_owner":{"description":"Pending owner address.","type":"string"}},"required":["pending_owner"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","action_type","parameters","executable_at_timestamp"],"type":"object"}]},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to compute this pending action list.","internalType":"bigint","type":"string"},"params":{"properties":{"chain_id":{"description":"EVM chain identifier.","enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"type":"number"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","cursor","last_indexed_block"],"type":"object"},"VaultV1RootResponse":{"properties":{"data":{"description":"Vault V1 configuration.","properties":{"address":{"description":"Vault V1 contract address.","type":"string"},"asset":{"description":"Underlying asset metadata.","properties":{"address":{"description":"ERC-20 token contract address.","type":"string"},"decimals":{"description":"ERC-20 token decimals.","maximum":255,"minimum":0,"nullable":true,"type":"integer"},"name":{"description":"ERC-20 token name.","nullable":true,"type":"string"},"symbol":{"description":"ERC-20 token symbol.","nullable":true,"type":"string"}},"required":["address","decimals","name","symbol"],"type":"object"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"creation_block_number":{"description":"Vault creation block number.","internalType":"bigint","type":"string"},"creator_address":{"description":"Address that called the factory to deploy the vault (the `caller` of the factory's `CreateMetaMorpho` event). Null when the response is served from the RPC fallback, which has no creation event.","nullable":true,"type":"string"},"curator":{"description":"Current curator address.","nullable":true,"type":"string"},"factory_address":{"description":"Factory contract address that deployed the vault.","type":"string"},"fee_recipient":{"description":"Active fee recipient address.","nullable":true,"type":"string"},"fee_wad":{"description":"Active fee value, scaled by WAD (1e18 = 100%).","internalType":"bigint","nullable":true,"type":"string"},"guardian":{"description":"Current guardian address.","nullable":true,"type":"string"},"last_indexed_block":{"description":"Latest indexed block used to compute this vault configuration.","internalType":"bigint","type":"string"},"name":{"description":"ERC-20 name of the vault share token.","type":"string"},"owner":{"description":"Current owner address.","type":"string"},"skim_recipient":{"description":"Active skim recipient address (reward token sweeps).","nullable":true,"type":"string"},"symbol":{"description":"ERC-20 symbol of the vault share token.","type":"string"},"timelock_seconds":{"description":"Active timelock duration, in seconds.","minimum":0,"type":"integer"},"version":{"description":"Vault contract version (semantic).","enum":["1.0","1.1"],"type":"string"}},"required":["chain_id","address","version","name","symbol","asset","factory_address","creator_address","fee_recipient","skim_recipient","owner","curator","guardian","timelock_seconds"],"type":"object"}},"required":["data"],"type":"object"},"VaultV1StateHistoryResponse":{"properties":{"data":{"description":"Vault V1 historical state points.","items":{"properties":{"share_price_ray":{"description":"Normalized share price scaled by RAY (1e27): one whole share token quoted in whole underlying tokens.","internalType":"bigint","nullable":true,"type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"},"total_assets":{"description":"Total value of vault holdings, in underlying token units.","internalType":"bigint","type":"string"},"total_supply":{"description":"Vault shares total supply.","internalType":"bigint","type":"string"},"withdrawable_assets":{"description":"Assets available for immediate withdrawal from the vault.","internalType":"bigint","type":"string"}},"required":["timestamp","total_assets","total_supply","withdrawable_assets","share_price_ray"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical state.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV1StateResponse":{"properties":{"data":{"description":"Vault V1 live state.","properties":{"address":{"description":"Vault V1 contract address.","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this vault state.","internalType":"bigint","type":"string"},"share_price_ray":{"description":"Normalized share price scaled by RAY (1e27): one whole share token quoted in whole underlying tokens.","internalType":"bigint","nullable":true,"type":"string"},"total_assets":{"description":"Total value of vault holdings, in underlying token units.","internalType":"bigint","type":"string"},"total_supply":{"description":"Vault shares total supply.","internalType":"bigint","type":"string"},"withdrawable_assets":{"description":"Assets available for immediate withdrawal from the vault.","internalType":"bigint","type":"string"}},"required":["chain_id","address","share_price_ray"],"type":"object"}},"required":["data"],"type":"object"},"VaultV2AllocationsResponse":{"properties":{"data":{"description":"Vault V2 adapter and cap allocation state.","properties":{"allocations":{"description":"Active adapters of the vault with their caps and current allocations.","items":{"properties":{"adapter_address":{"description":"Adapter contract address.","type":"string"},"adapter_kind":{"description":"Adapter implementation. Open-ended: new kinds ship additively, so treat unrecognized values as unknown.","enum":["morpho_market_v1","morpho_market_v1_v2","morpho_vault_v1","morpho_vault_v2","unknown"],"type":"string"},"caps":{"description":"Caps scoped to this adapter: its own adapter-wide cap and one cap per Morpho Blue market it is capped on.","items":{"oneOf":[{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units. 2^256 - 1 means no effective absolute cap.","internalType":"bigint","type":"string"},"allocated_assets":{"description":"Assets currently allocated against this cap, in underlying token units.","internalType":"bigint","type":"string"},"cap_data":{"description":"Opaque ABI-encoded cap id preimage, as stored on chain. Decoding it yields the cap target.","pattern":"^0x([a-fA-F0-9]{2})*$","type":"string"},"cap_id":{"description":"Vault V2 cap id (bytes32 keccak256 hash of cap_data).","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap tracked against the adapter as a whole, covering every position it holds.","enum":["adapter"],"type":"string"},"pending":{"description":"Pending cap increases. Cap decreases are not timelocked and apply immediately, so they never appear here.","properties":{"absolute_cap":{"description":"Pending absolute cap increase, in underlying token units. Null when no increase is pending. Absolute and relative cap increases are timelocked independently, so each carries its own valid_at_timestamp.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"},"relative_cap_wad":{"description":"Pending relative cap increase, scaled by WAD (1e18 = 100%). Null when no increase is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"}},"required":["absolute_cap","relative_cap_wad"],"type":"object"},"real_assets":{"description":"Assets the adapter holds, in underlying token units, accrued to the read time. Matches the adapter's realAssets(). Unlike allocated_assets, which is updated only on allocate and deallocate, it includes interest earned since. The values across adapter caps sum to the vault-level allocated_assets served by the state route. Null when the vault's accrual state is unavailable or the adapter kind is not supported.","internalType":"bigint","nullable":true,"type":"string"},"relative_cap_wad":{"description":"Relative allocation cap, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["cap_id","cap_data","pending","cap_type","allocated_assets","absolute_cap","relative_cap_wad","real_assets"],"type":"object"},{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units. 2^256 - 1 means no effective absolute cap.","internalType":"bigint","type":"string"},"allocated_assets":{"description":"Assets currently allocated against this cap, in underlying token units.","internalType":"bigint","type":"string"},"cap_data":{"description":"Opaque ABI-encoded cap id preimage, as stored on chain. Decoding it yields the cap target.","pattern":"^0x([a-fA-F0-9]{2})*$","type":"string"},"cap_id":{"description":"Vault V2 cap id (bytes32 keccak256 hash of cap_data).","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap tracked against a single Morpho Blue market via an adapter.","enum":["market_v1"],"type":"string"},"expected_supply_assets":{"description":"Assets the adapter supplies to this market, in underlying token units, accrued to the read time. Matches the adapter's expectedSupplyAssets(marketId). Unlike allocated_assets, which is updated only on allocate and deallocate, it includes interest earned since. Zero can also mean the accrual state predates the market position; allocated_assets is then the better estimate. Null when the vault's accrual state is unavailable or the adapter is not a Morpho Market V1 adapter.","internalType":"bigint","nullable":true,"type":"string"},"market_id":{"description":"Morpho Blue market id this cap constrains.","type":"string"},"pending":{"description":"Pending cap increases. Cap decreases are not timelocked and apply immediately, so they never appear here.","properties":{"absolute_cap":{"description":"Pending absolute cap increase, in underlying token units. Null when no increase is pending. Absolute and relative cap increases are timelocked independently, so each carries its own valid_at_timestamp.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"},"relative_cap_wad":{"description":"Pending relative cap increase, scaled by WAD (1e18 = 100%). Null when no increase is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"}},"required":["absolute_cap","relative_cap_wad"],"type":"object"},"relative_cap_wad":{"description":"Relative allocation cap, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["cap_id","cap_data","pending","cap_type","market_id","allocated_assets","absolute_cap","relative_cap_wad","expected_supply_assets"],"type":"object"}]},"type":"array"},"pending":{"description":"Pending governance changes scoped to this adapter.","properties":{"removal":{"description":"Pending removal of this adapter from the vault. Null when no removal is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"}},"required":["valid_at_timestamp"],"type":"object"}},"required":["removal"],"type":"object"},"target":{"description":"Where this adapter routes the assets it receives.","oneOf":[{"properties":{"type":{"description":"Adapter supplying to Morpho Blue markets. A single adapter can serve several markets, so the markets themselves are listed per cap.","enum":["blue_market"],"type":"string"}},"required":["type"],"type":"object"},{"properties":{"type":{"description":"Adapter depositing into a Morpho Vault V1.","enum":["vault_v1"],"type":"string"},"vault_address":{"description":"Address of the Morpho Vault V1 the adapter deposits into.","type":"string"}},"required":["type","vault_address"],"type":"object"},{"properties":{"type":{"description":"Adapter depositing into a nested Morpho Vault V2.","enum":["vault_v2"],"type":"string"},"vault_address":{"description":"Address of the nested Morpho Vault V2 the adapter deposits into.","type":"string"}},"required":["type","vault_address"],"type":"object"},{"properties":{"target_address":{"description":"On-chain target pointer when one is recorded, for diagnostics. Null when the adapter exposes no target.","nullable":true,"type":"string"},"type":{"description":"Adapter that was not deployed by a known Morpho factory, or whose target is neither a Vault V1 nor a Vault V2.","enum":["unknown"],"type":"string"}},"required":["type","target_address"],"type":"object"}]}},"required":["adapter_address","adapter_kind","target","pending","caps"],"type":"object"},"type":"array"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to serve this allocation state.","internalType":"bigint","type":"string"},"unscoped_caps":{"description":"Caps that are not scoped to a single adapter: collateral caps, which constrain every market adapter holding that collateral, and caps whose target could not be decoded.","items":{"oneOf":[{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units. 2^256 - 1 means no effective absolute cap.","internalType":"bigint","type":"string"},"allocated_assets":{"description":"Assets currently allocated against this cap, in underlying token units.","internalType":"bigint","type":"string"},"cap_data":{"description":"Opaque ABI-encoded cap id preimage, as stored on chain. Decoding it yields the cap target.","pattern":"^0x([a-fA-F0-9]{2})*$","type":"string"},"cap_id":{"description":"Vault V2 cap id (bytes32 keccak256 hash of cap_data).","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap tracked against a collateral token across every market adapter of the vault.","enum":["collateral"],"type":"string"},"collateral_address":{"description":"ERC-20 collateral token address this cap constrains.","type":"string"},"pending":{"description":"Pending cap increases. Cap decreases are not timelocked and apply immediately, so they never appear here.","properties":{"absolute_cap":{"description":"Pending absolute cap increase, in underlying token units. Null when no increase is pending. Absolute and relative cap increases are timelocked independently, so each carries its own valid_at_timestamp.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"},"relative_cap_wad":{"description":"Pending relative cap increase, scaled by WAD (1e18 = 100%). Null when no increase is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"}},"required":["absolute_cap","relative_cap_wad"],"type":"object"},"relative_cap_wad":{"description":"Relative allocation cap, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["cap_id","cap_data","pending","cap_type","collateral_address","allocated_assets","absolute_cap","relative_cap_wad"],"type":"object"},{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units. 2^256 - 1 means no effective absolute cap.","internalType":"bigint","type":"string"},"allocated_assets":{"description":"Assets currently allocated against this cap, in underlying token units.","internalType":"bigint","type":"string"},"cap_data":{"description":"Opaque ABI-encoded cap id preimage, as stored on chain. Decoding it yields the cap target.","pattern":"^0x([a-fA-F0-9]{2})*$","type":"string"},"cap_id":{"description":"Vault V2 cap id (bytes32 keccak256 hash of cap_data).","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap whose cap_data does not match any known encoding, so its target could not be resolved.","enum":["unknown"],"type":"string"},"pending":{"description":"Pending cap increases. Cap decreases are not timelocked and apply immediately, so they never appear here.","properties":{"absolute_cap":{"description":"Pending absolute cap increase, in underlying token units. Null when no increase is pending. Absolute and relative cap increases are timelocked independently, so each carries its own valid_at_timestamp.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"},"relative_cap_wad":{"description":"Pending relative cap increase, scaled by WAD (1e18 = 100%). Null when no increase is pending.","nullable":true,"properties":{"valid_at_timestamp":{"description":"Unix seconds at which the pending change becomes executable.","minimum":0,"type":"integer"},"value":{"description":"Pending cap value once executable.","internalType":"bigint","type":"string"}},"required":["valid_at_timestamp","value"],"type":"object"}},"required":["absolute_cap","relative_cap_wad"],"type":"object"},"relative_cap_wad":{"description":"Relative allocation cap, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["cap_id","cap_data","pending","cap_type","allocated_assets","absolute_cap","relative_cap_wad"],"type":"object"}]},"type":"array"},"vault_address":{"description":"Vault V2 contract address.","type":"string"}},"required":["chain_id","vault_address","allocations","unscoped_caps","last_indexed_block"],"type":"object"}},"required":["data"],"type":"object"},"VaultV2ApyAveragesResponse":{"properties":{"data":{"description":"Vault V2 realized average APY.","properties":{"apy":{"description":"Realized average APY of the vault, calculated from share price evolution over the lookback period. Null when the vault holds fewer than 1,000,000 raw units of its asset (1 USDC, 0.01 WBTC) at the latest snapshot or at the lookback snapshot, because a near-empty vault's share price is dominated by rounding. inception averages from the initial share price at creation, so only the latest snapshot is checked.","nullable":true,"type":"number"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this APY average.","internalType":"bigint","type":"string"},"lookback":{"description":"Lookback period used to compute the average APY.","enum":["one_hour","six_hours","one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["chain_id","vault_address","lookback","apy"],"type":"object"}},"required":["data"],"type":"object"},"VaultV2ApyHistoryResponse":{"properties":{"data":{"description":"Vault V2 historical APY points.","items":{"properties":{"apy":{"description":"Historical vault APY.","nullable":true,"type":"number"},"timestamp":{"description":"Historical sample timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","apy"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical APY.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV2CapsHistoryResponse":{"properties":{"data":{"description":"Vault V2 caps history grouped by cap.","items":{"oneOf":[{"properties":{"adapter_address":{"description":"Adapter contract address this cap constrains.","type":"string"},"cap_id":{"description":"Vault V2 cap id.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap tracked against the adapter as a whole, covering every position it holds.","enum":["adapter"],"type":"string"},"history":{"description":"Historical allocation and cap points for this cap.","items":{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units.","internalType":"bigint","type":"string"},"allocation":{"description":"Assets allocated to this cap target, in underlying token units.","internalType":"bigint","type":"string"},"relative_allocation":{"description":"Allocation relative to vault total assets as a ratio.","minimum":0,"type":"number"},"relative_cap_wad":{"description":"Relative allocation cap scaled by WAD (1e18).","internalType":"bigint","type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","allocation","absolute_cap","relative_cap_wad","relative_allocation"],"type":"object"},"type":"array"},"target":{"description":"Where this adapter routes the assets it receives, in the /allocations shape. Resolved from the adapter factory's creation event, so it is also set for adapters removed from the vault.","oneOf":[{"properties":{"type":{"description":"Adapter supplying to Morpho Blue markets. A single adapter can serve several markets, so the markets themselves are listed per cap.","enum":["blue_market"],"type":"string"}},"required":["type"],"type":"object"},{"properties":{"type":{"description":"Adapter depositing into a Morpho Vault V1.","enum":["vault_v1"],"type":"string"},"vault_address":{"description":"Address of the Morpho Vault V1 the adapter deposits into.","type":"string"}},"required":["type","vault_address"],"type":"object"},{"properties":{"type":{"description":"Adapter depositing into a nested Morpho Vault V2.","enum":["vault_v2"],"type":"string"},"vault_address":{"description":"Address of the nested Morpho Vault V2 the adapter deposits into.","type":"string"}},"required":["type","vault_address"],"type":"object"},{"properties":{"target_address":{"description":"On-chain target pointer when one is recorded, for diagnostics. Null when the adapter exposes no target.","nullable":true,"type":"string"},"type":{"description":"Adapter that was not deployed by a known Morpho factory, or whose target is neither a Vault V1 nor a Vault V2.","enum":["unknown"],"type":"string"}},"required":["type","target_address"],"type":"object"}]}},"required":["cap_id","history","cap_type","adapter_address","target"],"type":"object"},{"properties":{"adapter_address":{"description":"Adapter contract address this cap constrains.","type":"string"},"cap_id":{"description":"Vault V2 cap id.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap tracked against a single Morpho Blue market via an adapter.","enum":["marketV1"],"type":"string"},"collateral_address":{"description":"Collateral token address of the constrained market.","type":"string"},"history":{"description":"Historical allocation and cap points for this cap.","items":{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units.","internalType":"bigint","type":"string"},"allocation":{"description":"Assets allocated to this cap target, in underlying token units.","internalType":"bigint","type":"string"},"relative_allocation":{"description":"Allocation relative to vault total assets as a ratio.","minimum":0,"type":"number"},"relative_cap_wad":{"description":"Relative allocation cap scaled by WAD (1e18).","internalType":"bigint","type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","allocation","absolute_cap","relative_cap_wad","relative_allocation"],"type":"object"},"type":"array"},"market_id":{"description":"Morpho Blue market id this cap constrains.","type":"string"}},"required":["cap_id","history","cap_type","adapter_address","market_id","collateral_address"],"type":"object"},{"properties":{"cap_id":{"description":"Vault V2 cap id.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap tracked against a collateral token across every market adapter of the vault.","enum":["collateral"],"type":"string"},"collateral_address":{"description":"ERC-20 collateral token address this cap constrains.","type":"string"},"history":{"description":"Historical allocation and cap points for this cap.","items":{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units.","internalType":"bigint","type":"string"},"allocation":{"description":"Assets allocated to this cap target, in underlying token units.","internalType":"bigint","type":"string"},"relative_allocation":{"description":"Allocation relative to vault total assets as a ratio.","minimum":0,"type":"number"},"relative_cap_wad":{"description":"Relative allocation cap scaled by WAD (1e18).","internalType":"bigint","type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","allocation","absolute_cap","relative_cap_wad","relative_allocation"],"type":"object"},"type":"array"}},"required":["cap_id","history","cap_type","collateral_address"],"type":"object"},{"properties":{"cap_id":{"description":"Vault V2 cap id.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"},"cap_type":{"description":"Cap whose cap_data does not match any known encoding, so its target could not be resolved.","enum":["unknown"],"type":"string"},"history":{"description":"Historical allocation and cap points for this cap.","items":{"properties":{"absolute_cap":{"description":"Absolute allocation cap, in underlying token units.","internalType":"bigint","type":"string"},"allocation":{"description":"Assets allocated to this cap target, in underlying token units.","internalType":"bigint","type":"string"},"relative_allocation":{"description":"Allocation relative to vault total assets as a ratio.","minimum":0,"type":"number"},"relative_cap_wad":{"description":"Relative allocation cap scaled by WAD (1e18).","internalType":"bigint","type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"}},"required":["timestamp","allocation","absolute_cap","relative_cap_wad","relative_allocation"],"type":"object"},"type":"array"}},"required":["cap_id","history","cap_type"],"type":"object"}]},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical cap state.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV2ListResponse":{"properties":{"cursor":{"description":"Opaque cursor. Null on the last page.","nullable":true,"type":"string"},"data":{"description":"Listed Morpho Vault V2 instances.","items":{"properties":{"asset_address":{"description":"Underlying asset address, EIP-55 checksummed. Resolve its name, symbol and decimals via the token endpoint.","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"creation_block_number":{"description":"Vault creation block number.","internalType":"bigint","type":"string"},"creation_timestamp":{"description":"Unix timestamp of the creation block, in seconds.","minimum":0,"type":"integer"},"curator":{"description":"Current curator address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"factory_address":{"description":"Factory contract address that deployed the vault, EIP-55 checksummed.","type":"string"},"management_fee_recipient":{"description":"Active management fee recipient. Null while no fee is charged. A zero address on-chain is also returned as `null`.","nullable":true,"type":"string"},"management_fee_wad":{"description":"Active management fee, scaled by WAD (1e18 = 100%). Null when never set. Sorting treats null as 0, so unset fees sort lowest.","internalType":"bigint","nullable":true,"type":"string"},"name":{"description":"ERC-20 name of the vault share token.","nullable":true,"type":"string"},"owner":{"description":"Current owner address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"performance_fee_recipient":{"description":"Active performance fee recipient. Null while no fee is charged. A zero address on-chain is also returned as `null`.","nullable":true,"type":"string"},"performance_fee_wad":{"description":"Active performance fee, scaled by WAD (1e18 = 100%). Null when never set. Sorting treats null as 0, so unset fees sort lowest.","internalType":"bigint","nullable":true,"type":"string"},"symbol":{"description":"ERC-20 symbol of the vault share token.","nullable":true,"type":"string"},"vault_address":{"description":"Vault V2 contract address, EIP-55 checksummed. Use <chain_id>:<vault_address> as the resource selector in per-vault routes, for example 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","type":"string"},"version":{"description":"Vault contract version.","type":"string"}},"required":["chain_id","vault_address","version","name","symbol","asset_address","factory_address","creation_timestamp","management_fee_recipient","performance_fee_recipient","owner","curator","creation_block_number","management_fee_wad","performance_fee_wad"],"type":"object"},"type":"array"}},"required":["data","cursor"],"type":"object"},"VaultV2PendingGovernanceActionsResponse":{"properties":{"cursor":{"description":"Opaque pagination cursor.","nullable":true,"type":"string"},"data":{"description":"Pending governance actions for this Vault V2.","items":{"oneOf":[{"properties":{"action_type":{"enum":["set_is_allocator"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"account":{"description":"Allocator account address.","type":"string"},"is_allocator":{"description":"Whether the account becomes allocator.","type":"boolean"}},"required":["account","is_allocator"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_receive_shares_gate"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_gate":{"description":"Pending gate contract address.","type":"string"}},"required":["new_gate"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_send_shares_gate"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_gate":{"description":"Pending gate contract address.","type":"string"}},"required":["new_gate"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_receive_assets_gate"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_gate":{"description":"Pending gate contract address.","type":"string"}},"required":["new_gate"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_send_assets_gate"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_gate":{"description":"Pending gate contract address.","type":"string"}},"required":["new_gate"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_adapter_registry"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_adapter_registry":{"description":"Pending adapter registry address.","type":"string"}},"required":["new_adapter_registry"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["add_adapter"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"adapter":{"description":"Adapter contract address.","type":"string"}},"required":["adapter"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["remove_adapter"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"adapter":{"description":"Adapter contract address.","type":"string"}},"required":["adapter"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["increase_timelock"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_duration_seconds":{"description":"Pending timelock duration, in seconds.","pattern":"^\\d+$","type":"string"},"selector":{"description":"Four-byte function selector.","pattern":"^0x[a-fA-F0-9]{8}$","type":"string"}},"required":["selector","new_duration_seconds"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["decrease_timelock"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_duration_seconds":{"description":"Pending timelock duration, in seconds.","pattern":"^\\d+$","type":"string"},"selector":{"description":"Four-byte function selector.","pattern":"^0x[a-fA-F0-9]{8}$","type":"string"}},"required":["selector","new_duration_seconds"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["abdicate"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"selector":{"description":"Four-byte function selector.","pattern":"^0x[a-fA-F0-9]{8}$","type":"string"}},"required":["selector"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_performance_fee"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_fee_wad":{"description":"Pending fee value, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["new_fee_wad"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_management_fee"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_fee_wad":{"description":"Pending fee value, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["new_fee_wad"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_performance_fee_recipient"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_recipient":{"description":"Pending fee recipient address.","type":"string"}},"required":["new_recipient"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_management_fee_recipient"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"new_recipient":{"description":"Pending fee recipient address.","type":"string"}},"required":["new_recipient"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["increase_absolute_cap"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"id_data":{"description":"Adapter-specific cap id calldata.","type":"string"},"new_absolute_cap":{"description":"Pending absolute cap in underlying token units.","internalType":"bigint","type":"string"}},"required":["id_data","new_absolute_cap"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["increase_relative_cap"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"id_data":{"description":"Adapter-specific cap id calldata.","type":"string"},"new_relative_cap_wad":{"description":"Pending relative cap, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["id_data","new_relative_cap_wad"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["set_force_deallocate_penalty"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"properties":{"adapter":{"description":"Adapter contract address.","type":"string"},"new_penalty_wad":{"description":"Pending force deallocation penalty, scaled by WAD (1e18 = 100%).","internalType":"bigint","type":"string"}},"required":["adapter","new_penalty_wad"],"type":"object"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"},{"properties":{"action_type":{"enum":["unknown"],"type":"string"},"executable_at_timestamp":{"description":"Unix seconds when the action becomes executable.","minimum":0,"type":"integer"},"parameters":{"type":"null"},"submitted_transaction_hash":{"description":"Transaction hash that submitted the pending governance action.","pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},"required":["submitted_transaction_hash","executable_at_timestamp","action_type","parameters"],"type":"object"}]},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to compute this pending action list.","internalType":"bigint","type":"string"},"params":{"properties":{"chain_id":{"description":"EVM chain identifier.","enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"type":"number"},"vault_address":{"description":"Vault contract address.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","cursor","last_indexed_block"],"type":"object"},"VaultV2RootResponse":{"properties":{"data":{"description":"Vault V2 configuration.","properties":{"adapter_registry":{"description":"Active adapter registry address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"address":{"description":"Vault V2 contract address.","type":"string"},"asset":{"description":"Underlying asset metadata.","properties":{"address":{"description":"ERC-20 token contract address.","type":"string"},"decimals":{"description":"ERC-20 token decimals.","maximum":255,"minimum":0,"nullable":true,"type":"integer"},"name":{"description":"ERC-20 token name.","nullable":true,"type":"string"},"symbol":{"description":"ERC-20 token symbol.","nullable":true,"type":"string"}},"required":["address","decimals","name","symbol"],"type":"object"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"creation_block_number":{"description":"Vault creation block number.","internalType":"bigint","type":"string"},"curator":{"description":"Current curator address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"decimals_offset":{"description":"Decimals offset applied to vault share accounting.","maximum":18,"minimum":0,"nullable":true,"type":"integer"},"factory_address":{"description":"Factory contract address that deployed the vault.","type":"string"},"gates":{"description":"Gates controlling access to Vault V2 operations.","properties":{"receive_assets":{"description":"Gate for receiving assets (deposit); `null` when no gate is set, including a gate reset to the zero address.","nullable":true,"type":"string"},"receive_shares":{"description":"Gate for receiving shares (transfer to vault); `null` when no gate is set, including a gate reset to the zero address.","nullable":true,"type":"string"},"send_assets":{"description":"Gate for sending assets (withdraw); `null` when no gate is set, including a gate reset to the zero address.","nullable":true,"type":"string"},"send_shares":{"description":"Gate for sending shares (transfer from vault); `null` when no gate is set, including a gate reset to the zero address.","nullable":true,"type":"string"}},"required":["send_shares","receive_shares","send_assets","receive_assets"],"type":"object"},"governance":{"description":"Indexed per-function governance configuration from the same sources as GraphQL timelocks. Null on RPC fallback, which does not load per-function timelocks or abdication state.","nullable":true,"properties":{"timelocks":{"description":"One entry for each of the 18 supported timelocked functions, including functions whose timelock has never been set.","items":{"properties":{"abdicated_at_timestamp":{"description":"Unix timestamp in seconds when this specific function was abdicated, from its indexed Abdicate event. Null when the function has not been abdicated.","minimum":0,"nullable":true,"type":"integer"},"function_name":{"description":"Solidity function name, matching GraphQL timelocks.functionName. Includes every supported timelocked function in canonical order.","enum":["setIsAllocator","setReceiveSharesGate","setSendSharesGate","setReceiveAssetsGate","setSendAssetsGate","setAdapterRegistry","addAdapter","removeAdapter","increaseTimelock","decreaseTimelock","setPerformanceFee","setManagementFee","setPerformanceFeeRecipient","setManagementFeeRecipient","increaseAbsoluteCap","increaseRelativeCap","setForceDeallocatePenalty","abdicate"],"type":"string"},"is_abdicated":{"description":"Whether the function has been permanently abdicated, based on the indexed Abdicate event. An abdicated function can never be called again.","type":"boolean"},"timelock_seconds":{"description":"Current timelock mapping value in seconds, as an exact base-10 uint256 string, including unbounded values. Zero when never set. Preserved after abdication; decreaseTimelock is scheduled using the target function's timelock at submission.","internalType":"bigint","type":"string"}},"required":["function_name","is_abdicated","abdicated_at_timestamp","timelock_seconds"],"type":"object"},"type":"array"}},"required":["timelocks"],"type":"object"},"last_indexed_block":{"description":"Latest indexed block used to compute this vault configuration.","internalType":"bigint","type":"string"},"liquidity_adapter":{"description":"Active liquidity adapter address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"liquidity_data":{"description":"Active liquidity adapter calldata.","nullable":true,"type":"string"},"management_fee_recipient":{"description":"Active management fee recipient address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"management_fee_wad":{"description":"Active management fee value, scaled by WAD (1e18 = 100%).","internalType":"bigint","nullable":true,"type":"string"},"max_rate_per_second_wad":{"description":"Maximum rate per second, scaled by WAD (1e18 = 100%).","internalType":"bigint","nullable":true,"type":"string"},"name":{"description":"ERC-20 name of the vault share token.","nullable":true,"type":"string"},"owner":{"description":"Current owner address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"performance_fee_recipient":{"description":"Active performance fee recipient address. A zero address on-chain is returned as `null`.","nullable":true,"type":"string"},"performance_fee_wad":{"description":"Active performance fee value, scaled by WAD (1e18 = 100%).","internalType":"bigint","nullable":true,"type":"string"},"symbol":{"description":"ERC-20 symbol of the vault share token.","nullable":true,"type":"string"},"timelock_seconds":{"description":"Maximum active timelock duration across timelocked functions, in seconds. Unbounded timelocks (e.g. set to make them irrevocable) are clamped to the maximum safe integer.","minimum":0,"nullable":true,"type":"integer"},"version":{"description":"Vault contract version.","type":"string"}},"required":["chain_id","address","version","name","symbol","asset","decimals_offset","factory_address","owner","curator","governance","timelock_seconds","management_fee_recipient","performance_fee_recipient","adapter_registry","liquidity_adapter","liquidity_data","gates"],"type":"object"}},"required":["data"],"type":"object"},"VaultV2StateHistoryResponse":{"properties":{"data":{"description":"Vault V2 historical state points.","items":{"properties":{"allocated_assets":{"description":"Real assets allocated in the vault, excluding virtual accrual.","internalType":"bigint","type":"string"},"idle_assets":{"description":"Assets deposited to the vault that are not generating interest.","internalType":"bigint","type":"string"},"share_price_ray":{"description":"Normalized share price scaled by RAY (1e27): one whole share token quoted in whole underlying tokens.","internalType":"bigint","nullable":true,"type":"string"},"timestamp":{"description":"Snapshot timestamp in Unix seconds.","minimum":0,"type":"integer"},"total_assets":{"description":"Total value of vault holdings, in underlying token units.","internalType":"bigint","type":"string"},"total_supply":{"description":"Vault shares total supply.","internalType":"bigint","type":"string"},"withdrawable_assets":{"description":"Liquidity available from the liquidity adapter plus idle assets.","internalType":"bigint","type":"string"}},"required":["timestamp","total_assets","total_supply","withdrawable_assets","allocated_assets","idle_assets","share_price_ray"],"type":"object"},"type":"array"},"last_indexed_block":{"description":"Latest indexed block used to serve this historical state.","internalType":"bigint","type":"string"},"params":{"description":"Request selector parameters.","properties":{"chain_id":{"description":"EVM chain identifier from the vault selector.","pattern":"^\\d+$","type":"string"},"vault_address":{"description":"Vault contract address from the vault selector.","type":"string"}},"required":["chain_id","vault_address"],"type":"object"}},"required":["params","data","last_indexed_block"],"type":"object"},"VaultV2StateResponse":{"properties":{"data":{"description":"Vault V2 live state.","properties":{"address":{"description":"Vault V2 contract address.","type":"string"},"allocated_assets":{"description":"Real assets allocated in the vault, excluding virtual accrual.","internalType":"bigint","type":"string"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"idle_assets":{"description":"Assets deposited to the vault that are not generating interest.","internalType":"bigint","type":"string"},"last_accrual_timestamp":{"description":"Latest accrual timestamp, in Unix seconds.","minimum":0,"type":"integer"},"last_indexed_block":{"description":"Latest indexed block used to compute this vault state.","internalType":"bigint","type":"string"},"share_price_ray":{"description":"Normalized share price scaled by RAY (1e27): one whole share token quoted in whole underlying tokens.","internalType":"bigint","nullable":true,"type":"string"},"total_assets":{"description":"Total value of vault holdings, in underlying token units.","internalType":"bigint","type":"string"},"total_supply":{"description":"Vault shares total supply.","internalType":"bigint","type":"string"},"withdrawable_assets":{"description":"Liquidity available from the liquidity adapter plus idle assets.","internalType":"bigint","type":"string"}},"required":["chain_id","address","last_accrual_timestamp","share_price_ray"],"type":"object"}},"required":["data"],"type":"object"},"VaultV2WithdrawalOptionsResponse":{"properties":{"data":{"description":"Vault V2 withdrawal options.","properties":{"adapter_penalties":{"description":"One force-deallocation option per active adapter.","items":{"properties":{"adapter_address":{"description":"Vault V2 adapter address.","type":"string"},"adapter_kind":{"description":"Resolved adapter kind.","enum":["blue_market_adapter","vault_v1_adapter","vault_v2_adapter","unknown_adapter"],"type":"string"},"force_deallocatable_assets":{"description":"Assets that can currently be force-deallocated from this adapter, in underlying token units.","internalType":"bigint","type":"string"},"penalty_rate_wad":{"description":"Force-deallocation penalty rate for this adapter, scaled by WAD (1e18).","internalType":"bigint","type":"string"}},"required":["adapter_address","adapter_kind","force_deallocatable_assets","penalty_rate_wad"],"type":"object"},"type":"array"},"chain_id":{"description":"EVM chain identifier.","exclusiveMinimum":true,"minimum":0,"type":"integer"},"idle_assets":{"description":"Assets held idle by the vault and immediately withdrawable.","internalType":"bigint","type":"string"},"liquidity_adapter_available_assets":{"description":"Assets currently withdrawable through the configured liquidity adapter, excluding idle assets.","internalType":"bigint","type":"string"},"vault_address":{"description":"Vault V2 contract address.","type":"string"}},"required":["chain_id","vault_address","liquidity_adapter_available_assets","idle_assets","adapter_penalties"],"type":"object"}},"required":["data"],"type":"object"}}},"info":{"contact":{},"description":"REST API exposing core Morpho on-chain entity state and configuration.\n\n### Authentication\n\nUse the `x-api-key` header for key-authenticated/private flows.\n\n```bash\ncurl -sS https://private.api.morpho.org/graphql \\\n  -H \"content-type: application/json\" \\\n  -H \"x-api-key: <MORPHO_API_KEY>\" \\\n  --data '{\"query\":\"{ __typename }\"}'\n```\n\n### Selectors\n\nVault selectors use `<chain_id>:<vault_address>` syntax. Example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11`.\n","title":"Core REST API","version":"1.0"},"openapi":"3.0.0","paths":{"/v0/blocks/{block-selector}/timestamp":{"get":{"description":"The hash and unix timestamp of a block, identified by its number on a given chain.","operationId":"BlockTimestampController_getTimestamp","parameters":[{"description":"Selector formatted as <chain_id>:<block_number>. Example: 1:19700000.","example":"1:19700000","in":"path","name":"block-selector","required":true,"schema":{"example":"1:19700000","format":"<chain_id>:<block_number>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockTimestampResponse"}}},"description":""}},"summary":"Get block timestamp","tags":["Blocks"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nBLOCK_SELECTOR=\"<chain_id>:<block_number>\"\n\ncurl -sS \"${BASE_URL}/v0/blocks/${BLOCK_SELECTOR}/timestamp\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst blockSelector = \"<chain_id>:<block_number>\";\n\nconst url = new URL(`${baseUrl}/v0/blocks/${blockSelector}/timestamp`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets":{"get":{"description":"Cursor-paginated discovery list of indexed Morpho Blue markets. Rows and both sort orders use immutable market configuration from the indexer. Dynamic state is exposed by the single-market state endpoint.\n\n**Freshness.** The rows contain configuration only and may span multiple chains, so there is no single meaningful `last_indexed_block`. Use `GET /v0/chains` for per-chain indexer tips.","operationId":"MarketListController_list","parameters":[{"description":"Opaque pagination cursor.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Filter to one or more EVM chain IDs.","in":"query","name":"chain_id","required":false,"schema":{"items":{"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"}},{"description":"Filter to one or more loan token asset selectors formatted as <chain_id>:<address>.","in":"query","name":"loan_token","required":false,"schema":{"items":{"description":"Selector formatted as <chain_id>:<address>. Example: 8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.","example":"8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","format":"<chain_id>:<address>","type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter to one collateral token address.","in":"query","name":"collateral_token","required":false,"schema":{"type":"string"}},{"description":"Filter to one or more collateral token addresses.","in":"query","name":"collateral_tokens","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter to one or more market ids. Market ids are per chain, so combine with `chain_id` to target one chain.","in":"query","name":"market_id","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Minimum `lltv_wad` (1e18 = 100%).","in":"query","name":"lltv_wad_gte","required":false,"schema":{"pattern":"^\\d+$","type":"string"}},{"description":"Maximum `lltv_wad` (1e18 = 100%).","in":"query","name":"lltv_wad_lte","required":false,"schema":{"pattern":"^\\d+$","type":"string"}},{"description":"Sort key. `market_id` orders by `(chain_id, market_id)`; `lltv_wad` orders by immutable market configuration. Both break ties by `(chain_id, market_id)`.","in":"query","name":"sort_by","required":false,"schema":{"default":"market_id","enum":["market_id","lltv_wad"],"type":"string"}},{"description":"Sort direction. Defaults to `asc` for `market_id` and `desc` for every other key. `market_id` supports `asc` only.","in":"query","name":"sort_direction","required":false,"schema":{"enum":["asc","desc"],"type":"string"}},{"description":"Filter to markets present in Morpho's public registry (`true`) or absent from it (`false`).","in":"query","name":"listed","required":false,"schema":{"enum":["true","false"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketListResponse"}}},"description":"Cursor-paginated list of Morpho Blue markets."}},"summary":"List markets","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}":{"get":{"description":"Morpho Blue market configuration: loan and collateral tokens, oracle, IRM, and liquidation LTV. Values are immutable for the lifetime of the market.","operationId":"MarketRootController_getRoot","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketRootResponse"}}},"description":""}},"summary":"Get market","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/apy-averages":{"get":{"description":"Average supply and borrow APYs for a Morpho Blue market over fixed historical windows on the v0 REST API. Values exclude rewards.","operationId":"MarketApyAveragesController_getApyAverages","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"borrow_apy_averages":{"1y":0.0324,"24h":0.0421,"30d":0.0405,"6h":0.0425,"7d":0.0413,"90d":0.0398},"chain_id":1,"last_indexed_block":"19847234","market_id":"0xb1adceddb2941033a02dd819a3b9636a8c6f1cd1c2cd1add34e3c7b1f6c0fe25","supply_apy_averages":{"1y":0.0324,"24h":0.0421,"30d":0.0405,"6h":0.0425,"7d":0.0413,"90d":0.0398}}},"schema":{"$ref":"#/components/schemas/MarketApyAveragesResponseDto"}}},"description":""}},"summary":"Get market APY averages","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/apy-averages\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/apy-averages`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/apy/history":{"get":{"description":"Historical supply and borrow APYs for a Morpho Blue market. 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. six_hours selects a six-hour result range with hourly samples and a trailing six-hour APY averaging window; the range starts at the later of creation or six hours ago, with samples starting at the next top of hour. Points that do not have enough historical data for the derived window are omitted.","operationId":"MarketApyHistoryController_getApyHistory","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}},{"description":"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. six_hours selects a six-hour result range with hourly samples and a trailing six-hour APY averaging window; the range starts at the later of creation or six hours ago, with samples starting at the next top of hour. Points that do not have enough historical data for the derived window are omitted.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception","six_hours"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"borrow_apy":0.0612,"supply_apy":0.0421,"timestamp":1729900800},{"borrow_apy":0.0608,"supply_apy":0.0418,"timestamp":1729987200}],"last_indexed_block":"19847234","params":{"chain_id":"1","market_id":"0xb323495f7e4148be5643a4ea4a8221eef163e4bccfded827a6f46947d7ad9afb"}},"schema":{"$ref":"#/components/schemas/MarketApyHistoryResponse"}}},"description":""}},"summary":"Get market APY history","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/apy/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/apy/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/liquidity":{"get":{"description":"Current Morpho Blue market liquidity and Public Allocator V2 reallocation capacity at one SDK simulation timestamp.","operationId":"MarketLiquidityController_getLiquidity","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketLiquidityResponse"}}},"description":""}},"summary":"Get market liquidity","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/liquidity\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/liquidity`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/public-allocator-vaults":{"get":{"description":"Public Allocator V2 candidates for a Morpho Blue market. Returns one row per vault and adapter candidate, without aggregation. Order is unspecified. Returns an empty list when the chain has no Public Allocator V2 deployment or no candidates exist.","operationId":"getBlueMarketPublicAllocatorVaults","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"absolute_cap":"1000000000","adapter_address":"0x2222222222222222222222222222222222222222","can_pull_from_idle":false,"can_pull_from_market":true,"cap_id":"0x3333333333333333333333333333333333333333333333333333333333333333","penalty_wad":"10000000000000000","public_allocator_address":"0x4444444444444444444444444444444444444444","vault_address":"0x1111111111111111111111111111111111111111"}],"last_indexed_block":"19847234"},"schema":{"$ref":"#/components/schemas/MarketPublicAllocatorVaultsResponse"}}},"description":""},"404":{"description":"Market not found"}},"summary":"Get Public Allocator V2 candidate vaults","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/public-allocator-vaults\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/public-allocator-vaults`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/state":{"get":{"description":"Live state of a Morpho Blue market: total supply and borrow assets, shares, fee, and AdaptiveCurveIRM rate at target.","operationId":"MarketStateController_getState","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketStateResponse"}}},"description":""}},"summary":"Get market state","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/state\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/state`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/state/history":{"get":{"description":"Historical state of a Morpho Blue market: total supply and borrow assets and shares, and total collateral assets.","operationId":"MarketStateHistoryController_getStateHistory","parameters":[{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"timestamp":1729900800,"total_borrow_assets":"84200000000000","total_borrow_shares":"83500000000000000000","total_collateral_assets":"41500000000000000000000","total_supply_assets":"119800000000000","total_supply_shares":"118300000000000000000"},{"timestamp":1729987200,"total_borrow_assets":"85000000000000","total_borrow_shares":"84200000000000000000","total_collateral_assets":"42000000000000000000000","total_supply_assets":"120500000000000","total_supply_shares":"118900000000000000000"}],"last_indexed_block":"19847234","params":{"chain_id":"1","market_id":"0xb323495f7e4148be5643a4ea4a8221eef163e4bccfded827a6f46947d7ad9afb"}},"schema":{"$ref":"#/components/schemas/MarketStateHistoryResponse"}}},"description":""}},"summary":"Get market state history","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/state/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/state/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/users/{user-address}/position":{"get":{"description":"A user's live position in a Morpho Blue market: collateral deposited, supply shares, and borrow shares.","operationId":"UserMarketPositionController_getPosition","parameters":[{"description":"Position owner address. Example: 0x0774b5B15B0CEe5E2e14814CCF4d4611fF78CcF5.","example":"0x0774b5B15B0CEe5E2e14814CCF4d4611fF78CcF5","in":"path","name":"user-address","required":true,"schema":{"example":"0x0774b5B15B0CEe5E2e14814CCF4d4611fF78CcF5","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0x15bb2a6af0c909eed19fb1f2ceeead34ecbdcba626de752c6b09389ee14eec32.","example":"1:0x15bb2a6af0c909eed19fb1f2ceeead34ecbdcba626de752c6b09389ee14eec32","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0x15bb2a6af0c909eed19fb1f2ceeead34ecbdcba626de752c6b09389ee14eec32","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMarketPositionResponse"}}},"description":""},"404":{"description":"No position exists for the user in the selected market."}},"summary":"User market position","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0x15bb2a6af0c909eed19fb1f2ceeead34ecbdcba626de752c6b09389ee14eec32\"\nUSER_ADDRESS=\"0x0774b5B15B0CEe5E2e14814CCF4d4611fF78CcF5\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/users/${USER_ADDRESS}/position\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0x15bb2a6af0c909eed19fb1f2ceeead34ecbdcba626de752c6b09389ee14eec32\";\nconst userAddress = \"0x0774b5B15B0CEe5E2e14814CCF4d4611fF78CcF5\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/users/${userAddress}/position`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/users/{user-address}/position/history":{"get":{"description":"A user's historical position in a Morpho Blue market: collateral deposited, supply shares, and borrow shares.","operationId":"UserMarketPositionHistoryController_getPositionHistory","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"borrow_shares":"300000000000000000","collateral_assets":"1000000000000000000","supply_shares":"2000000000000000000","timestamp":1729900800},{"borrow_shares":"250000000000000000","collateral_assets":"1100000000000000000","supply_shares":"2000000000000000000","timestamp":1729987200}],"last_indexed_block":"19847234","params":{"chain_id":"1","market_id":"0xb323495f7e4148be5643a4ea4a8221eef163e4bccfded827a6f46947d7ad9afb","user_address":"0x0000000000000000000000000000000000000001"}},"schema":{"$ref":"#/components/schemas/UserMarketPositionHistoryResponse"}}},"description":""}},"summary":"User market position history","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/users/${USER_ADDRESS}/position/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/users/${userAddress}/position/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/markets/{market-selector}/users/{user-address}/position/performance":{"get":{"description":"Average-cost realized and unrealized Morpho Blue supply earnings and borrow costs. External rewards are excluded.","operationId":"UserMarketPositionPerformanceController_getPerformance","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<market_id>. Example: 1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342.","example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","in":"path","name":"market-selector","required":true,"schema":{"example":"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","format":"<chain_id>:<market_id>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"accounting_method":"average_cost","borrow_cost_on_capital":0.00969,"borrow_net_cost_assets":"82354123","chain_id":1,"last_indexed_block":"19847234","market_id":"0xb1adceddb2941033a02dd819a3b9636a8c6f1cd1c2cd1add34e3c7b1f6c0fe25","supply_net_earnings_assets":"1124530000","supply_return_on_capital":0.02249,"user_address":"0x71C7656EC7ab88b098defB751B7401B5f6d8976F"}},"schema":{"$ref":"#/components/schemas/UserMarketPositionPerformanceResponse"}}},"description":""}},"summary":"User market position performance","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nMARKET_SELECTOR=\"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/blue/markets/${MARKET_SELECTOR}/users/${USER_ADDRESS}/position/performance\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst marketSelector = \"1:0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/blue/markets/${marketSelector}/users/${userAddress}/position/performance`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/blue/users/{user-address}/positions":{"get":{"description":"Cursor-paginated list of a user's Morpho Blue market positions across exposed chains, one row per market the realtime position store holds for the user, listed or unlisted. By default (`active_only=true`), only positions with non-zero supply shares, borrow shares or collateral are returned. With `active_only=false`, positions the user has fully exited are also returned, with zero balances. Positions in blacklisted markets are removed from the store and never returned. Results can be filtered with chain_ids and market_ids. Pagination is weakly consistent and not snapshot-isolated: continuation pages re-evaluate realtime state, so changes to balances, active status or membership may omit or repeat rows. The response does not carry an indexed block.","operationId":"UserMarketPositionListController_list","parameters":[{"description":"User address to list positions for. Lowercase input is checksummed. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Comma-separated EVM chain identifiers to filter on. Defaults to every exposed chain.","in":"query","name":"chain_ids","required":false,"schema":{"items":{"enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Comma-separated Morpho Blue market identifiers to filter on.","in":"query","name":"market_ids","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"When true (default), excludes positions with zero supply shares, borrow shares, and collateral assets. When false, also returns fully exited positions with zero balances.","in":"query","name":"active_only","required":false,"schema":{"default":"true","enum":["true","false"],"type":"string"}},{"description":"Sort field for cursor pagination.","in":"query","name":"sort_by","required":false,"schema":{"default":"market_id","enum":["market_id","supply_shares","borrow_shares","collateral_assets"],"type":"string"}},{"description":"Sort direction.","in":"query","name":"sort_direction","required":false,"schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"description":"Maximum number of positions to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque cursor returned by a previous page. Encodes the sort field, sort direction, user address and filter set; changing any of them invalidates it. Do not parse it.","in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"borrow_shares":"45000000000000000000000","chain_id":1,"collateral_assets":"12500000000000000000","market_id":"0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","supply_shares":"0"}],"params":{"user_address":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"}},"schema":{"$ref":"#/components/schemas/UserMarketPositionsResponse"}}},"description":""}},"summary":"List user Blue positions","tags":["Blue"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/blue/users/${USER_ADDRESS}/positions\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/blue/users/${userAddress}/positions`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/chains":{"get":{"description":"Fully supported EVM chains exposed by the Core REST API, with the chain id, network name, the protocols deployed on the chain, and the last block fully processed by all realtime service jobs for the chain.","operationId":"ChainsController_getChains","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainsResponse"}}},"description":""}},"summary":"Get chains","tags":["Chains"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\n\ncurl -sS \"${BASE_URL}/v0/chains\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\n\nconst url = new URL(`${baseUrl}/v0/chains`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/curators":{"get":{"description":"Cursor-paginated list of curator identities from Morpho's curator registry, `morpho-org/morpho-blue-api-metadata/data/curators-listing.json`, the same source as `GET /v0/curators/{curator-selector}/details`. Use it to discover curators before you know a curator address; each item groups the curator's registered addresses across chains.\n\n**Global registry metadata, not on-chain facts.** `curator_id`, `name`, `image_url` and `verified` are editorial values Morpho maintains in the registry. They are an explicit exception to Core's facts-only rule, like the details route. `verified` is Morpho's registry flag, not an on-chain property, and a registry address is not proof that it holds a curator role on any vault.\n\n**Membership.** A curator is listed when it has at least one registered address on a chain in `chain_ids` (default: every chain Core exposes). Unverified curators are included unless `verified=true`. `addresses` always lists the curator's addresses on every exposed chain, so filtering by chain does not split an identity.\n\n**Not here.** Socials are on the details route. AUM, rankings and other provider-dependent data are not part of this route.\n\n**Pagination.** Items are sorted by `curator_id`. Pass `cursor` back verbatim on the next call; a `null` cursor means the last page. The cursor is bound to the filter set that produced it, so changing filters is a 400. Pages are offsets into the live registry, so a registry change between calls can shift items across pages.\n\n**Freshness.** The registry syncs about every five minutes, lookups are cached for up to five minutes, and responses may be CDN-cached for up to five minutes.","operationId":"getCurators","parameters":[{"description":"Only curators whose registry `verified` flag matches. Omit to list verified and unverified curators.","in":"query","name":"verified","required":false,"schema":{"enum":["true","false"],"type":"string"}},{"description":"Only curators with at least one registered address on these chains. Defaults to every chain Core exposes.","in":"query","name":"chain_ids","required":false,"schema":{"items":{"enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"}},{"description":"Maximum number of curators to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Opaque cursor from a previous page response. Bound to the filter set that produced it.","in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"addresses":[{"chain_id":1,"curator_address":"0x827e86072B06674a077f592A531dcE4590aDeCdB"},{"chain_id":8453,"curator_address":"0x0A0e559bc3b0950a7e448F0d4894db195b9cf8DD"}],"curator_id":"steakhouse-financial","image_url":"https://cdn.morpho.org/v2/assets/images/steakhouse.svg","name":"Steakhouse Financial","verified":true}]},"schema":{"$ref":"#/components/schemas/CoreCuratorListResponse"}}},"description":""},"400":{"description":"Malformed or replayed cursor (`INVALID_CURSOR`), an unsupported or hidden chain id, a bad `limit`, or a non-boolean `verified`."}},"summary":"List curators","tags":["Curators"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\n\ncurl -sS \"${BASE_URL}/v0/curators\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\n\nconst url = new URL(`${baseUrl}/v0/curators`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/curators/{curator-selector}/details":{"get":{"description":"Resolve curator details using the selector `<chain_id>:<curator_address>`, where the address is the vault's on-chain `curator` role. This joins directly from Core Vault V1 and V2 responses, which remain unchanged and expose the address only.\n\n`name`, `logo_uri`, and `socials` are editorial metadata from Morpho's curator registry, `morpho-org/morpho-blue-api-metadata/data/curators-listing.json`, not on-chain facts. This is an explicit exception to Core's facts-only rule. The registry syncs about every five minutes, lookups are cached for up to five minutes, and responses may be CDN-cached for up to five minutes, so a registry change can take up to about fifteen minutes to appear.\n\nResults are every curator registry profile registered to the supplied chain and address. They are registry matches, not a verified or vault-scoped attribution: they can include unverified profiles and owner-only profiles, which the response does not distinguish. GraphQL `Vault.state.curators` / `VaultV2.curators` resolve curators per vault instead: they return none unless the vault was ever listed and its owner address has a registry profile, combine the owner's and curator's profiles, drop owner-only profiles, and fall back to the underlying V1 vault for a V2 fee wrapper. This route alone does not reproduce those vault-scoped results.\n\nA 404 means the selected chain is unsupported or not exposed by Core.","operationId":"getCuratorDetails","parameters":[{"description":"Selector formatted as <chain_id>:<curator_address>. Example: 1:0x827e86072B06674a077f592A531dcE4590aDeCdB.","example":"1:0x827e86072B06674a077f592A531dcE4590aDeCdB","in":"path","name":"curator-selector","required":true,"schema":{"example":"1:0x827e86072B06674a077f592A531dcE4590aDeCdB","format":"<chain_id>:<curator_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"chain_id":1,"curator_address":"0x827e86072B06674a077f592A531dcE4590aDeCdB","curators":[{"id":"steakhouse-financial","logo_uri":"https://cdn.morpho.org/v2/assets/images/steakhouse.svg","name":"Steakhouse Financial","socials":[{"type":"url","url":"https://www.steakhouse.financial"}]}]}},"schema":{"$ref":"#/components/schemas/CoreCuratorDetailsResponse"}}},"description":"Curator profiles registered to the selected chain and address; `curators` may be empty or hold several profiles when registry entries share an address."},"404":{"description":"The selected chain is unsupported or not exposed by Core."}},"summary":"Get curator details","tags":["Curators"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nCURATOR_SELECTOR=\"<chain_id>:<curator_address>\"\n\ncurl -sS \"${BASE_URL}/v0/curators/${CURATOR_SELECTOR}/details\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst curatorSelector = \"<chain_id>:<curator_address>\";\n\nconst url = new URL(`${baseUrl}/v0/curators/${curatorSelector}/details`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/oracles/{oracle-selector}/state":{"get":{"description":"Latest indexed state of an oracle: quote, onchain update timestamp, and indexed block.","operationId":"OracleStateController_getState","parameters":[{"description":"Selector formatted as <chain_id>:<oracle_address>. Example: 1:0x2a01EB9496094dA03c4E364Def50f5aD1280AD72.","example":"1:0x2a01EB9496094dA03c4E364Def50f5aD1280AD72","in":"path","name":"oracle-selector","required":true,"schema":{"example":"1:0x2a01EB9496094dA03c4E364Def50f5aD1280AD72","format":"<chain_id>:<oracle_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"chain_id":1,"last_indexed_block":"19700042","last_updated_at":"1717000100","oracle_address":"0x2a01EB9496094dA03c4E364Def50f5aD1280AD72","price":"1150750000000000000000000000000000000"}},"schema":{"$ref":"#/components/schemas/OracleStateResponse"}}},"description":""}},"summary":"Get oracle state","tags":["Oracles"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nORACLE_SELECTOR=\"<chain_id>:<oracle_address>\"\n\ncurl -sS \"${BASE_URL}/v0/oracles/${ORACLE_SELECTOR}/state\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst oracleSelector = \"<chain_id>:<oracle_address>\";\n\nconst url = new URL(`${baseUrl}/v0/oracles/${oracleSelector}/state`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/tokens/{token-selector}":{"get":{"description":"ERC-20 token identity and metadata: chain, address, name, symbol, decimals, logo, and tags.","operationId":"TokenRootController_getRoot","parameters":[{"description":"Selector formatted as <chain_id>:<address>. Example: 8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.","example":"8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","in":"path","name":"token-selector","required":true,"schema":{"example":"8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","format":"<chain_id>:<address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRootResponse"}}},"description":""}},"summary":"Get token","tags":["Token"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nTOKEN_SELECTOR=\"<chain_id>:<address>\"\n\ncurl -sS \"${BASE_URL}/v0/tokens/${TOKEN_SELECTOR}\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst tokenSelector = \"<chain_id>:<address>\";\n\nconst url = new URL(`${baseUrl}/v0/tokens/${tokenSelector}`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/tokens/{token-selector}/price":{"get":{"description":"Canonical spot price of an ERC-20 token in USD, sourced from hourly price feeds.","operationId":"TokenPriceController_getPrice","parameters":[{"description":"Selector formatted as <chain_id>:<address>. Example: 8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.","example":"8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","in":"path","name":"token-selector","required":true,"schema":{"example":"8453:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","format":"<chain_id>:<address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPriceResponse"}}},"description":"Known token with an available USD price."},"206":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPriceResponse"}}},"description":"Known token that the API cannot currently price. Price, timestamp, and provider are null."},"404":{"description":"Token is not known by the API."}},"summary":"Get token price","tags":["Token"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nTOKEN_SELECTOR=\"<chain_id>:<address>\"\n\ncurl -sS \"${BASE_URL}/v0/tokens/${TOKEN_SELECTOR}/price\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst tokenSelector = \"<chain_id>:<address>\";\n\nconst url = new URL(`${baseUrl}/v0/tokens/${tokenSelector}/price`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1":{"get":{"description":"Cursor-paginated list of listed Morpho Vault V1 instances across every supported chain: identity, deployment facts, the performance-fee setup and the owner / curator roles. Enough to build and rank a vault directory without a follow-up call per row; `{chain-id}:{vault_address}` on each item addresses the detail routes.\n\n**Membership is gated on listing.** A V1 vault appears once it is promoted, or once a Vault V2 references it through a `MorphoVaultV1Adapter`. This is therefore not a complete enumeration of indexed Vault V1 instances, and its contents can change with no on-chain event. Unlisted vaults remain reachable through `GET /v0/vaults-v1/{chain-id}:{vault-address}`.\n\n**Roles and filters.** Roles are factual onchain configuration: owner (`owner()`), curator (`curator()`), guardian (`guardian()`) and enabled allocator (`isAllocator(address)` is true). Address lists match any address within that role (OR); different filters, including different roles, combine with AND. Allocator collections are not embedded in list items.\n\n**Not here.** Live state (`total_assets`, `share_price_ray`) is on `…/state` and APY on `…/apy`; the underlying token's name, symbol and decimals are on `GET /v0/tokens/{chain-id}:{address}`; `skim_recipient`, `timelock_seconds` and pending governance state are on the single-vault lookup.\n\n**Pagination.** Pass `cursor` back verbatim on the next call; a `null` cursor means the last page. The cursor is bound to both the sort and the filter set that produced it, so changing either is a 400 rather than a silently wrong page.\n\n**Freshness.** Every field is configuration that changes only on a governance action or a new deployment, so the payload does not move between blocks and carries no `last_indexed_block`. Use `GET /v0/chains` for per-chain indexer tips.","operationId":"getVaultsV1","parameters":[{"description":"Opaque cursor from a previous page response. Bound to the sort and filter set that produced it.","in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}},{"description":"Maximum number of vaults to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Sort key. `address` sorts on the `(chain_id, vault_address)` tiebreak. `name` compares the first 512 characters, with ties broken by chain id and vault address.","in":"query","name":"sort_by","required":false,"schema":{"default":"address","enum":["address","creation_timestamp","creation_block_number","name","performance_fee_wad"],"type":"string"}},{"description":"Sort direction. Defaults to `asc` for `address` and `name`, `desc` for `creation_timestamp`, `creation_block_number` and `performance_fee_wad`.","in":"query","name":"sort_direction","required":false,"schema":{"enum":["asc","desc"],"type":"string"}},{"description":"Filter by chain ids. Required when any address filter is provided.","in":"query","name":"chain_ids","required":false,"schema":{"items":{"enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"}},{"description":"Filter by underlying asset address. Combine with chain_ids; lowercase input is checksummed.","in":"query","name":"asset_addresses","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter by deploying factory address. Combine with chain_ids; lowercase input is checksummed.","in":"query","name":"factory_addresses","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter by current owner. Combine with chain_ids; lowercase input is checksummed.","in":"query","name":"owners","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter by current curator. Combine with chain_ids; lowercase input is checksummed.","in":"query","name":"curators","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter by current guardian (guardian()), factual onchain data. Combine with chain_ids; lowercase input is checksummed. Addresses within a filter combine with OR; different filters combine with AND.","in":"query","name":"guardians","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter by currently enabled allocator (isAllocator(address) is true), factual onchain data, not historical or revoked permissions. Combine with chain_ids; lowercase input is checksummed. Addresses within a filter combine with OR; different filters combine with AND.","in":"query","name":"allocators","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"}},{"description":"Filter by factory lineage.","in":"query","name":"versions","required":false,"schema":{"items":{"enum":["1.0","1.1"],"type":"string"},"maxItems":100,"type":"array"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":"eyJzIjoiYWRkcmVzcyIsImQiOiJhc2MiLCJ2IjoiMHhCRUVGMDE3MzVjMTMyQWRhNDZBQTlhQTRjNTQ2MjNjQUE5MkE2NENCIiwidk51bGwiOmZhbHNlLCJpIjpbMSwiMHhCRUVGMDE3MzVjMTMyQWRhNDZBQTlhQTRjNTQ2MjNjQUE5MkE2NENCIl0sImYiOiJjMmYwYTEifQ","data":[{"asset_address":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","chain_id":1,"creation_block_number":"18928285","creation_timestamp":1704500000,"creator_address":"0x255c7705e8BB334DfCae438197f7C4297988085a","curator":"0x827e86072B06674a077f592A531dcE4590aDeCdB","factory_address":"0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101","guardian":null,"name":"Steakhouse USDC","owner":"0x0A0e559bc3b0950a7e448F0d4894db195b9cf8DD","performance_fee_recipient":"0x255c7705e8BB334DfCae438197f7C4297988085a","performance_fee_wad":"50000000000000000","symbol":"steakUSDC","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","version":"1.0"}]},"schema":{"$ref":"#/components/schemas/VaultV1ListResponse"}}},"description":""},"400":{"description":"Malformed or replayed cursor (`INVALID_CURSOR`), an unsupported chain id, a bad `limit` or `sort_by`, a malformed address, or an array / cross-product limit exceeded."}},"summary":"List V1 vaults","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/users/{user-address}/positions":{"get":{"description":"Cursor-paginated discovery list of Morpho Vault V1 positions held by a user across exposed chains, including unlisted vaults. By default, only positions with non-zero shares are returned. With active_only=false, the list also returns zero-share rows for every vault in which the user has held shares, so a fully exited position stays discoverable with shares and assets of 0. Blacklisted vaults are the exception: their rows are removed from the index. Membership follows vault share Transfer events: a deposit is recorded for the share receiver, a withdrawal or redemption for the share owner, and a share transfer for both sender and recipient; an address that only sends assets on behalf of another receiver is not listed. Rows reflect the realtime position index, which is updated as those events are indexed; a position in a newly created vault appears once that vault itself has been indexed. Results can be filtered with chain_ids and vault_addresses. Pagination is weakly consistent and not snapshot-isolated: continuation pages re-evaluate realtime state, so changes to shares, assets, active status or membership may omit or repeat rows. last_indexed_block is freshness metadata only, not a pagination snapshot. Rows use the same position item shape as the singular Vault V1 user-position endpoint.","operationId":"UserVaultV1PositionListController_list","parameters":[{"description":"User address to list positions for. Lowercase input is checksummed. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Comma-separated EVM chain identifiers to filter on. Defaults to every exposed chain.","in":"query","name":"chain_ids","required":false,"schema":{"items":{"enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Comma-separated vault addresses to filter on.","in":"query","name":"vault_addresses","required":false,"schema":{"items":{"format":"address","type":"string"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"When true, excludes positions with zero shares. Defaults to true.","in":"query","name":"active_only","required":false,"schema":{"default":"true","enum":["true","false"],"type":"string"}},{"description":"Sort field for cursor pagination.","in":"query","name":"sort_by","required":false,"schema":{"default":"vault_address","enum":["vault_address","shares","assets"],"type":"string"}},{"description":"Sort direction.","in":"query","name":"sort_direction","required":false,"schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"description":"Maximum number of positions to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque seek cursor (maximum 4096 characters) returned by a previous page. Do not modify it or parse it. It is unsigned and untrusted, not an authorization boundary; the user and filters are reapplied on every page, and changing the collection, sort, user or filters invalidates it.","in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"assets":"1004300000000000000000","chain_id":1,"last_indexed_block":"23481902","shares":"980000000000000000000","vault_address":"0x38989BBA00BDF8181F4082995b3DEAe96163aC5D"}],"params":{"user_address":"0x821b0F1A2C3d4E5f6789aBcDeF0123456789AbCd"}},"schema":{"$ref":"#/components/schemas/UserVaultPositionsResponse"}}},"description":""}},"summary":"List user V1 vault positions","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/users/${USER_ADDRESS}/positions\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/users/${userAddress}/positions`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}":{"get":{"description":"Morpho Vault V1 configuration: identity (name, symbol, version), underlying asset, factory, fee setup, owner/curator/guardian roles, and timelock.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1RootController_getRoot","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","asset":{"address":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","decimals":6,"name":"USDCoin","symbol":"USDC"},"chain_id":1,"creation_block_number":"18928285","creator_address":"0x255c7705e8BB334DfCae438197f7C4297988085a","curator":"0x827e86072B06674a077f592A531dcE4590aDeCdB","factory_address":"0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101","fee_recipient":"0x255c7705e8BB334DfCae438197f7C4297988085a","fee_wad":"50000000000000000","guardian":"0xaa0500198B4425DfC4E272FbE42C8E64E21fc03d","last_indexed_block":"25475346","name":"Steakhouse USDC","owner":"0x0A0e559bc3b0950a7e448F0d4894db195b9cf8DD","skim_recipient":null,"symbol":"steakUSDC","timelock_seconds":604800,"version":"1.0"}},"schema":{"$ref":"#/components/schemas/VaultV1RootResponse"}}},"description":""}},"summary":"Get V1 vault","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/allocations":{"get":{"description":"Current market allocation state of a Morpho Vault V1, including timelocked per-market cap changes and market removals. Covers every market with a current or pending relationship to the vault, ordered by ascending market id.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1AllocationsController_getAllocations","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"allocations":[{"market_id":"0xb323495f7e4148be5643a4ea4a8221eef163e4bccfded827a6f46947d7ad9afb","pending":{"removal":null,"supply_cap":null},"supply_assets":"62500000000000","supply_cap":"24519928653854221733733552434404946937899825954937634815","supply_queue_index":0,"supply_shares":"61800000000000000","withdraw_queue_index":2},{"market_id":"0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41","pending":{"removal":{"valid_at_timestamp":1730259200},"supply_cap":null},"supply_assets":"20000000000000","supply_cap":"30000000000000","supply_queue_index":1,"supply_shares":"19800000000000000","withdraw_queue_index":0},{"market_id":"0xfff1970c0ffae288764186fbb38a9171a17e98676744a1e345809cb8b9e73342","pending":{"removal":null,"supply_cap":{"valid_at_timestamp":1730172800,"value":"10000000000000"}},"supply_assets":"0","supply_cap":"0","supply_queue_index":null,"supply_shares":"0","withdraw_queue_index":null}],"chain_id":1,"last_indexed_block":"19847234","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultV1AllocationsResponse"}}},"description":""}},"summary":"Get V1 vault allocations","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/allocations\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/allocations`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/allocations/history":{"get":{"description":"Historical allocation state of a Morpho Vault V1 grouped by market: supplied assets, supplied shares, and supply cap.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1AllocationHistoryController_getAllocationHistory","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}},{"description":"Optional Morpho Blue market id filter.","in":"query","name":"market_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"history":[{"supply_assets":"51200000000000","supply_cap":"100000000000000","supply_shares":"51000000000000000000000","timestamp":1729900800},{"supply_assets":"52500000000000","supply_cap":"100000000000000","supply_shares":"52300000000000000000000","timestamp":1729987200}],"market_id":"0xb323495f7e4148be5643a4ea4a8221eef163e4bccfded827a6f46947d7ad9afb"}],"last_indexed_block":"19847234","params":{"chain_id":"1","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultV1AllocationHistoryResponse"}}},"description":""}},"summary":"Get V1 vault allocation history","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/allocations/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/allocations/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/allocators":{"get":{"description":"Active allocator addresses for a Morpho Vault V1 and the transaction hash and block number of each latest role grant.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"getVaultsV1Allocators","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"grant_block_number":"23335802","role_address":"0x0000aeB716a0DF7A9A1AAd119b772644Bc089dA8","tx_hash":"0x8ef18dd4c5ef94344d30852f61e3abb1ad6c7cc4deee3cb0b032598515ec3164"}],"last_indexed_block":"25501833","params":{"chain_id":1,"vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultRoleListResponse"}}},"description":""}},"summary":"Get V1 vault allocators","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/allocators\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/allocators`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/apy-averages":{"get":{"description":"Realized average APY of a Morpho Vault V1 over a predefined lookback period, derived from share price evolution. Post-fee, excludes rewards.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1ApyAveragesController_getApyAverages","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period for the APY calculation. Defaults to `six_hours`.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_hour","six_hours","one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"apy":0.03172317044232895,"chain_id":1,"last_indexed_block":"25475347","lookback":"six_hours","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultV1ApyAveragesResponse"}}},"description":""}},"summary":"Get V1 vault realized average APY","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/apy-averages?lookback=six_hours\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/apy-averages`);\nurl.searchParams.set(\"lookback\", \"six_hours\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/apy/history":{"get":{"description":"Historical APY for a Morpho Vault V1. 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. six_hours selects a six-hour result range with hourly samples and a trailing six-hour APY averaging window; the range starts at the later of creation or six hours ago, with samples starting at the next top of hour. A point closer to the vault's first hourly snapshot than its window averages from that snapshot instead; points less than one day after it are omitted, except six_hours requires at least six hours after that snapshot. Points whose averaging window starts or ends while the vault holds fewer than 1,000,000 raw units of its asset (1 USDC, 0.01 WBTC) are omitted, because a near-empty vault's share price is dominated by rounding.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1ApyHistoryController_getApyHistory","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"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. six_hours selects a six-hour result range with hourly samples and a trailing six-hour APY averaging window; the range starts at the later of creation or six hours ago, with samples starting at the next top of hour. A point closer to the vault's first hourly snapshot than its window averages from that snapshot instead; points less than one day after it are omitted, except six_hours requires at least six hours after that snapshot. Points whose averaging window starts or ends while the vault holds fewer than 1,000,000 raw units of its asset (1 USDC, 0.01 WBTC) are omitted, because a near-empty vault's share price is dominated by rounding.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception","six_hours"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"apy":0.0317,"timestamp":1729900800},{"apy":0.0321,"timestamp":1729987200}],"last_indexed_block":"19847234","params":{"chain_id":"1","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultV1ApyHistoryResponse"}}},"description":""}},"summary":"Get V1 vault APY history","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/apy/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/apy/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/pending-governance-actions":{"get":{"description":"Pending governance actions for a Morpho Vault V1, including timelocked cap increases, timelock decreases, guardian changes, market removals, and pending ownership transfers.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1PendingGovernanceActionsController_getPendingGovernanceActions","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"action_type":"set_cap","executable_at_timestamp":1730086400,"parameters":{"market_id":"0x3a85e619751152991742810df6ec69ce473daef99e28a64ab2340d7b7ccfee49","new_supply_cap":"1000000000000"},"submitted_transaction_hash":"0x1111111111111111111111111111111111111111111111111111111111111111"},{"action_type":"set_timelock","executable_at_timestamp":1730086400,"parameters":{"new_timelock_seconds":86400},"submitted_transaction_hash":"0x2222222222222222222222222222222222222222222222222222222222222222"},{"action_type":"set_guardian","executable_at_timestamp":1730086400,"parameters":{"new_guardian":"0x4b6Cb9Cf2A3C4cD8b3F8bF8E2Cb5B7d4C0F2Ee99"},"submitted_transaction_hash":"0x3333333333333333333333333333333333333333333333333333333333333333"},{"action_type":"remove_market","executable_at_timestamp":1730086400,"parameters":{"market_id":"0x3a85e619751152991742810df6ec69ce473daef99e28a64ab2340d7b7ccfee49"},"submitted_transaction_hash":"0x4444444444444444444444444444444444444444444444444444444444444444"},{"action_type":"transfer_ownership","executable_at_timestamp":null,"parameters":{"pending_owner":"0x4b6Cb9Cf2A3C4cD8b3F8bF8E2Cb5B7d4C0F2Ee99"},"submitted_transaction_hash":"0x5555555555555555555555555555555555555555555555555555555555555555"}],"last_indexed_block":"19847234","params":{"chain_id":1,"vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultV1PendingGovernanceActionsResponse"}}},"description":""}},"summary":"Get V1 vault pending governance actions","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/pending-governance-actions\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/pending-governance-actions`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/state":{"get":{"description":"Live state of a Morpho Vault V1: total assets and shares, and withdrawable assets.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1StateController_getState","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","chain_id":1,"last_indexed_block":"25475347","share_price_ray":"1132033263779470871876688077","total_assets":"94526725305307","total_supply":"83501720602903970503901222","withdrawable_assets":"52824490248986"}},"schema":{"$ref":"#/components/schemas/VaultV1StateResponse"}}},"description":""}},"summary":"Get V1 vault state","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/state\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/state`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/state/history":{"get":{"description":"Historical state of a Morpho Vault V1: total assets and shares, withdrawable assets, and share price.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV1StateHistoryController_getStateHistory","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"share_price_ray":"1012363526315789473000000000","timestamp":1729900800,"total_assets":"82710000000000","total_supply":"81700000000000000000000","withdrawable_assets":"9100000000000"},{"share_price_ray":"1017625458996328029000000000","timestamp":1729987200,"total_assets":"83140000000000","total_supply":"81700000000000000000000","withdrawable_assets":"9300000000000"}],"last_indexed_block":"19847234","params":{"chain_id":"1","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/VaultV1StateHistoryResponse"}}},"description":""}},"summary":"Get V1 vault state history","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/state/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/state/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/users/{user-address}/position":{"get":{"description":"A user's live position in a Morpho Vault V1: shares held and the equivalent value in underlying assets. Returns zero shares/assets for users who have never interacted with the vault.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV1PositionController_getPosition","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"assets":"0","chain_id":1,"last_indexed_block":"25475347","shares":"0","user_address":"0xABcdEFABcdEFabcdEfAbCdefabcdeFABcDEFabCD","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/UserVaultV1PositionResponse"}}},"description":""}},"summary":"User V1 vault position","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/users/${userAddress}/position`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/users/{user-address}/position/activity":{"get":{"description":"Discrete, log-derived events affecting a user's share balance in a Morpho Vault V1: deposits, withdrawals, and incoming or outgoing share transfers. Every event appears exactly once, ordered by block number then log index, most recent first. The signed sum of the share amounts across the complete feed equals the shares reported by the position endpoint; it holds only from inception to a null cursor, and not for the vault's fee recipient, whose balance also grows through fee mints this endpoint does not emit. Events that do not move the share balance are omitted.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV1PositionActivityController_getPositionActivity","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Maximum number of events to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Opaque cursor returned by a previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"block_number":"19640000","data":{"shares":"250000000000000000000","to_address":"0x3a9B4c5D6E7f8091A2b3c4D5E6F708192A3B4C5d"},"log_index":12,"timestamp":1712870400,"tx_hash":"0x4e3a9b0ff1c2d52d7e8c5e1d3b9a8f7e6c5b4a39281706f5e4d3c2b1a09f8e7d","type":"shares_transfer_out"},{"block_number":"19600500","data":{"assets":"302631578","on_behalf":"0x71C7656EC7ab88b098defB751B7401B5f6d8976F","receiver":"0x8ba1f109551bD432803012645Ac136ddd64DBA72","sender":"0x71C7656EC7ab88b098defB751B7401B5f6d8976F","shares":"300000000000000000000"},"log_index":4,"timestamp":1712396400,"tx_hash":"0x1f2e3d4c5b6a798807162534435261708f9e0d1c2b3a49586776859403f2e1d0","type":"withdraw"},{"block_number":"19550200","data":{"from_address":"0x8ba1f109551bD432803012645Ac136ddd64DBA72","shares":"500000000000000000000"},"log_index":88,"timestamp":1711792800,"tx_hash":"0xa1b2c3d4e5f60718293a4b5c6d7e8f900112233445566778899aabbccddeeff0","type":"shares_transfer_in"},{"block_number":"19500100","data":{"assets":"1000000000","on_behalf":"0x71C7656EC7ab88b098defB751B7401B5f6d8976F","sender":"0x4095F064B8d3c3548A3bebfd0Bbfd04750E30077","shares":"1000000000000000000000"},"log_index":16,"timestamp":1711191600,"tx_hash":"0xaabbccddeeff00112233445566778899aabbccddeeff00112233445566778899","type":"deposit"}],"last_indexed_block":"19847234","params":{"chain_id":1,"user_address":"0x71C7656EC7ab88b098defB751B7401B5f6d8976F","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/UserVaultV1PositionActivityResponse"}}},"description":""}},"summary":"User V1 vault position activity","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position/activity\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/users/${userAddress}/position/activity`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/users/{user-address}/position/history":{"get":{"description":"A user's historical position in a Morpho Vault V1: shares held and the equivalent value in underlying assets.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV1PositionHistoryController_getPositionHistory","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"assets":"1012000000","shares":"1000000000000000000000","timestamp":1729900800},{"assets":"1221000000","shares":"1200000000000000000000","timestamp":1729987200}],"last_indexed_block":"19847234","params":{"chain_id":"1","user_address":"0x0000000000000000000000000000000000000001","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/UserVaultV1PositionHistoryResponse"}}},"description":""}},"summary":"User V1 vault position history","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/users/${userAddress}/position/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v1/{vault-selector}/users/{user-address}/position/performance":{"get":{"description":"Realized + unrealized earnings of a user's Morpho Vault V1 position. Uses the `average_cost` accounting method: per-user share-price differentials are accumulated against the running share balance, with transfers netted into the same balance so that earnings reflect the user's economic exposure rather than their on-chain transaction count. `return_on_capital` is the time-weighted ratio of net earnings to capital deployed over the holding period (non-annualised). When `as_of_date` is set, the cutoff is the start of that UTC day. For an open position, valuation uses the last hourly share-price history point or the user's last position change, whichever is later, at or before the cutoff; it is not block-exact. `as_of.timestamp` is the effective valuation timestamp. For a position fully exited before the cutoff it is the last position change and the value is final. Invalid or future dates and unsupported chains return 400; unavailable history returns 503 or 404.\n\nVault selector example: `1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV1PositionPerformanceController_getPerformance","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.","example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"UTC calendar date in YYYY-MM-DD format; returns performance through 00:00:00Z on that date. Future dates are not supported.","in":"query","name":"as_of_date","required":false,"schema":{"example":"2024-05-17","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"accounting_method":"average_cost","chain_id":1,"last_indexed_block":"25475347","net_earnings_assets":"0","return_on_capital":null,"user_address":"0xABcdEFABcdEFabcdEfAbCdefabcdeFABcDEFabCD","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},"schema":{"$ref":"#/components/schemas/UserVaultV1PositionPerformanceResponse"}}},"description":""}},"summary":"User V1 vault position performance","tags":["Vaults V1"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v1/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position/performance\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/users/${userAddress}/position/performance`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2":{"get":{"description":"Cursor-paginated discovery list of the listed Morpho Vault V2 instances across all exposed chains. Rows carry vault identity, underlying asset, factory, creation parameters, fees and the owner and curator roles — enough to build a vault picker and to construct the <chain_id>:<vault_address> selector for every per-vault route. Live state, APY and allocations are served by the per-vault endpoints.","operationId":"VaultV2ListController_list","parameters":[{"description":"Opaque cursor returned by a previous page. Encodes the sort field, the sort direction and the filter set; changing any of them invalidates it. Do not parse it.","in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}},{"description":"Maximum number of vaults to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Comma-separated EVM chain identifiers to filter on. Defaults to every exposed chain. A chain that is unsupported or not exposed is rejected.","in":"query","name":"chain_ids","required":false,"schema":{"items":{"enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Comma-separated underlying asset addresses to filter on.","in":"query","name":"asset_addresses","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Comma-separated owner addresses to filter on.","in":"query","name":"owners","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Comma-separated curator addresses to filter on.","in":"query","name":"curators","required":false,"schema":{"items":{"type":"string"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Sort field. `name` is the only nullable key and always sorts nulls last; it compares the first 512 characters, with ties broken by chain id and vault address.","in":"query","name":"sort_by","required":false,"schema":{"default":"vault_address","enum":["vault_address","name","creation_timestamp","creation_block_number","management_fee_wad","performance_fee_wad"],"type":"string"}},{"description":"Sort direction.","in":"query","name":"sort_direction","required":false,"schema":{"default":"asc","enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"asset_address":"0xdAC17F958D2ee523a2206206994597C13D831ec7","chain_id":1,"creation_block_number":"24568955","creation_timestamp":1776950399,"curator":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","factory_address":"0xA1D94F746dEfa1928926b84fB2596c06926C0405","management_fee_recipient":null,"management_fee_wad":null,"name":"sky.money USDT Savings","owner":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","performance_fee_recipient":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","performance_fee_wad":"100000000000000000","symbol":"skyMoneyUsdtSavings","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","version":"2.0"}]},"schema":{"$ref":"#/components/schemas/VaultV2ListResponse"}}},"description":""}},"summary":"List V2 vaults","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/users/{user-address}/positions":{"get":{"description":"Cursor-paginated discovery list of Morpho Vault V2 positions held by a user across exposed chains. By default, only positions with non-zero shares are returned. With active_only=false, the list also returns zero-share rows for vaults the user has fully exited, listed or not, so it lists every Morpho Vault V2 position the realtime service has tracked for the user. Rows belong to the share holder: a deposit credits its onBehalf address and a share transfer credits its recipient; a full withdrawal, redemption or transfer out leaves the row with zero shares and zero assets. Rows update when the realtime service processes the user's Vault V2 deposit, withdrawal or transfer events; a scheduled re-sync every 10 minutes catches recently indexed events the live path missed. It scans only about the last 15 minutes of blocks before the chain head, so an event indexed after that window can stay stale until the user's next Vault V2 event or a backfill. Results can be filtered with chain_ids and vault_addresses. Fee wrappers and vaults that are not Morpho Vault V2s are not listed. Blacklisted vaults are removed eventually rather than at request time: a cleanup job deletes their position rows when the realtime scheduler starts and then every hour, so a newly blacklisted vault can stay listed until the next run. Unsupported vault adapters can stop a row from being created or refreshed, so those positions may be missing or stale. Pagination is weakly consistent and not snapshot-isolated: continuation pages re-evaluate realtime state, so changes to shares, assets, active status or membership may omit or repeat rows. last_indexed_block is freshness metadata only, not a pagination snapshot. Rows use the same position item shape as the singular Vault V2 user-position endpoint.","operationId":"UserVaultV2PositionListController_list","parameters":[{"description":"User address to list positions for. Lowercase input is checksummed. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Comma-separated EVM chain identifiers to filter on. Defaults to every exposed chain.","in":"query","name":"chain_ids","required":false,"schema":{"items":{"enum":[1,8453,747474,999,42161,137,130,10,480,143,988,4217,4663,5042,196],"exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"Comma-separated vault addresses to filter on.","in":"query","name":"vault_addresses","required":false,"schema":{"items":{"format":"address","type":"string"},"maxItems":100,"type":"array"},"style":"form","explode":false},{"description":"When true, excludes positions with zero shares. Defaults to true.","in":"query","name":"active_only","required":false,"schema":{"default":"true","enum":["true","false"],"type":"string"}},{"description":"Sort field for cursor pagination.","in":"query","name":"sort_by","required":false,"schema":{"default":"vault_address","enum":["vault_address","shares","assets"],"type":"string"}},{"description":"Sort direction.","in":"query","name":"sort_direction","required":false,"schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"description":"Maximum number of positions to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque seek cursor (maximum 4096 characters) returned by a previous page. Do not modify it or parse it. It is unsigned and untrusted, not an authorization boundary; the user and filters are reapplied on every page, and changing the collection, sort, user or filters invalidates it.","in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"assets":"1312500000000000000000","chain_id":1,"last_indexed_block":"23481902","shares":"1250000000000000000000","vault_address":"0xBEEFcf0BA6b4a04AB8C5B2Dd1E5c5F0E2A5F64CB"}],"params":{"user_address":"0x821b0F1A2C3d4E5f6789aBcDeF0123456789AbCd"}},"schema":{"$ref":"#/components/schemas/UserVaultPositionsResponse"}}},"description":""}},"summary":"List user V2 vault positions","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/users/${USER_ADDRESS}/positions\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/users/${userAddress}/positions`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}":{"get":{"description":"Morpho Vault V2 configuration: identity, underlying asset, factory, management/performance fees, owner and curator roles, per-function timelocks and abdications, adapter registry, liquidity adapter, and gating contracts.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2RootController_getRoot","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"adapter_registry":"0x3696c5eAe4a7Ffd04Ea163564571E9CD8Ed9364e","address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","asset":{"address":"0xdAC17F958D2ee523a2206206994597C13D831ec7","decimals":6,"name":"Tether USD","symbol":"USDT"},"chain_id":1,"creation_block_number":"24568955","curator":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","decimals_offset":12,"factory_address":"0xA1D94F746dEfa1928926b84fB2596c06926C0405","gates":{"receive_assets":null,"receive_shares":null,"send_assets":null,"send_shares":null},"governance":{"timelocks":[{"abdicated_at_timestamp":null,"function_name":"setIsAllocator","is_abdicated":false,"timelock_seconds":"604800"},{"abdicated_at_timestamp":null,"function_name":"setReceiveSharesGate","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setSendSharesGate","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setReceiveAssetsGate","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setSendAssetsGate","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setAdapterRegistry","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"addAdapter","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"removeAdapter","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"increaseTimelock","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"decreaseTimelock","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setPerformanceFee","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setManagementFee","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setPerformanceFeeRecipient","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setManagementFeeRecipient","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"increaseAbsoluteCap","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"increaseRelativeCap","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"setForceDeallocatePenalty","is_abdicated":false,"timelock_seconds":"0"},{"abdicated_at_timestamp":null,"function_name":"abdicate","is_abdicated":false,"timelock_seconds":"0"}]},"last_indexed_block":"25475349","liquidity_adapter":"0x6C5D5D47A39FE9f8CA14731a9A42bD31d64fb40D","liquidity_data":"0x3274643db77a064abd3bc851de77556a4ad2e2f502f4f0c80845fa8f909ecf0b","management_fee_recipient":null,"management_fee_wad":null,"max_rate_per_second_wad":"63419583967","name":"sky.money USDT Savings","owner":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","performance_fee_recipient":null,"performance_fee_wad":null,"symbol":"skyMoneyUsdtSavings","timelock_seconds":604800,"version":"2.0"}},"schema":{"$ref":"#/components/schemas/VaultV2RootResponse"}}},"description":""}},"summary":"Get V2 vault","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/allocations":{"get":{"description":"Adapter and cap allocation state of a Morpho Vault V2. Each entry is an active adapter, carrying the caps scoped to it and the assets currently allocated against each. Caps that are not scoped to a single adapter — collateral caps, and caps whose target could not be decoded — are reported separately under unscoped_caps. Caps pointing at an adapter that is no longer active are omitted.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"getVaultsV2Allocations","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"allocations":[{"adapter_address":"0x6C5D5D47A39FE9f8CA14731a9A42bD31d64fb40D","adapter_kind":"morpho_market_v1","caps":[{"absolute_cap":"115792089237316195423570985008687907853269984665640564039457584007913129639935","allocated_assets":"46000000000000","cap_data":"0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000006c5d5d47a39fe9f8ca14731a9a42bd31d64fb40d00000000000000000000000000000000000000000000000000000000000000047468697300000000000000000000000000000000000000000000000000000000","cap_id":"0xae24ee5060e52617daf39855191a6b07eb5921e80260e655a7948b507fa3956c","cap_type":"adapter","pending":{"absolute_cap":null,"relative_cap_wad":null},"real_assets":"46012500000000","relative_cap_wad":"1000000000000000000"},{"absolute_cap":"100000000000000","allocated_assets":"46000000000000","cap_data":"0x00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006c5d5d47a39fe9f8ca14731a9a42bd31d64fb40d000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca000000000000000000000000048f7e36eb6b826b2df4b2e630b62cd25e89e40e2000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000000000000000000000000000000bef55718ad600000000000000000000000000000000000000000000000000000000000000000011746869732f6d61726b6574506172616d73000000000000000000000000000000","cap_id":"0x1748c76027999bc7f3df33d1872ada5ac024707b6a700327037bacf7decc1e72","cap_type":"market_v1","expected_supply_assets":"46012500000000","market_id":"0xa5c50bd6e28de8b098defa897f677798f3f256959c2d47dabe8c5994ff53d8fd","pending":{"absolute_cap":null,"relative_cap_wad":{"valid_at_timestamp":1730259200,"value":"650000000000000000"}},"relative_cap_wad":"600000000000000000"}],"pending":{"removal":null},"target":{"type":"blue_market"}},{"adapter_address":"0x1122334455667788990011223344556677889900","adapter_kind":"morpho_vault_v1","caps":[{"absolute_cap":"300000000000000","allocated_assets":"18630689825420","cap_data":"0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000112233445566778899001122334455667788990000000000000000000000000000000000000000000000000000000000000000047468697300000000000000000000000000000000000000000000000000000000","cap_id":"0x6a9c9d91305f96fadf8665e7c7f702d152168ae534b03dc5163db557448c2030","cap_type":"adapter","pending":{"absolute_cap":{"valid_at_timestamp":1730259200,"value":"500000000000000"},"relative_cap_wad":null},"real_assets":"18631704120911","relative_cap_wad":"300000000000000000"}],"pending":{"removal":{"valid_at_timestamp":1730345600}},"target":{"type":"vault_v1","vault_address":"0xb576765fB15505433aF24FEe2c0325895C559FB2"}}],"chain_id":1,"last_indexed_block":"25475349","unscoped_caps":[{"absolute_cap":"80000000000000","allocated_assets":"46000000000000","cap_data":"0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000000000000000000000000000000000000000000f636f6c6c61746572616c546f6b656e0000000000000000000000000000000000","cap_id":"0x7fec14a26d24d99916f8800202b21d034d3b543349fc0e6632a4bd78a2891a20","cap_type":"collateral","collateral_address":"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0","pending":{"absolute_cap":null,"relative_cap_wad":null},"relative_cap_wad":"800000000000000000"}],"vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2AllocationsResponse"}}},"description":""}},"summary":"Get V2 vault allocations","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/allocations\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/allocations`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/allocators":{"get":{"description":"Active allocator addresses for a Morpho Vault V2 and the transaction hash and block number of each latest role grant.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"getVaultsV2Allocators","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"grant_block_number":"24569063","role_address":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","tx_hash":"0x55105b7f237a881f96b372475578aa8b237fc76d20371499b69104e00c0086ca"}],"last_indexed_block":"25501833","params":{"chain_id":1,"vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultRoleListResponse"}}},"description":""}},"summary":"Get V2 vault allocators","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/allocators\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/allocators`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/apy/history":{"get":{"description":"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. six_hours selects a six-hour result range with hourly samples and a trailing six-hour APY averaging window; the range starts at the later of creation or six hours ago, with samples starting at the next top of hour. A point closer to the vault's first hourly snapshot than its window averages from that snapshot instead; points less than one day after it are omitted, except six_hours requires at least six hours after that snapshot. Points whose averaging window starts or ends while the vault holds fewer than 1,000,000 raw units of its asset (1 USDC, 0.01 WBTC) are omitted, because a near-empty vault's share price is dominated by rounding.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2ApyHistoryController_getApyHistory","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"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. six_hours selects a six-hour result range with hourly samples and a trailing six-hour APY averaging window; the range starts at the later of creation or six hours ago, with samples starting at the next top of hour. A point closer to the vault's first hourly snapshot than its window averages from that snapshot instead; points less than one day after it are omitted, except six_hours requires at least six hours after that snapshot. Points whose averaging window starts or ends while the vault holds fewer than 1,000,000 raw units of its asset (1 USDC, 0.01 WBTC) are omitted, because a near-empty vault's share price is dominated by rounding.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception","six_hours"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"apy":0.0215,"timestamp":1729900800},{"apy":0.0219,"timestamp":1729987200}],"last_indexed_block":"19847234","params":{"chain_id":"1","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2ApyHistoryResponse"}}},"description":""}},"summary":"Get V2 vault APY history","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/apy/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/apy/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/caps/history":{"get":{"description":"Historical allocation and cap state of a Morpho Vault V2 grouped by cap.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2CapsHistoryController_getCapsHistory","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}},{"description":"Optional Vault V2 cap id filter.","in":"query","name":"cap_id","required":false,"schema":{"pattern":"^0x[a-fA-F0-9]{64}$","type":"string"}},{"description":"Optional Vault V2 cap type filter.","in":"query","name":"cap_type","required":false,"schema":{"enum":["adapter","collateral","marketV1","unknown"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"adapter_address":"0xFc98D101F6E2F7C27DB2bAEf7D803298F0e0043C","cap_id":"0x5c1f2a8a1c9b2f6a4c4b0e4e6f0a7a3d2c1b0a9f8e7d6c5b4a3f2e1d0c9b8a7f","cap_type":"adapter","history":[{"absolute_cap":"50000000000000","allocation":"12000000000000","relative_allocation":0.12,"relative_cap_wad":"300000000000000000","timestamp":1729900800}],"target":{"type":"vault_v1","vault_address":"0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB"}},{"adapter_address":"0x6C5D5D47A39FE9f8CA14731a9A42bD31d64fb40D","cap_id":"0x0a14a2d85b0d8b52f0991fdc2d47e9c469a70735c084f99f74d0113dd4b61899","cap_type":"marketV1","collateral_address":"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0","history":[{"absolute_cap":"100000000000000","allocation":"46000000000000","relative_allocation":0.46,"relative_cap_wad":"600000000000000000","timestamp":1729900800},{"absolute_cap":"100000000000000","allocation":"47500000000000","relative_allocation":0.475,"relative_cap_wad":"600000000000000000","timestamp":1729987200}],"market_id":"0xa5c50bd6e28de8b098defa897f677798f3f256959c2d47dabe8c5994ff53d8fd"}],"last_indexed_block":"25475349","params":{"chain_id":"1","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2CapsHistoryResponse"}}},"description":""}},"summary":"Get V2 vault caps history","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/caps/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/caps/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/pending-governance-actions":{"get":{"description":"Pending governance actions for a Morpho Vault V2, decoded from the on-chain timelock submit calldata. Unknown selectors are returned with null parameters.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2PendingGovernanceActionsController_getPendingGovernanceActions","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"action_type":"set_is_allocator","executable_at_timestamp":1730086400,"parameters":{"account":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","is_allocator":true},"submitted_transaction_hash":"0x1111111111111111111111111111111111111111111111111111111111111111"},{"action_type":"increase_timelock","executable_at_timestamp":1730086400,"parameters":{"new_duration_seconds":"604800","selector":"0xf6f98fd5"},"submitted_transaction_hash":"0x2222222222222222222222222222222222222222222222222222222222222222"},{"action_type":"increase_absolute_cap","executable_at_timestamp":1730086400,"parameters":{"id_data":"0x1234","new_absolute_cap":"1000000000"},"submitted_transaction_hash":"0x3333333333333333333333333333333333333333333333333333333333333333"},{"action_type":"unknown","executable_at_timestamp":1730172800,"parameters":null,"submitted_transaction_hash":"0x4444444444444444444444444444444444444444444444444444444444444444"}],"last_indexed_block":"19847234","params":{"chain_id":1,"vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2PendingGovernanceActionsResponse"}}},"description":""}},"summary":"Get V2 vault pending governance actions","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/pending-governance-actions\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/pending-governance-actions`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/sentinels":{"get":{"description":"Active sentinel addresses for a Morpho Vault V2 and the transaction hash and block number of each latest role grant.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"getVaultsV2Sentinels","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"grant_block_number":"24569065","role_address":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba","tx_hash":"0xcf8980c0f540e8965d9b25fe39e89c4abada2ced9d8a5ebbc69ed1395a05f25c"}],"last_indexed_block":"25501833","params":{"chain_id":1,"vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultRoleListResponse"}}},"description":""}},"summary":"Get V2 vault sentinels","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/sentinels\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/sentinels`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/state/history":{"get":{"description":"Historical state of a Morpho Vault V2: total assets and shares, withdrawable assets, allocated assets, idle assets, and share price.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2StateHistoryController_getStateHistory","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"allocated_assets":"79500000000000","idle_assets":"12500000000000","share_price_ray":"1008771929824561403000000000","timestamp":1729900800,"total_assets":"92000000000000","total_supply":"91200000000000000000000","withdrawable_assets":"12500000000000"},{"allocated_assets":"79200000000000","idle_assets":"13100000000000","share_price_ray":"1012061403508771929000000000","timestamp":1729987200,"total_assets":"92300000000000","total_supply":"91200000000000000000000","withdrawable_assets":"13100000000000"}],"last_indexed_block":"19847234","params":{"chain_id":"1","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2StateHistoryResponse"}}},"description":""}},"summary":"Get V2 vault state history","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/state/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/state/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/users/{user-address}/position":{"get":{"description":"A user's live position in a Morpho Vault V2: shares held and the equivalent value in underlying assets.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV2PositionController_getPosition","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"assets":"0","chain_id":1,"last_indexed_block":"25475349","shares":"0","user_address":"0xABcdEFABcdEFabcdEfAbCdefabcdeFABcDEFabCD","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/UserVaultV2PositionResponse"}}},"description":""}},"summary":"User V2 vault position","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/users/${userAddress}/position`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/users/{user-address}/position/activity":{"get":{"description":"Events that changed a user's share balance in a Morpho Vault V2, newest first, one row per event log.\n\nSigns: `deposit` and `shares_transfer_in` add shares, `withdraw` and `shares_transfer_out` remove them. Folding the whole feed with those signs returns the `shares` of the position endpoint at the same `last_indexed_block`; a partial window does not reconcile, and neither does the feed of a fee recipient, whose balance also grows through fee mints this endpoint does not emit.\n\n`assets` is never derived: it is present on `deposit` and `withdraw`, and absent on share transfers, whose ERC-20 log carries no asset amount.\n\nBundled transactions are reconciled: a share transfer to or from a bundler adapter that carries a bundled deposit or withdrawal is reported as that deposit or withdrawal.\n\nA self-transfer is omitted, since it changes no balance. Rows are therefore capped, not filled, by `limit`: keep paginating until `cursor` is null.\n\nCursors are bound to the selector and to the `type` filter of the request that produced them; replaying one with different filters returns 400.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV2PositionActivityController_getPositionActivity","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Maximum number of event logs to read.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Opaque cursor returned by a previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"description":"Restrict the feed to the given event types.","in":"query","name":"type","required":false,"schema":{"items":{"enum":["deposit","withdraw","shares_transfer_in","shares_transfer_out"],"type":"string"},"maxItems":4,"type":"array"}}],"responses":{"200":{"content":{"application/json":{"example":{"cursor":null,"data":[{"block_number":"19840000","data":{"shares":"250000000000000000000","to_address":"0x3F32bC09d41eE699844F8296e806417D6bf61Bba"},"log_index":12,"timestamp":1715270400,"tx_hash":"0x4e3a9b0ff1c2d52d7e8c5e1d3b9a8f7e6c5b4a39281706f5e4d3c2b1a09f8e7d","type":"shares_transfer_out"},{"block_number":"19800500","data":{"assets":"302631578","shares":"300000000000000000000"},"log_index":4,"timestamp":1714796400,"tx_hash":"0x1f2e3d4c5b6a798807162534435261708f9e0d1c2b3a49586776859403f2e1d0","type":"withdraw"},{"block_number":"19750200","data":{"from_address":"0x8Ba1f109551bD432803012645Ac136ddd64DBA72","shares":"500000000000000000000"},"log_index":88,"timestamp":1714192800,"tx_hash":"0xa1b2c3d4e5f60718293a4b5c6d7e8f900112233445566778899aabbccddeeff0","type":"shares_transfer_in"},{"block_number":"19700100","data":{"assets":"1000000000","shares":"1000000000000000000000"},"log_index":30,"timestamp":1713591600,"tx_hash":"0x99887766554433221100ffeeddccbbaa99887766554433221100ffeeddccbbaa","type":"deposit"}],"last_indexed_block":"19847234","params":{"chain_id":1,"user_address":"0x0000000000000000000000000000000000000001","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/UserVaultV2PositionActivityResponse"}}},"description":""}},"summary":"User V2 vault position activity","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position/activity\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/users/${userAddress}/position/activity`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/users/{user-address}/position/history":{"get":{"description":"A user's historical position in a Morpho Vault V2: shares held and the equivalent value in underlying assets.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV2PositionHistoryController_getPositionHistory","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period. Defaults to thirty_days. Historical sampling is selected automatically.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"assets":"1012000000","shares":"1000000000000000000000","timestamp":1729900800},{"assets":"1221000000","shares":"1200000000000000000000","timestamp":1729987200}],"last_indexed_block":"19847234","params":{"chain_id":"1","user_address":"0x0000000000000000000000000000000000000001","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/UserVaultV2PositionHistoryResponse"}}},"description":""}},"summary":"User V2 vault position history","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position/history?lookback=thirty_days\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/users/${userAddress}/position/history`);\nurl.searchParams.set(\"lookback\", \"thirty_days\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/users/{user-address}/position/performance":{"get":{"description":"Realized + unrealized earnings of a user's Morpho Vault V2 position. Uses the `average_cost` accounting method: per-user share-price differentials are accumulated against the running share balance, with transfers netted into the same balance so that earnings reflect the user's economic exposure rather than their on-chain transaction count. `return_on_capital` is the time-weighted ratio of net earnings to capital deployed over the holding period (non-annualised). When `as_of_date` is set, the cutoff is the start of that UTC day. For an open position, valuation uses the last hourly share-price history point or the user's last position change, whichever is later, at or before the cutoff; it is not block-exact. `as_of.timestamp` is the effective valuation timestamp. For a position fully exited before the cutoff it is the last position change and the value is final. Invalid or future dates and unsupported chains return 400; unavailable history returns 503 or 404.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"UserVaultV2PositionPerformanceController_getPerformance","parameters":[{"description":"Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.","example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","in":"path","name":"user-address","required":true,"schema":{"example":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","format":"address","type":"string"}},{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"UTC calendar date in YYYY-MM-DD format; returns performance through 00:00:00Z on that date. Future dates are not supported.","in":"query","name":"as_of_date","required":false,"schema":{"example":"2024-05-17","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"accounting_method":"average_cost","chain_id":1,"last_indexed_block":"25475349","net_earnings_assets":"0","return_on_capital":null,"user_address":"0xABcdEFABcdEFabcdEfAbCdefabcdeFABcDEFabCD","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/UserVaultV2PositionPerformanceResponse"}}},"description":""}},"summary":"User V2 vault position performance","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\nUSER_ADDRESS=\"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/users/${USER_ADDRESS}/position/performance\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\nconst userAddress = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/users/${userAddress}/position/performance`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v0/vaults-v2/{vault-selector}/withdrawal-options":{"get":{"description":"Immediately available assets and adapter-level force-deallocation capacity and penalty rates for a Morpho Vault V2.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2WithdrawalOptionsController_getWithdrawalOptions","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"adapter_penalties":[{"adapter_address":"0x1111111111111111111111111111111111111111","adapter_kind":"blue_market_adapter","force_deallocatable_assets":"60000000000000","penalty_rate_wad":"5000000000000000"}],"chain_id":1,"idle_assets":"12500000000000","liquidity_adapter_available_assets":"12500000000000","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2WithdrawalOptionsResponse"}}},"description":""}},"summary":"Get V2 vault withdrawal options","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v0/vaults-v2/${VAULT_SELECTOR}/withdrawal-options\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v0/vaults-v2/${vaultSelector}/withdrawal-options`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v1/vaults-v2/{vault-selector}/apy-averages":{"get":{"description":"Realized average APY of a Morpho Vault V2 over a predefined lookback period, derived from share price evolution.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2ApyAveragesController_getApyAverages","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}},{"description":"Lookback period for the APY calculation. Defaults to `six_hours`.","in":"query","name":"lookback","required":false,"schema":{"enum":["one_hour","six_hours","one_day","seven_days","thirty_days","ninety_days","one_year","inception"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"apy":0.021513718810443165,"chain_id":1,"last_indexed_block":"25475349","lookback":"six_hours","vault_address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11"}},"schema":{"$ref":"#/components/schemas/VaultV2ApyAveragesResponse"}}},"description":""}},"summary":"Get V2 vault realized average APY","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v1/vaults-v2/${VAULT_SELECTOR}/apy-averages?lookback=six_hours\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v1/vaults-v2/${vaultSelector}/apy-averages`);\nurl.searchParams.set(\"lookback\", \"six_hours\");\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}},"/v1/vaults-v2/{vault-selector}/state":{"get":{"description":"Live state of a Morpho Vault V2: total assets and shares, withdrawable assets, allocated assets, and idle assets.\n\nVault selector example: `1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11` (format: `<chain_id>:<vault_address>`; replace with the target vault).","operationId":"VaultV2StateController_getState","parameters":[{"description":"Selector formatted as <chain_id>:<vault_address>. Example: 1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11.","example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","in":"path","name":"vault-selector","required":true,"schema":{"example":"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","format":"<chain_id>:<vault_address>","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"address":"0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11","allocated_assets":"64630689825420","chain_id":1,"idle_assets":"0","last_accrual_timestamp":1783363079,"last_indexed_block":"25475349","share_price_ray":"1010120008024709698799907272","total_assets":"64630689825420","total_supply":"63983179535078553542936844","withdrawable_assets":"8833322907237"}},"schema":{"$ref":"#/components/schemas/VaultV2StateResponse"}}},"description":""}},"summary":"Get V2 vault state","tags":["Vaults V2"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"BASE_URL=\"${CORE_REST_BASE_URL:-https://api.morpho.org}\"\nMORPHO_API_KEY=\"<MORPHO_API_KEY>\"\nVAULT_SELECTOR=\"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\"\n\ncurl -sS \"${BASE_URL}/v1/vaults-v2/${VAULT_SELECTOR}/state\" \\\n  -H \"accept: application/json\" \\\n  -H \"x-api-key: ${MORPHO_API_KEY}\"","id":"curl"},{"label":"JavaScript","lang":"js","source":"const baseUrl = process.env.CORE_REST_BASE_URL ?? \"https://api.morpho.org\";\nconst apiKey = process.env.MORPHO_API_KEY ?? \"<MORPHO_API_KEY>\";\nconst vaultSelector = \"1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11\";\n\nconst url = new URL(`${baseUrl}/v1/vaults-v2/${vaultSelector}/state`);\n\nconst response = await fetch(url, {\n  headers: {\n    accept: \"application/json\",\n    \"x-api-key\": apiKey,\n  },\n});\nif (!response.ok) throw new Error(await response.text());\n\nconst body = await response.json();","id":"js"}]}}},"servers":[{"url":"https://api.morpho.org"}],"tags":[]}