Gated by feature:bank_reconciliation on the route group.
Bank Accounts
| Method & Path | Permission | Purpose | Side effects |
|---|---|---|---|
GET bank-accounts | bank.view | List, with unmatched-line counts | Account number and IBAN come back only as has_account_number/account_number_masked and has_iban/iban_masked (last 4) |
POST bank-accounts | bank.manage | Create | Validates the linked GL account is active/postable/asset; audit |
PATCH bank-accounts/{bank} | bank.manage | Update | Same GL validation; audit |
POST bank-accounts/{bank}/reveal | bank.reveal_account_number | Reveal decrypted account number and IBAN | POST-only (never in URL); audit bank.account_number_revealed (values never logged) |
GET bank-accounts/{bank}/lines | bank.view | Statement lines with matches, filterable | — |
Statement Import
| Method & Path | Permission | Purpose | Side effects |
|---|---|---|---|
POST bank-accounts/{bank}/import-file | bank.import | Multipart CSV/OFX import with column mapping | Parses & imports lines |
POST bank-accounts/{bank}/import (legacy) | bank.import | Import from parsed JSON | Dedupes via SHA-256 hash |
Reconciliation Sessions
| Method & Path | Permission | Purpose | Side effects |
|---|---|---|---|
GET/POST bank-accounts/{bank}/reconciliations | bank.view/bank.reconcile | List / start a session | — |
GET bank-reconciliations/{reconciliation} | bank.view | Detail + lines | — |
POST bank-reconciliations/{reconciliation}/complete | bank.reconcile | Complete/lock session | TOTP step-up (totp_code) if require_totp_for_posting; locks matched lines |
POST bank-reconciliations/{reconciliation}/reopen | bank.reconcile | Reopen a completed session | TOTP step-up |
DELETE bank-reconciliations/{reconciliation} | bank.reconcile | Delete session | — |
Matching
| Method & Path | Permission | Purpose | Side effects |
|---|---|---|---|
POST bank-lines/{line}/match | /unmatch | /exclude | /restore | bank.reconcile | Manage a line's match state | — |
POST bank-lines/{line}/create-entry | bank.reconcile | Draft a fee/interest journal entry from a line | Creates a journal entry that enters the normal maker-checker workflow |
GET bank-lines/{line}/suggestions | bank.view | Rules-based suggested matches | — |
GET bank-lines/{line}/candidates | bank.view | Unmatched ledger candidates for manual matching | — |
POST bank-accounts/{bank}/apply-rules | bank.reconcile | Apply matching rules on demand | Auto-matches per configured rules |
Rules
| Method & Path | Permission | Purpose |
|---|---|---|
GET/POST bank-rules, PATCH/DELETE bank-rules/{rule} | bank.view/bank.manage | CRUD auto-match rules |