List transactions
list_transactionsList the user's financial transactions in a date window, newest first, across all account types (bank, deposit, line of credit, investment). Each row is lean by default: id, date, amount (negative = money out), currency, booked, payee, description (omitted when it duplicates payee), an account {id, name, institution} ref, and — when available — mcc, category, and bank_details (raw provider metadata: transaction/purpose codes, currency-exchange info, and the MCC category text that banks put in additional_information — useful for categorising spend when enrichment is off). Pass "verbose": true for the full, raw transaction record.
Investment rows also carry: type (raw activity, e.g. BUY / SELL / DIVIDEND / CRYPTO_SEND), is_cash_flow, units, and price_per_unit (the effective per-unit price in this row's currency, = |amount| / units). IMPORTANT for "what did I spend": rows with is_cash_flow=false are asset transfers or income-in-kind (crypto send/receive, staking, stock splits) — NOT money spent; exclude them from spending totals. Use amount, units and price_per_unit for trade figures; ignore any price written into the description string (it is the provider's own and can be in a different currency).
Dates: "date" is Synci's per-account authoritative date by default (what the user sees; "spending in June" means this). Override with date_field "booking" or "value" to filter/sort/show a specific date instead. Both booked and pending transactions are returned by default; filter with status ("all" | "booked" | "pending", default "all"). Pending amounts can still change.
Coverage: meta.earliest_available_date is the date the queried accounts are synced from. If it is later than your "from", the window is only PARTIALLY covered — data before it was never synced (not absent), so any total would silently under-report. Caveat the coverage, or narrow "from" to it.
Pagination: results are bounded by the date window and "limit" (default 50, max 100). Check meta.has_more: if true, request the next page by passing meta.next_cursor as "cursor" (keyset paging, no gaps or overlap). Sensitive identifiers (IBAN, account numbers, etc.) are always omitted.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Optional end date (YYYY-MM-DD), inclusive. Defaults to today. | |
| from | No | Optional start date (YYYY-MM-DD), inclusive. Defaults to 30 days before "to". | |
| limit | No | Optional max rows to return (1-100). Defaults to 50. Check meta.has_more and page with meta.next_cursor. | |
| cursor | No | Optional. Pass meta.next_cursor from a previous call to fetch the next page (keyset paging). | |
| status | No | Filter by settlement status. Defaults to "all" (booked + pending). | |
| verbose | No | When true, return the full raw transaction record instead of the lean shape. | |
| account_id | No | Optional. Restrict to a single financial account (id from list_accounts). Omit to span all accounts. | |
| date_field | No | Which date to filter/sort/show on. "mapped" (default) is Synci's authoritative per-account date; "booking" or "value" force a specific field. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Newest first. Lean rows omit null/empty keys; with verbose:true each item is the full raw transaction record instead. | |
| meta | Yes |