User V1 vault position activity
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.
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>Query Parameters
Maximum number of events to return.
1001 <= value <= 1000Opaque cursor returned by a previous page.
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/activity`);const response = await fetch(url, { headers: { accept: "application/json", "x-api-key": apiKey, },});if (!response.ok) throw new Error(await response.text());const body = await response.json();{
"params": {
"chain_id": 1,
"vault_address": "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB",
"user_address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
},
"data": [
{
"type": "shares_transfer_out",
"data": {
"shares": "250000000000000000000",
"to_address": "0x3a9B4c5D6E7f8091A2b3c4D5E6F708192A3B4C5d"
},
"block_number": "19640000",
"tx_hash": "0x4e3a9b0ff1c2d52d7e8c5e1d3b9a8f7e6c5b4a39281706f5e4d3c2b1a09f8e7d",
"log_index": 12,
"timestamp": 1712870400
},
{
"type": "withdraw",
"data": {
"shares": "300000000000000000000",
"assets": "302631578"
},
"block_number": "19600500",
"tx_hash": "0x1f2e3d4c5b6a798807162534435261708f9e0d1c2b3a49586776859403f2e1d0",
"log_index": 4,
"timestamp": 1712396400
},
{
"type": "shares_transfer_in",
"data": {
"shares": "500000000000000000000",
"from_address": "0x8ba1f109551bD432803012645Ac136ddd64DBA72"
},
"block_number": "19550200",
"tx_hash": "0xa1b2c3d4e5f60718293a4b5c6d7e8f900112233445566778899aabbccddeeff0",
"log_index": 88,
"timestamp": 1711792800
},
{
"type": "deposit",
"data": {
"shares": "1000000000000000000000",
"assets": "1000000000"
},
"block_number": "19500100",
"tx_hash": "0xaabbccddeeff00112233445566778899aabbccddeeff00112233445566778899",
"log_index": 16,
"timestamp": 1711191600
}
],
"cursor": null,
"last_indexed_block": "19847234"
}