List transactions
Returns a cursor-paginated history of all ledger events for the specified end user across all their portfolios. Includes deposits, withdrawals, yield syncs, harvest events, and fee deductions. Supports both Entra token + user token.
This endpoint is also your recovery path after a dropped connection during a deposit or withdrawal — poll here with the same portfolio_id to confirm whether the on-chain transaction completed. See Pagination for cursor usage.
Path parameters
Your stable identifier for the end user.
Headers
Entra M2M access token. Format: Bearer <token>. See Entra authentication.
Partner-minted JWT for the end user. Required in user-scoped. The sub claim must equal external_id. See User authentication.
Query parameters
Maximum number of transactions to return. Range 1–100. Default: 25. See Pagination.
Cursor for forward pagination — the id of the last transaction from the previous page.
Cursor for backward pagination — the id of the first transaction from the current page.
Example request
const baseUrl = process.env.YIELDFORCE_API_BASE_URL ?? 'https://yieldforce.io/api';
const res = await fetch(
`${baseUrl}/v1/partner/end_users/alice-bunq-id/transactions?limit=25`,
{
headers: {
Authorization: `Bearer ${entraToken}`,
'X-User-Token': partnerJwt,
},
}
);
const data = await res.json();Response
200 Paginated list of transactions (newest first)
{
"data": [
{
"id": "txn_01HZ4KXQM5E8WRTYN3P7VBJD6F",
"portfolio_id": "jar_01HZ4KXQM5E8WRTYN3P7VBJD6F",
"type": "deposit",
"amount_changed": "10000000",
"yield_delta": "0",
"deposited_amount_before": "0",
"deposited_amount_after": "10000000",
"yield_earned_before": "0",
"yield_earned_after": "0",
"tx_hash": "0xdeadbeef...1234",
"fx_rate_usd": 1.0,
"aave_apy": 0.042,
"timestamp": "2026-05-20T10:02:00.000Z"
},
{
"id": "txn_01HZ4KXQM5ABCDEF12345678",
"portfolio_id": "jar_01HZ4KXQM5E8WRTYN3P7VBJD6F",
"type": "yield_harvest",
"amount_changed": "42000",
"yield_delta": "42000",
"deposited_amount_before": "10000000",
"deposited_amount_after": "10000000",
"yield_earned_before": "0",
"yield_earned_after": "42000",
"tx_hash": null,
"fx_rate_usd": 1.0,
"aave_apy": 0.042,
"timestamp": "2026-05-20T10:05:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"prev_cursor": null
}Transaction types:
type | Description |
|---|---|
deposit | User deposited funds into the portfolio |
withdraw | User withdrew funds from the portfolio |
sync | Off-chain yield accounting sync (no on-chain tx) |
yield_harvest | On-chain yield harvested and credited to the portfolio |
harvest_fee | Protocol fee deducted from harvested yield |
All amount fields are strings in token minor units. tx_hash is null for off-chain accounting events.
Use this endpoint to recover after a dropped deposit/withdraw connection
If your HTTP connection drops during a deposit or withdrawal, the on-chain transaction may still complete. Poll this endpoint filtering by portfolio_id in your own code — the most recent transaction of type deposit or withdraw will confirm the operation. Retry the original money-flow call with the same Idempotency-Key to get the response if the server still has it cached.
Errors
401 token_missing — No Authorization: Bearer header on the request.
401 invalid_entra_token — Token is expired, malformed, or has an unexpected audience.
401 invalid_user_token — The X-User-Token failed signature verification or is expired.
403 sub_url_mismatch — The sub claim in X-User-Token does not match external_id in the URL.
404 end_user_not_found — No user with this external_id exists in your tenant.