Morpho Vaults
Query Morpho Vault API data for discovery, metrics, curation, roles, fee wrappers, positions, earnings, and historical allocation and yield.
How to query Morpho Vaults Data thanks to the API?
The examples below use the REST API.
- REST calls use public
GETrequests againsthttps://api.morpho.orgwith standard public rate limits. Entities are addressed by a<chainId>:<address>selector (e.g.1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB). REST returns single-entity reads — config, state, APY averages and history, allocation history, and positions — and exposes listed-vault discovery throughGET /v0/vaults-v1andGET /v0/vaults-v2, plus user-position lists throughGET /v0/vaults-v1/users/{user-address}/positionsandGET /v0/vaults-v2/users/{user-address}/positions; the V2 position list excludes fee wrappers, while unlisted-vault discovery, USD-denominated values, and reward APRs aren't available in the REST API yet.
Discovery and Listing
Vaults List
GET /v0/vaults-v2
curl -sS "https://api.morpho.org/v0/vaults-v2?chain_ids=1&limit=100" \
-H "accept: application/json"GET /v0/vaults-v1
curl -sS "https://api.morpho.org/v0/vaults-v1?chain_ids=1&limit=100" \
-H "accept: application/json"GET /v0/vaults-v1 and GET /v0/vaults-v2 return cursor-paginated listed-vault directories. These lists are not complete enumerations of indexed vaults: V1 membership is listing-gated, and V2 returns listed instances only. Unlisted-vault discovery isn't available in the REST API yet.
Vault Metrics
Total Deposits & Assets
All Vaults
GET /v1/vaults-v2/{vault-selector}/state
curl -sS "https://api.morpho.org/v1/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/state" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/state
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/state" \
-H "accept: application/json"REST returns one vault's totals. Enumerate listed vaults with GET /v0/vaults-v1 or GET /v0/vaults-v2, then call /state for each vault; unlisted-vault discovery and USD-denominated values aren't available in the REST API yet.
Specific Vault
GET /v1/vaults-v2/{vault-selector}/state
curl -sS "https://api.morpho.org/v1/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/state" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/state
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/state" \
-H "accept: application/json"Returns total_assets, total_supply, and withdrawable_assets; V2 also returns allocated_assets and idle_assets. USD-denominated values aren't available in the REST API yet.
APY (Native + Rewards)
All Vaults
GET /v1/vaults-v2/{vault-selector}/apy-averages
curl -sS "https://api.morpho.org/v1/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/apy-averages?lookback=six_hours" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/apy-averages
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/apy-averages?lookback=six_hours" \
-H "accept: application/json"/apy-averages returns the realized average apy from share-price evolution over the selected lookback (post-fee, excluding rewards). REST calculates one vault at a time; use the listed-vault routes for listed discovery. Unlisted-vault discovery and reward APRs aren't available in the REST API yet.
Specific Vault
GET /v1/vaults-v2/{vault-selector}/apy-averages
curl -sS "https://api.morpho.org/v1/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/apy-averages?lookback=six_hours" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/apy-averages
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/apy-averages?lookback=six_hours" \
-H "accept: application/json"/apy-averages returns the realized average apy from share-price evolution over ?lookback=<one_hour|six_hours|one_day|seven_days|thirty_days|ninety_days|one_year|inception> (post-fee, excluding rewards). Reward APRs aren't available in the REST API yet. Current market allocations are available through GET /v0/vaults-v1/{vault-selector}/allocations; V2 adapter and cap allocations are available through GET /v0/vaults-v2/{vault-selector}/allocations.
Share Price (Token Value)
All Vaults
GET /v1/vaults-v2/{vault-selector}/state
curl -sS "https://api.morpho.org/v1/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/state" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/state
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/state" \
-H "accept: application/json"/state returns share_price_ray — the normalized share price scaled by RAY (1e27), i.e. one whole share quoted in whole underlying tokens. Use the REST lists to enumerate listed vaults; unlisted-vault discovery and USD-denominated share price aren't available in the REST API yet.
Specific Vault
GET /v1/vaults-v2/{vault-selector}/state
curl -sS "https://api.morpho.org/v1/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/state" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/state
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/state" \
-H "accept: application/json"/state returns share_price_ray — the normalized share price scaled by RAY (1e27), i.e. one whole share quoted in whole underlying tokens. USD-denominated share price isn't available in the REST API yet.
Configuration & Curation
Vault Parameters
All Vaults
GET /v0/vaults-v2/{vault-selector}
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB" \
-H "accept: application/json"Vault config returns owner, curator, timelock_seconds, and fee setup (V1 adds guardian; V2 adds adapter_registry, liquidity_adapter, and gates). REST vault lists enumerate listed vaults only; unlisted-vault discovery remains unavailable. GET /v0/vaults-v1/{vault-selector}/allocators and GET /v0/vaults-v2/{vault-selector}/allocators list active allocators; GET /v0/vaults-v2/{vault-selector}/sentinels lists active sentinels. Each role route takes a <chain_id>:<vault_address> selector and returns the complete active role list without query filters, pagination, or a limit parameter. The response contains params.chain_id, params.vault_address, data, and last_indexed_block. Each data row has role_address, tx_hash, and grant_block_number (a decimal string) for the latest grant, including a re-grant after revocation.
GET /v0/curators discovers registry identities, sorted by curator_id, with optional verified (true or false) and chain_ids (up to 100) filters, limit (default 100, maximum 1000), and cursor. It returns data rows with curator_id, name, nullable image_url, verified, and addresses (chain_id, curator_address), plus a cursor that is null on the last page. The chain filter selects identities, not their returned addresses. Keep filters unchanged when passing the cursor; live registry updates can shift pages.
For registry details, combine the vault config's chain ID and on-chain curator address into <chain_id>:<curator_address> for GET /v0/curators/{curator-selector}/details. It returns data.chain_id, data.curator_address, and data.curators, whose entries contain id, name, nullable logo_uri, and socials (type, url); no matches yields an empty array. This route has no query filters or pagination. These are editorial registry matches for an address, not vault-scoped curator attribution or proof of a role: unverified and owner-only profiles may be included without distinction. Registry changes can take about fifteen minutes to appear. Vault-scoped curator attribution, listed status, and free-form vault metadata remain unavailable through these routes.
Specific Vault
GET /v0/vaults-v2/{vault-selector}
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB" \
-H "accept: application/json"Vault config returns owner, curator, timelock_seconds, and fee setup (V1 adds guardian; V2 adds adapter_registry, liquidity_adapter, and gates). REST vault lists enumerate listed vaults only; unlisted-vault discovery remains unavailable. GET /v0/vaults-v1/{vault-selector}/allocators and GET /v0/vaults-v2/{vault-selector}/allocators list active allocators; GET /v0/vaults-v2/{vault-selector}/sentinels lists active sentinels. Each role route takes a <chain_id>:<vault_address> selector and returns the complete active role list without query filters, pagination, or a limit parameter. The response contains params.chain_id, params.vault_address, data, and last_indexed_block. Each data row has role_address, tx_hash, and grant_block_number (a decimal string) for the latest grant, including a re-grant after revocation.
GET /v0/curators discovers registry identities, sorted by curator_id, with optional verified (true or false) and chain_ids (up to 100) filters, limit (default 100, maximum 1000), and cursor. It returns data rows with curator_id, name, nullable image_url, verified, and addresses (chain_id, curator_address), plus a cursor that is null on the last page. The chain filter selects identities, not their returned addresses. Keep filters unchanged when passing the cursor; live registry updates can shift pages.
For registry details, combine the vault config's chain ID and on-chain curator address into <chain_id>:<curator_address> for GET /v0/curators/{curator-selector}/details. It returns data.chain_id, data.curator_address, and data.curators, whose entries contain id, name, nullable logo_uri, and socials (type, url); no matches yields an empty array. This route has no query filters or pagination. These are editorial registry matches for an address, not vault-scoped curator attribution or proof of a role: unverified and owner-only profiles may be included without distinction. Registry changes can take about fifteen minutes to appear. Vault-scoped curator attribution, listed status, and free-form vault metadata remain unavailable through these routes.
Roles: Allocators & Sentinels
GET /v0/vaults-v2/{vault-selector}/allocators
GET /v0/vaults-v2/{vault-selector}/sentinels
# Allocators
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/allocators" \
-H "accept: application/json"GET /v0/vaults-v2/{vault-selector}/allocators lists active allocators; GET /v0/vaults-v2/{vault-selector}/sentinels lists active sentinels. Each role route takes a <chain_id>:<vault_address> selector and returns the complete active role list without query filters, pagination, or a limit parameter. The response contains params.chain_id, params.vault_address, data, and last_indexed_block. Each data row has role_address, tx_hash, and grant_block_number (a decimal string) for the latest grant, including a re-grant after revocation.
GET /v0/vaults-v1/{vault-selector}/allocators
# Allocators
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/allocators" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/allocators lists active allocators. Each role route takes a <chain_id>:<vault_address> selector and returns the complete active role list without query filters, pagination, or a limit parameter. The response contains params.chain_id, params.vault_address, data, and last_indexed_block. Each data row has role_address, tx_hash, and grant_block_number (a decimal string) for the latest grant, including a re-grant after revocation. Morpho Vaults V1 has no sentinel role.
Fee Wrapper
A Fee Wrapper is a Vault V2 configured in a specific, constrained mode that enables distribution channels to add a fee layer on top of an existing Morpho Vault V2.
FeeWrapper List
GET /v0/vaults-v2/{vault-selector}
curl -sS "https://api.morpho.org/v0/vaults-v2/8453:0xd4468EF3745c315949a97090eD27b3F73b9b7C02" \
-H "accept: application/json"A fee wrapper is a Vault V2 — read it by <chainId>:<address> via the V2 endpoint. Listing all fee wrappers (filter by type) isn't available in the REST API yet.
FeeWrapper Yield
GET /v0/vaults-v2/{vault-selector}
GET /v1/vaults-v2/{vault-selector}/apy-averages
# Config (performance / management fee setup)
curl -sS "https://api.morpho.org/v0/vaults-v2/8453:0xd4468EF3745c315949a97090eD27b3F73b9b7C02" \
-H "accept: application/json"
# Realized average APY
curl -sS "https://api.morpho.org/v1/vaults-v2/8453:0xd4468EF3745c315949a97090eD27b3F73b9b7C02/apy-averages?lookback=six_hours" \
-H "accept: application/json"The config route (GET /v0/vaults-v2/{selector}) returns performance_fee_wad, performance_fee_recipient, management_fee_wad, and management_fee_recipient; /apy-averages returns realized average APY for the selected lookback, and GET /v0/vaults-v1/{vault-selector}/state/history or GET /v0/vaults-v2/{vault-selector}/state/history returns timestamped historical share price (share_price_ray). Reward APRs aren't available in the REST API yet.
Position Tracking
Vault Users
Specific Vault
GET /v0/vaults-v2/{vault-selector}/users/{user-address}/position
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/users/{user-address}/position
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position" \
-H "accept: application/json"REST reads one (vault, user) position per request; use GET /v0/vaults-v1/users/{user-address}/positions or GET /v0/vaults-v2/users/{user-address}/positions to query a set of vaults at once. The V2 list excludes fee wrappers.
Set of Vaults
GET /v0/vaults-v2/users/{user-address}/positions
curl -sS "https://api.morpho.org/v0/vaults-v2/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/positions?chain_ids=1&vault_addresses=0x04422053aDDbc9bB2759b248B574e3FCA76Bc145" \
-H "accept: application/json"GET /v0/vaults-v1/users/{user-address}/positions
curl -sS "https://api.morpho.org/v0/vaults-v1/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/positions?chain_ids=1&vault_addresses=0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB" \
-H "accept: application/json"REST lists one user's positions across the requested vaults; the full user list for a vault isn't available in the REST API yet.
User Positions
User All Vaults Position
GET /v0/vaults-v2/users/{user-address}/positions
GET /v0/vaults-v1/users/{user-address}/positions
# Vault V2 positions
curl -sS "https://api.morpho.org/v0/vaults-v2/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/positions?chain_ids=1&active_only=true&limit=100" \
-H "accept: application/json"
# Vault V1 positions
curl -sS "https://api.morpho.org/v0/vaults-v1/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/positions?chain_ids=1&active_only=true&limit=100" \
-H "accept: application/json"REST lists every active vault position a user holds, separately for V1 and V2, with cursor pagination. The V2 list excludes fee wrappers.
User Market Position
GET /v0/vaults-v2/users/{user-address}/positions
GET /v0/vaults-v1/users/{user-address}/positions
# Vault V2 positions
curl -sS "https://api.morpho.org/v0/vaults-v2/users/0x821880a3E2bac432d67E5155e72BB655Ef65fa5E/positions?chain_ids=1&active_only=true&limit=100" \
-H "accept: application/json"
# Vault V1 positions
curl -sS "https://api.morpho.org/v0/vaults-v1/users/0x821880a3E2bac432d67E5155e72BB655Ef65fa5E/positions?chain_ids=1&active_only=true&limit=100" \
-H "accept: application/json"REST lists a user's vault positions by version; the V2 list excludes fee wrappers. GET /v0/blue/users/{user-address}/positions lists a user's Morpho Blue positions across exposed chains with cursor pagination and optional comma-separated chain_ids and market_ids filters. It returns params.user_address, a data array of chain_id, market_id, supply_shares, borrow_shares, and collateral_assets, and a cursor that is null on the last page. By default, active_only=true excludes zero-balance positions; set it to false to include fully exited positions. Blacklisted markets are never returned. A combined cross-vault/cross-market overview and combined transaction feed aren't available in the REST API yet. Per-user vault activity is available through GET /v0/vaults-v1/{vault-selector}/users/{user-address}/position/activity and GET /v0/vaults-v2/{vault-selector}/users/{user-address}/position/activity; Morpho Blue market-position history is available through GET /v0/blue/markets/{market-selector}/users/{user-address}/position/history.
User Earnings
Earnings Across All Vaults
GET /v0/vaults-v2/{vault-selector}/users/{user-address}/position/performance
GET /v0/vaults-v1/{vault-selector}/users/{user-address}/position/performance
# Vault V2 performance
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position/performance" \
-H "accept: application/json"
# Vault V1 performance
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position/performance" \
-H "accept: application/json"/position/performance returns per-vault net_earnings_assets (≈ pnl) and return_on_capital (≈ roe); the aggregate across all vaults isn't available in the REST API yet.
Earnings on a Specific Vault
GET /v0/vaults-v2/{vault-selector}/users/{user-address}/position
GET /v0/vaults-v2/{vault-selector}/users/{user-address}/position/performance
# Position: shares + assets
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position" \
-H "accept: application/json"
# Performance: net earnings + return on capital
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position/performance" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/users/{user-address}/position
GET /v0/vaults-v1/{vault-selector}/users/{user-address}/position/performance
# Position: shares + assets
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position" \
-H "accept: application/json"
# Performance: net earnings + return on capital
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position/performance" \
-H "accept: application/json"/position returns shares and assets; /position/performance returns net_earnings_assets (≈ pnl) and return_on_capital (≈ roe — time-weighted since inception, non-annualized). USD-denominated values aren't available in the REST API yet.
Historical Data
APY Historical State
All Vaults
GET /v0/vaults-v2/{vault-selector}/apy/history
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/apy/history?lookback=thirty_days" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/apy/history
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB/apy/history?lookback=thirty_days" \
-H "accept: application/json"REST exposes trailing history via fixed lookback windows (one_day, seven_days, thirty_days, ninety_days, one_year, inception) and is per-vault. Use the REST lists for listed-vault discovery; unlisted-vault discovery and cross-vault history queries aren't available in the REST API yet.
Specific Vault
GET /v0/vaults-v2/{vault-selector}/apy/history
curl -sS "https://api.morpho.org/v0/vaults-v2/1:0x04422053aDDbc9bB2759b248B574e3FCA76Bc145/apy/history?lookback=thirty_days" \
-H "accept: application/json"GET /v0/vaults-v1/{vault-selector}/apy/history
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0x73e65DBD630f90604062f6E02fAb9138e713edD9/apy/history?lookback=thirty_days" \
-H "accept: application/json"REST exposes trailing history via fixed lookback windows (one_day, seven_days, thirty_days, ninety_days, one_year, inception). Arbitrary time ranges and custom intervals aren't available in the REST API yet.
Historical Allocation (Morpho Vaults V1)
GET /v0/vaults-v1/{vault-selector}/allocations/history
curl -sS "https://api.morpho.org/v0/vaults-v1/1:0x73e65DBD630f90604062f6E02fAb9138e713edD9/allocations/history?lookback=thirty_days" \
-H "accept: application/json"REST returns per-market allocation history for a single vault via fixed lookback windows; append &market_id=<id> to filter to one market. Listing allocations across all vaults and USD-denominated series aren't available in the REST API yet.