User V1 vault position performance
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).
Vault selector example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB (format: <chain_id>:<vault_address>; replace with the target vault).
For enterprise access, use https://private.api.morpho.org as the base URL and send your API key in the x-api-key header. Request an API key.
Path Parameters
Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.
addressSelector formatted as <chain_id>:<vault_address>. Example: 1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB.
<chain_id>:<vault_address>Response Body
application/json
const baseUrl = process.env.CORE_REST_BASE_URL ?? "https://api.morpho.org";const apiKey = process.env.MORPHO_API_KEY ?? "<MORPHO_API_KEY>";const vaultSelector = "1:0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB";const userAddress = "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd";const url = new URL(`${baseUrl}/v0/vaults-v1/${vaultSelector}/users/${userAddress}/position/performance`);const response = await fetch(url, { headers: { accept: "application/json", "x-api-key": apiKey, },});if (!response.ok) throw new Error(await response.text());const body = await response.json();{
"data": {
"user_address": "0xABcdEFABcdEFabcdEfAbCdefabcdeFABcDEFabCD",
"chain_id": 1,
"vault_address": "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB",
"last_indexed_block": "25475347",
"accounting_method": "average_cost",
"net_earnings_assets": "0",
"return_on_capital": null
}
}