Docs

User V2 vault position activity

GET
/v0/vaults-v2/{vault-selector}/users/{user-address}/position/activity

Events that changed a user's share balance in a Morpho Vault V2, newest first, one row per event log.

Signs: 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.

assets is never derived: it is present on deposit and withdraw, and absent on share transfers, whose ERC-20 log carries no asset amount.

Bundled 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.

A self-transfer is omitted, since it changes no balance. Rows are therefore capped, not filled, by limit: keep paginating until cursor is null.

Cursors are bound to the selector and to the type filter of the request that produced them; replaying one with different filters returns 400.

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

Path Parameters

user-address*string

Position owner address. Example: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcd.

Formataddress
vault-selector*string

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

Format<chain_id>:<vault_address>

Query Parameters

limit?integer

Maximum number of event logs to read.

Range1 <= value <= 1000
Default100
cursor?string

Opaque cursor returned by a previous page.

type?array<>

Restrict the feed to the given event types.

Response Body

application/json

curl -X GET "https://example.com/v0/vaults-v2/1:0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11/users/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd/position/activity"
{  "params": {    "chain_id": 1,    "vault_address": "0x23f5E9c35820f4baB695Ac1F19c203cC3f8e1e11",    "user_address": "0x0000000000000000000000000000000000000001"  },  "data": [    {      "type": "shares_transfer_out",      "data": {        "shares": "250000000000000000000",        "to_address": "0x3F32bC09d41eE699844F8296e806417D6bf61Bba"      },      "block_number": "19840000",      "tx_hash": "0x4e3a9b0ff1c2d52d7e8c5e1d3b9a8f7e6c5b4a39281706f5e4d3c2b1a09f8e7d",      "log_index": 12,      "timestamp": 1715270400    },    {      "type": "withdraw",      "data": {        "shares": "300000000000000000000",        "assets": "302631578"      },      "block_number": "19800500",      "tx_hash": "0x1f2e3d4c5b6a798807162534435261708f9e0d1c2b3a49586776859403f2e1d0",      "log_index": 4,      "timestamp": 1714796400    },    {      "type": "shares_transfer_in",      "data": {        "shares": "500000000000000000000",        "from_address": "0x8Ba1f109551bD432803012645Ac136ddd64DBA72"      },      "block_number": "19750200",      "tx_hash": "0xa1b2c3d4e5f60718293a4b5c6d7e8f900112233445566778899aabbccddeeff0",      "log_index": 88,      "timestamp": 1714192800    },    {      "type": "deposit",      "data": {        "shares": "1000000000000000000000",        "assets": "1000000000"      },      "block_number": "19700100",      "tx_hash": "0x99887766554433221100ffeeddccbbaa99887766554433221100ffeeddccbbaa",      "log_index": 30,      "timestamp": 1713591600    }  ],  "cursor": null,  "last_indexed_block": "19847234"}