List banking account movements
Scope: accounting:banks.read https://api.alladdin.com/api/v2/treasury/accounts/{id}/bank-movements
Returns a cursor-paginated list of raw bank movements for a banking account, with the bank-reported amount, balance after the movement, value date and reconciliation status. Use this endpoint to build reconciliation flows, cash-flow analysis, balance alerts or banking dashboards. Unlike Payment records (available at /api/v2/payments), which link bank movements to invoices and documents, this endpoint exposes the raw entries that come from the bank statement. Results are ordered by value date descending (then by id descending to break ties). Returns an empty list for cash-type accounts (their movements live in the ledger, not the bank statement) — use GET /api/v2/treasury/accounts/{id}/cash-movements instead.
Parameters
Path parameters
id string required
Banking account identifier
Query parameters
cursor string optional
Opaque cursor returned by the previous page
limit integer optional = 50
Maximum number of movements per page. Defaults to 50, maximum 200.
start_date string<date> optional
Inclusive lower bound on the movement value date (ISO 8601 date or date-time)
end_date string<date> optional
Inclusive upper bound on the movement value date (ISO 8601 date or date-time)
status string[] optional
Reconciliation statuses to filter by: 'pending' (not reconciled), 'reconciled' (fully matched), 'partial' (partially matched), 'forced_reconciled' (manually marked).
Request
import requests
url = "https://api.alladdin.com/api/v2/treasury/accounts/507f1f77bcf86cd799439011/bank-movements?cursor=value&limit=50&start_date=2026-01-01"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
}
response = requests.get(url, headers=headers)
print(response.json())Responses
Response
{
"items": [
{
"id": "507f1f77bcf86cd799439011",
"banking_account_id": "507f1f77bcf86cd799439012",
"description": "string",
"note": "string",
"amount": "1500.00",
"currency": "EUR",
"balance": "12345.67",
"accounting_amount": "1500.00",
"accounting_currency": "EUR",
"booking_date": "2024-01-15T10:30:00Z",
"value_date": "2024-01-15T10:30:00Z",
"status": "reconciled",
"reconciled_amount": "1500.00",
"origin": "manual",
"flagged_at": "2024-01-15T10:30:00Z"
}
],
"cursor": "string",
"has_more": false
}Success responses
200 List of banking account bank movements application/json object items[] object[] id string
Unique identifier of the bank movement
banking_account_id string
Identifier of the banking account this movement belongs to
description string
Description of the movement as reported by the bank
note string
Manual annotation added by the user
amount string
Movement amount in the banking account currency. Decimal as string; precision matches the currency (e.g. 2 decimals for EUR/USD, 3 for BHD/KWD).
currency string
ISO 4217 currency code of the banking account
balance string | null
Bank balance after the movement, in the banking account currency. Null if the bank did not report a balance
accounting_amount string | null
Movement amount converted to the company accounting currency. Null when the movement has no accounting money assigned (e.g. unreconciled foreign-currency entries).
accounting_currency string | null
ISO 4217 currency code of the company accounting currency. Null when the movement has no accounting money assigned.
booking_date string<date-time>
Booking date — when the bank recorded the movement. ISO 8601 timestamp
value_date string<date-time>
Value date as ISO 8601 timestamp
status string
Reconciliation status: 'pending' for not yet reconciled, 'reconciled' for fully matched against documents, 'partial' for partially matched, 'forced_reconciled' when manually marked as reconciled.
Enum: pending reconciled partial forced_reconciled reconciled_amount string
Amount of the movement already reconciled against documents/transactions, in the banking account currency
origin string
Source of the movement (e.g. stripe, paypal, manual, alladdin).
flagged_at string<date-time> | null
ISO 8601 timestamp when the user manually flagged the movement. Null when not flagged.
cursor string | null has_more boolean
Error responses
401 Invalid or missing API key application/json 403 Insufficient permissions application/json 404 Banking account not found application/json 429 Rate limit exceeded application/json
