Gated by feature:bank_reconciliation on the route group.

Bank Accounts

Method & PathPermissionPurposeSide effects
GET bank-accountsbank.viewList, with unmatched-line countsAccount number and IBAN come back only as has_account_number/account_number_masked and has_iban/iban_masked (last 4)
POST bank-accountsbank.manageCreateValidates the linked GL account is active/postable/asset; audit
PATCH bank-accounts/{bank}bank.manageUpdateSame GL validation; audit
POST bank-accounts/{bank}/revealbank.reveal_account_numberReveal decrypted account number and IBANPOST-only (never in URL); audit bank.account_number_revealed (values never logged)
GET bank-accounts/{bank}/linesbank.viewStatement lines with matches, filterable—

Statement Import

Method & PathPermissionPurposeSide effects
POST bank-accounts/{bank}/import-filebank.importMultipart CSV/OFX import with column mappingParses & imports lines
POST bank-accounts/{bank}/import (legacy)bank.importImport from parsed JSONDedupes via SHA-256 hash

Reconciliation Sessions

Method & PathPermissionPurposeSide effects
GET/POST bank-accounts/{bank}/reconciliationsbank.view/bank.reconcileList / start a session—
GET bank-reconciliations/{reconciliation}bank.viewDetail + lines—
POST bank-reconciliations/{reconciliation}/completebank.reconcileComplete/lock sessionTOTP step-up (totp_code) if require_totp_for_posting; locks matched lines
POST bank-reconciliations/{reconciliation}/reopenbank.reconcileReopen a completed sessionTOTP step-up
DELETE bank-reconciliations/{reconciliation}bank.reconcileDelete session—

Matching

Method & PathPermissionPurposeSide effects
POST bank-lines/{line}/match | /unmatch | /exclude | /restorebank.reconcileManage a line's match state—
POST bank-lines/{line}/create-entrybank.reconcileDraft a fee/interest journal entry from a lineCreates a journal entry that enters the normal maker-checker workflow
GET bank-lines/{line}/suggestionsbank.viewRules-based suggested matches—
GET bank-lines/{line}/candidatesbank.viewUnmatched ledger candidates for manual matching—
POST bank-accounts/{bank}/apply-rulesbank.reconcileApply matching rules on demandAuto-matches per configured rules

Rules

Method & PathPermissionPurpose
GET/POST bank-rules, PATCH/DELETE bank-rules/{rule}bank.view/bank.manageCRUD auto-match rules