{"openapi":"3.0.1","info":{"title":"Pfuma Core Banking API","description":"Cloud-native core banking platform purpose-built for African financial institutions.\n\n**Target Market:** Microfinance institutions (MFIs), savings and credit cooperatives (SACCOs), commercial banks, and fintechs operating in multi-currency environments.\n\n**Key Differentiators:**\n- Double-entry accounting engine with real-time journal entries\n- AML/KYC/CFT compliance framework (PEP/sanctions screening engine, FATCA indicia screening, STR/TTR generation). TRANSACTION MONITORING RUNS ON THE POSTING PATH in advisory mode when enabled: evaluated after a posting commits, on another thread, raising findings into the human review queue and generating a threshold report where one is due. It blocks nothing and a posting never waits on it; the rule thresholds are shipped defaults an institution configures. REGULATORY SUBMISSION IS A SIMULATED SEAM: artefacts are prepared, released by a second person, watermarked and recorded, and NOTHING IS TRANSMITTED to any regulator. No acknowledgement is recorded and none can be. External sanctions feeds, and each regulator's submission specification, channel and filer identity, are configuration connected during implementation.\n- All 15 Zimbabwe banks pre-configured (SWIFT/routing reference data) for ZIPIT and RTGS; external switch connectivity is completed during implementation\n- Decisioning engine for fraud detection, credit scoring, and churn (rule-based heuristics today; IFRS 9 ECL is fully analytical; ML models scaffolded for training on production data)\n- Multi-currency support (USD, ZWG) with automatic GL mirroring\n- Settlement reconciliation engine (ZIPIT, RTGS, EcoCash, GL) with multi-pass matching\n- Cloud-native auto-scaling (zero to thousands of requests per second)\n\n**Public Endpoints (no API key required):**\n- `GET /actuator/health` - Service health status\n- `GET /v1/platform` - Platform capabilities and statistics\n- `GET /v1/platform/compliance` - Regulatory compliance matrix\n- `GET /v1/platform/architecture` - Technical architecture details\n- `GET /v1/platform/faq` - Prospect FAQ (implementation, pricing, migration, support)\n- `GET /v1/platform/banks` - Pre-configured bank integrations\n\n**Getting Started:**\n1. Generate an API key via `POST /v1/api-keys` (requires an existing admin key)\n2. Include the key in the `X-API-Key` header for all authenticated requests\n3. Create a customer, open an account, and make your first deposit","contact":{"name":"Lioncap Ventures","url":"https://lioncapventures.com","email":"api@lioncapventures.com"},"license":{"name":"Proprietary","url":"https://lioncapventures.com/terms"},"version":"1.0.0"},"externalDocs":{"description":"Pfuma Core Platform Documentation","url":"https://qupa-api.lioncapventures.com/docs"},"servers":[{"url":"https://qupa-api-staging.lioncapventures.com","description":"Staging"}],"security":[{"ApiKeyAuth":[]}],"tags":[{"name":"General Ledger","description":"Double-entry chart of accounts with 5 categories: Assets, Liabilities, Equity, Revenue, Expenses. Multi-currency with automatic ZWG mirror accounts. Trial balance generation. Journal entry audit trail. Branch-level and consolidated views."},{"name":"ALM","description":"Asset-Liability Management. Track maturity mismatches, interest rate sensitivity gaps, and liquidity coverage ratios. Time-bucket analysis for gap reporting. Supports RBZ liquidity ratio requirements."},{"name":"Reconciliation","description":"Settlement reconciliation engine for ZIPIT (ZIMSWITCH), RTGS (ZETSS), EcoCash, and internal GL reconciliation. Multi-pass matching algorithm: Tier 1 (exact reference + amount + date), Tier 2 (amount + date tolerance), Tier 3 (fuzzy/sum-of-transactions), Tier 4 (exception routing). Actual match rates are a property of the institution's settlement files, measured during implementation. Exception management with aging SLA (0-2 days monitor, 3-5 investigate, 6-15 escalate, 16-30 CFO review, 30+ write-off assessment). Suspense account tracking by channel. Daily summary and match rate KPI reports."},{"name":"Maker-Checker Approvals","description":"Dual-authorization workflow for high-risk operations. Account freezing, closure, and large transactions require separate maker (initiator) and checker (approver). Configurable approval rules. Full audit trail of approval decisions."},{"name":"Exchange Rates","description":"Multi-currency exchange rate management for USD/ZWG. Daily rate updates, bid/ask spreads, historical rate tracking. Used for cross-currency transactions and financial reporting."},{"name":"Deposit Products","description":"16 pre-configured products across USD and ZWG currencies. Configurable interest rates (annual percentage), minimum balances, fee structures, tiered pricing, maturity terms, and early withdrawal penalties. Products include: regular savings, premium savings, youth savings, senior savings, group savings, fixed deposits (3/6/12/24 month), call deposits, money market, and ZWG equivalents."},{"name":"Customers","description":"Customer lifecycle management with integrated KYC. Create customers with national ID, assign risk profiles, and manage the full onboarding journey. Supports individual and corporate customers. All customers are linked to KYC records for regulatory compliance."},{"name":"Passbooks","description":"Deposit passbooks: issue, reprint on loss, unprinted lines, print-confirm. A passbook holds NO money. A line is a posting, read from the same ledger expression the account statement and the account balance use, and all a passbook stores about those postings is how far it has been printed. openingBalanceCents plus every line equals closingBalanceCents, and a book printed to the end closes at the account's ledger balance. One live book per account, enforced in the database. print-confirm names the last line actually printed, so a posting that landed after the paper came out is not marked printed."},{"name":"Branches","description":"Multi-branch accounting and operations. 6 branches pre-configured (Head Office, Harare CBD, Bulawayo, Mutare, Gweru, Masvingo). Branch-level P&L, transaction filtering, and customer assignment. Unlimited branches supported."},{"name":"Loan Provisioning","description":"IFRS 9 loan loss provisioning with RBZ-compliant staging. Stage 1 (performing, 0-30 days, 1% provision), Stage 2 (underperforming, 31-90 days, 5-20% provision), Stage 3 (non-performing, 90+ days, 50-100% provision). Collateral-adjusted net exposure calculations. Automated GL entries for provision expense."},{"name":"Beneficiaries","description":"Manage payment beneficiaries for repeat transfers. Store bank details, mobile money numbers, and ZIPIT/RTGS routing information. Beneficiaries can be shared across customers or customer-specific."},{"name":"Transactions","description":"Immutable transaction ledger with double-entry accounting. Every transaction (deposit, withdrawal, transfer, fee, interest) creates balanced debit and credit journal entries. Full audit trail with timestamps, channels, and operator IDs. Branch-aware and period-locked."},{"name":"KYC","description":"Know Your Customer records management. Risk-based approach with categories: low, medium, high, prohibited. Captures national ID and passport details with a manual maker-checker verification workflow, address verification, source of funds documentation. Periodic review scheduling. External verification checks (identity registry, sanctions and PEP, credit bureau, adverse media) run through a pluggable external verification provider selected by EXTERNAL_KYC_PROVIDER_MODE; the default mode is an offline stub that contacts nothing and labels every result source=STUB. Aligned with FATF Recommendations 10-22 and RBZ KYC Guidelines."},{"name":"Statutory Reserves","description":"Statutory reserve ratio calculations per RBZ requirements. Track required reserves vs actual holdings. Alert on shortfalls. Supports both USD and ZWG reserve calculations."},{"name":"Compliance Reports","description":"Suspicious Transaction Report (STR) and Threshold Transaction Report (TTR) management. Generate, review, and manage reports through an internal filing workflow (assembly, review, status tracking); electronic transmission to the Financial Intelligence Unit (FIU) of Zimbabwe is planned. Aligned with the Money Laundering and Proceeds of Crime Act (Chapter 9:24)."},{"name":"Periods","description":"Accounting period management. Open and close monthly/annual periods. Period-locked transactions prevent backdating. Year-end closing procedures. Supports month-end accrual runs and financial statement generation."},{"name":"Treasury","description":"Treasury and liquidity management. Cash flow forecasting, Asset-Liability Management (ALM) positions, investment portfolio tracking, statutory reserve calculations, and interest rate risk monitoring. Supports RBZ statutory reserve ratio compliance."},{"name":"Platform Information","description":"Public endpoints describing platform capabilities, compliance posture, architecture, integrated banks, and prospect FAQ. No authentication required. Use these endpoints during demos and client presentations."},{"name":"Cash Flow Forecasts","description":"Forward-looking cash flow projections. Model expected inflows (deposits, loan repayments, investment maturities) and outflows (withdrawals, payments, operational costs). Multiple scenario analysis."},{"name":"Alerts","description":"Transaction monitoring alert management. 8 pre-configured rules detect: large cash deposits, structuring, rapid fund movement, unusual patterns, high-risk jurisdiction transfers, dormant account reactivation, round-amount transactions, and velocity anomalies. Alert lifecycle: open, under review, escalated, closed (true positive / false positive)."},{"name":"Prudential Returns","description":"Reserve Bank of Zimbabwe prudential return data collection. Supports monthly balance sheet returns (BR1), income statement returns (BR2), large exposure reporting, and capital adequacy monitoring. Data structured in JSONB for flexible reporting."},{"name":"API Keys","description":"Self-service API key management. Generate keys with scoped access (read, write, admin) and configurable rate limits. Keys are SHA-256 hashed (never stored in plaintext). Support for key rotation with zero downtime. Admin scope required for key management operations."},{"name":"Beneficial Owners","description":"Beneficial ownership registry for corporate customers. Identify individuals who ultimately own or control 25%+ of an entity. Required by FATF Recommendation 24 and Zimbabwe's AML regulations."},{"name":"Interest","description":"Interest accrual engine. Daily accrual calculations based on deposit product rates. Supports simple and compound interest. Tiered rate structures. Month-end interest posting to accounts with corresponding GL entries."},{"name":"Loan Applications","description":"Loan application workflow: submit, review, approve/reject, disburse. Captures borrower financials (income, expenses, existing obligations), employment status, and calculates debt-to-income ratio. Integrated with maker-checker approval workflow for amounts above configurable thresholds."},{"name":"Financial Reports","description":"Core financial statements: Statement of Financial Position (Balance Sheet), Income Statement, Cash Flow Statement. Branch-filterable and period-aware. Generates from real-time GL data with double-entry integrity."},{"name":"Loan Products","description":"Loan product catalog with configurable interest rates (flat, declining balance, reducing balance), repayment frequencies, term limits, fee structures, collateral requirements, and grace periods. 8 pre-configured products: personal loan, SME business loan, agricultural loan, salary-backed loan, group loan, emergency loan, mortgage, and asset finance."},{"name":"Accounts","description":"10 account types: Savings, Current, Fixed Deposit, Call Deposit, Money Market, Trust, Escrow, Nostro, Suspense, and GL. Full lifecycle management (open, activate, freeze/unfreeze, close, reactivate). Automatic dormancy detection. Each account links to a deposit product for interest rate and fee configuration. Deposits, withdrawals, and transfers create double-entry journal entries."},{"name":"Customer CIF","description":"CIF completion beyond documents: the customer profile (structured address, employment, DECLARED income), the interaction log, the case queue, and income recorded to date. The profile PATCH leaves omitted fields alone and clears blank ones, and carries no identity field. The interaction log is append-only. A case is OPEN or RESOLVED, both transitions stamped with an actor and a time, and RESOLVED is terminal. Profitability is INCOME, NOT PROFIT: revenue GL postings on transactions that actually posted, where the customer was the only party, per GL account and currency. There is no cost model, no margin and no projection anywhere in it, and revenue on a transaction shared with another customer is reported separately rather than split by inference."},{"name":"Screening","description":"Customer and transaction screening engine (exact and fuzzy name matching) against a configurable internal watchlist. Connection to external sanctions/PEP feeds is planned; lists are populated manually until then. Configurable match thresholds. Results stored with match details for audit purposes. Supports batch screening for periodic reviews."},{"name":"Investments","description":"Investment portfolio management. Track treasury bills, government bonds, and other securities. Maturity tracking, yield calculations, and mark-to-market valuations."},{"name":"Loans","description":"Active loan management. Full lifecycle: disbursement, repayment processing, arrears tracking, write-off. Amortization schedule generation (flat, declining balance, reducing balance). Repayment waterfall: penalties > fees > interest > principal. Double-entry GL journal entries for all loan transactions."},{"name":"Platform Information","description":"Public endpoints describing platform capabilities, compliance posture, architecture, and FAQ. No authentication required."},{"name":"Payment Batches","description":"Bulk payment processing for salary runs, supplier payments, and mass disbursements. Upload batch items, validate individually, process in bulk. Status tracking per item. Supports ZIPIT and RTGS channels."},{"name":"Standing Orders","description":"Recurring transaction scheduling. Set up automatic transfers between accounts on daily, weekly, monthly, or custom frequencies. Supports internal transfers and external payments."},{"name":"Payments","description":"Payment module for ZIPIT (real-time interbank, up to USD 5,000), RTGS (high-value gross settlement, no limit), and mobile money (EcoCash, OneMoney, InnBucks). Full payment lifecycle: initiate, approve (maker-checker), process, confirm settlement, reverse. Payment instructions post double-entry GL entries to settlement accounts; live connectivity to the ZIPIT/RTGS and mobile-money switches is completed during implementation. Batch payments for salary and bulk disbursements. All 15 Zimbabwe commercial banks pre-configured with SWIFT/BIC reference codes."}],"paths":{"/v1/standing-orders/{id}/resume":{"put":{"tags":["Standing Orders"],"operationId":"resumeStandingOrder","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StandingOrderResponse"}}}}}}},"/v1/standing-orders/{id}/pause":{"put":{"tags":["Standing Orders"],"operationId":"pauseStandingOrder","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StandingOrderResponse"}}}}}}},"/v1/standing-orders/{id}/cancel":{"put":{"tags":["Standing Orders"],"operationId":"cancelStandingOrder","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StandingOrderResponse"}}}}}}},"/v1/staff/roles/{roleKey}":{"put":{"tags":["Staff RBAC Admin"],"operationId":"updateRole","parameters":[{"name":"roleKey","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStaffRoleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StaffRoleView"}}}}}}},"/v1/staff/identities/{username}":{"put":{"tags":["Staff RBAC Admin"],"operationId":"updateIdentity","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStaffIdentityRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/v1/staff/identities/{id}/branch":{"get":{"tags":["Staff Administration"],"summary":"The branch a staff member is assigned to. Null means head office, and is unscoped.","operationId":"getBranch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StaffBranchAssignmentResponse"}}}}}},"put":{"tags":["Staff Administration"],"summary":"Assign a staff member to a branch. Null assigns them to head office, which is unscoped.","operationId":"setBranch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStaffBranchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StaffBranchAssignmentResponse"}}}}}}},"/v1/reports/schedules/{id}":{"put":{"tags":["Report Scheduler"],"summary":"Amend a schedule. Null fields are left alone; the report type is immutable.","operationId":"updateSchedule","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateReportScheduleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReportScheduleResponse"}}}}}},"delete":{"tags":["Report Scheduler"],"summary":"Retire a schedule. Soft: its run history is kept and it can be reactivated.","operationId":"deleteSchedule","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReportScheduleResponse"}}}}}}},"/v1/reconciliation/exceptions/{id}/resolve":{"put":{"tags":["Reconciliation"],"summary":"Resolve a reconciliation exception","operationId":"resolveException","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveExceptionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReconExceptionResponse"}}}}}}},"/v1/platform/numbering/{entityType}":{"put":{"tags":["Numbering Configuration"],"summary":"Reconfigure the numbering rule for one identifier family","operationId":"updateConfig","parameters":[{"name":"entityType","in":"path","required":true,"schema":{"type":"string","enum":["LOAN","ACCOUNT","TRANSACTION","APPLICATION"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNumberingConfigRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/NumberingConfigResponse"}}}}}}},"/v1/platform/config":{"get":{"tags":["Platform Configuration"],"summary":"The institution business time zone, and the date this engine calls today","description":"Ask this rather than computing the date from the zone: a second implementation of the rule would disagree with the engine at exactly the midnight boundary the setting exists to fix.","operationId":"getConfig","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PlatformConfigResponse"}}}}}},"put":{"tags":["Platform Configuration"],"summary":"Set the institution business time zone","operationId":"updateConfig_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlatformConfigRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PlatformConfigResponse"}}}}}}},"/v1/platform/branch-scoping":{"get":{"tags":["Staff Administration"],"summary":"Whether branch scoping is in force. FALSE means every read behaves as it always has.","operationId":"getScoping","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BranchScopingResponse"}}}}}},"put":{"tags":["Staff Administration"],"summary":"Request a scoping change. Parks a maker-checker approval; changes nothing until released.","operationId":"setScoping","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBranchScopingRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/onboarding/requirement-templates/{id}":{"put":{"tags":["Onboarding Requirements"],"summary":"Replace a checklist item's editable fields","description":"Full replace. track and item_key are the item's identity and cannot be changed.","operationId":"update","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequirementTemplateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RequirementTemplateView"}}}}}}},"/v1/onboarding/applications/{id}":{"get":{"tags":["Onboarding Applications"],"summary":"One application with its checklist and documents","operationId":"get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationDetailView"}}}}}},"put":{"tags":["Onboarding Applications"],"summary":"Edit an application (applicant)","description":"Only permitted while the application is a draft or has been returned for documents.","operationId":"update_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOnboardingApplicationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationView"}}}}}}},"/v1/loans/policy-config":{"get":{"tags":["Loan Provisioning"],"summary":"The lending policy toggles in force: defaulted-loan interest accrual and penalty backfill.","operationId":"getConfig_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LendingPolicyConfigResponse"}}}}}},"put":{"tags":["Loan Provisioning"],"summary":"Request a policy toggle change. Parks a maker-checker approval; changes nothing until released.","operationId":"requestChange","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLendingPolicyRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/loan-provisioning/config":{"get":{"tags":["Loan Provisioning"],"summary":"The provisioning ladder in force: arrears bands, provision rates and IFRS 9 stage bands.","operationId":"getConfig_2","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProvisioningConfigResponse"}}}}}},"put":{"tags":["Loan Provisioning"],"summary":"Request a ladder change. Parks a maker-checker approval; changes nothing until released.","operationId":"requestConfigChange","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProvisioningConfigRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/gl/budgets":{"get":{"tags":["General Ledger"],"summary":"Budgets set for one calendar month (YYYY-MM)","operationId":"listBudgets","parameters":[{"name":"period","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlBudgetResponse"}}}}}}},"put":{"tags":["General Ledger"],"summary":"Set the budget for one GL account in one month (writes no journal entry)","operationId":"upsertBudget","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertGlBudgetRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GlBudgetResponse"}}}}}}},"/v1/gl/accounts/{id}":{"put":{"tags":["General Ledger"],"summary":"Amend a GL account (code/type frozen once posted to)","operationId":"updateGlAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGlAccountRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GlAccountResponse"}}}}}}},"/v1/expenses/categories/{id}":{"put":{"tags":["Expenses"],"summary":"Rename, re-point or retire an expense category (posts nothing)","operationId":"updateCategory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExpenseCategoryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExpenseCategoryResponse"}}}}}}},"/v1/customers/{id}/signing-mandate":{"put":{"tags":["Customers"],"summary":"Set a corporate's signing mandate","description":"Stores the board's instruction (ANY_ONE / ANY_TWO / ALL). Payments do NOT enforce it in this wave.","operationId":"updateSigningMandate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSigningMandateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}}}}},"/v1/compliance/regulators/{code}/profile":{"get":{"tags":["Regulators"],"operationId":"profile","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}},"put":{"tags":["Regulators"],"summary":"Park a change to the filer identity. Writes nothing until a second person releases it.","operationId":"changeProfile","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegulatorProfileChangeDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/regulators/{code}/channels":{"get":{"tags":["Regulators"],"operationId":"channels","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}},"put":{"tags":["Regulators"],"summary":"Park a change to where a filing would go. Writes nothing until a second person releases it. Only SIMULATED is implemented; any other transport refuses at release.","operationId":"changeChannel","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegulatorChannelChangeDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/prudential-config":{"get":{"tags":["Prudential Returns"],"summary":"The prudential thresholds in force, in basis points, with the risk-weight buckets.","operationId":"getConfig_3","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialConfigResponse"}}}}}},"put":{"tags":["Prudential Returns"],"summary":"Request a threshold change. Parks a maker-checker approval; changes nothing until released.","operationId":"requestChange_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePrudentialConfigRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedConfigChangeResponse"}}}}}}},"/v1/compliance/monitoring/rules/{code}":{"put":{"tags":["Transaction Monitoring"],"summary":"Park a change to a monitoring rule. Writes nothing until a second person releases it.","operationId":"changeRule","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringRuleChangeDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/fatca/profile":{"get":{"tags":["FATCA"],"operationId":"profile_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}},"put":{"tags":["FATCA"],"summary":"Park a change to the reporting route or registration. Writes nothing until a second person releases it.","operationId":"changeProfile_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FatcaProfileChangeDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/entity-profile":{"get":{"tags":["Compliance Reports"],"summary":"The goAML reporting-entity profile. configured=false means exports are templates.","operationId":"getProfile","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ComplianceEntityProfileResponse"}}}}}},"put":{"tags":["Compliance Reports"],"summary":"Set the FIU-issued reporting-entity values. Omitted fields keep their current value.","operationId":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateComplianceEntityProfileRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ComplianceEntityProfileResponse"}}}}}}},"/v1/branches/{id}":{"get":{"tags":["Branches"],"operationId":"getBranch_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}}}},"put":{"tags":["Branches"],"operationId":"updateBranch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBranchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}}}}},"/v1/bills/billers/{id}":{"put":{"tags":["Bill payments"],"summary":"Amend a biller (including enable/disable). Parks for release; changes nothing.","operationId":"updateBiller","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillerChangeCommand"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/{id}":{"get":{"tags":["Agency Banking"],"summary":"One agent","operationId":"get_5","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}}},"put":{"tags":["Agency Banking"],"summary":"Amend contact and supervision details","description":"Not the code, the customer or the currency: those are what a checker approved.","operationId":"update_2","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}}}},"/v1/treasury/reserves/calculate":{"post":{"tags":["Statutory Reserves"],"summary":"Calculate the statutory reserve for a date. The acting person comes from the session.","operationId":"calculateReserve","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"calculatedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StatutoryReserveResponse"}}}}}}},"/v1/treasury/investments":{"get":{"tags":["Investments"],"operationId":"listInvestments","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvestmentResponse"}}}}}}},"post":{"tags":["Investments"],"summary":"Request a purchase. Parks a maker-checker approval; buys nothing until released.","operationId":"purchaseInvestment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseInvestmentRequestDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/treasury/investments/{id}/sell":{"post":{"tags":["Investments"],"summary":"Request a sale. Parks a maker-checker approval; sells nothing until released.","operationId":"sellInvestment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellInvestmentRequestDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/treasury/investments/{id}/mature":{"post":{"tags":["Investments"],"summary":"Request a maturity. Parks a maker-checker approval; books nothing until released.","operationId":"matureInvestment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatureInvestmentRequestDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/treasury/cash-flow/weekly":{"post":{"tags":["Cash Flow Forecasts"],"summary":"Generate a weekly forecast. The acting person comes from the session.","operationId":"generateWeeklyForecast","parameters":[{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":12}},{"name":"generatedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashFlowForecastResponse"}}}}}}}},"/v1/treasury/cash-flow/monthly":{"post":{"tags":["Cash Flow Forecasts"],"summary":"Generate a monthly forecast. The acting person comes from the session.","operationId":"generateMonthlyForecast","parameters":[{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":12}},{"name":"generatedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashFlowForecastResponse"}}}}}}}},"/v1/treasury/cash-flow/daily":{"post":{"tags":["Cash Flow Forecasts"],"summary":"Generate a daily forecast. The acting person comes from the session.","operationId":"generateDailyForecast","parameters":[{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":30}},{"name":"generatedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashFlowForecastResponse"}}}}}}}},"/v1/treasury/alm/generate":{"post":{"tags":["ALM"],"summary":"Generate the ALM position for a date. The acting person comes from the session.","operationId":"generatePosition","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"generatedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AlmPositionResponse"}}}}}}},"/v1/transactions":{"get":{"tags":["Transactions"],"summary":"Search transactions (paged, filterable)","operationId":"searchTransactions","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["DEPOSIT","WITHDRAWAL","TRANSFER","INTEREST_ACCRUAL","FEE","LOAN_DISBURSEMENT","LOAN_REPAYMENT","ADJUSTMENT","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","SALARY_PAYMENT","BULK_PAYMENT","BILL_PAYMENT","PAYMENT_REVERSAL","INVESTMENT_PURCHASE","INVESTMENT_MATURITY","INVESTMENT_SALE","INVESTMENT_INTEREST"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","POSTED","REVERSED","CANCELLED"]}},{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","POSTED","REVERSED","CANCELLED"]}},{"name":"reference","in":"query","required":false,"schema":{"type":"string"}},{"name":"glAccountCode","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":25}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedResponseTransactionResponse"}}}}}},"post":{"tags":["Transactions"],"summary":"Capture a manual journal. Parks for release; posts nothing.","operationId":"createTransaction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTransactionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/transactions/{id}/reverse":{"post":{"tags":["Transactions"],"summary":"Request a reversal. Parks for release; reverses nothing.","operationId":"reverseTransaction","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"reversedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"reason","in":"query","description":"Optional. Why the reversal is being asked for; shown to the checker. At most 1000 characters.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/transactions/{id}/post":{"post":{"tags":["Transactions"],"summary":"Post a released manual journal. Refused while it is still parked.","operationId":"postTransaction","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/transactions/{id}/abandon":{"post":{"tags":["Transactions"],"summary":"Close a captured journal whose approval was refused or lapsed.","operationId":"abandonTransaction","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/standing-orders":{"get":{"tags":["Standing Orders"],"operationId":"listStandingOrders","parameters":[{"name":"accountId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StandingOrderResponse"}}}}}}},"post":{"tags":["Standing Orders"],"operationId":"createStandingOrder","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStandingOrderRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StandingOrderResponse"}}}}}}},"/v1/standing-orders/execute":{"post":{"tags":["Standing Orders"],"operationId":"executeStandingOrders","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StandingOrderExecutionResultResponse"}}}}}}},"/v1/staff/roles":{"get":{"tags":["Staff RBAC"],"operationId":"listRoles","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StaffRoleView"}}}}}}},"post":{"tags":["Staff RBAC Admin"],"operationId":"createRole","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStaffRoleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StaffRoleView"}}}}}}},"/v1/staff/identities":{"get":{"tags":["Staff RBAC"],"operationId":"listIdentities","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StaffIdentityView"}}}}}}},"post":{"tags":["Staff RBAC Admin"],"operationId":"createIdentity","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStaffIdentityRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/v1/screening/{id}/review":{"post":{"tags":["Screening"],"operationId":"reviewMatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewScreeningDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ScreeningRecordResponse"}}}}}}},"/v1/screening/watchlist":{"get":{"tags":["Screening"],"operationId":"searchWatchlist","parameters":[{"name":"name","in":"query","required":false,"schema":{"type":"string"}},{"name":"nationalId","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WatchlistEntryResponse"}}}}}}},"post":{"tags":["Screening"],"operationId":"addToWatchlist","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddWatchlistDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/WatchlistEntryResponse"}}}}}}},"/v1/screening/customer/{customerId}":{"get":{"tags":["Screening"],"operationId":"getScreeningHistory","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScreeningRecordResponse"}}}}}}},"post":{"tags":["Screening"],"operationId":"screenCustomer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScreeningRecordResponse"}}}}}}}},"/v1/reports/schedules":{"get":{"tags":["Report Scheduler"],"summary":"The report schedules, soonest due first.","operationId":"listSchedules","parameters":[{"name":"activeOnly","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportScheduleResponse"}}}}}}},"post":{"tags":["Report Scheduler"],"summary":"Create a report schedule. Produces nothing until it is run.","operationId":"createSchedule","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportScheduleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReportScheduleResponse"}}}}}}},"/v1/reports/schedules/run-due":{"post":{"tags":["Report Scheduler"],"summary":"Run every schedule due on or before asOf. Idempotent per schedule per period.","operationId":"runDue","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RunDueResponse"}}}}}}},"/v1/reports/generate":{"post":{"tags":["Report Scheduler"],"summary":"Produce a report now. Recorded on the run history like any other run.","operationId":"generate","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateReportRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReportRunResponse"}}}}}}},"/v1/reconciliation/definitions":{"get":{"tags":["Reconciliation"],"summary":"List reconciliation definitions","operationId":"listDefinitions","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReconDefinitionResponse"}}}}}}},"post":{"tags":["Reconciliation"],"summary":"Create a new reconciliation definition","operationId":"createDefinition","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReconDefinitionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReconDefinitionResponse"}}}}}}},"/v1/reconciliation/batches":{"get":{"tags":["Reconciliation"],"summary":"List reconciliation batches with optional filters","operationId":"listBatches","parameters":[{"name":"definitionId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","INGESTING","MATCHING","REVIEW","COMPLETED","FAILED"]}},{"name":"fromDate","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"toDate","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReconBatchResponse"}}}}}}},"post":{"tags":["Reconciliation"],"summary":"Create and run a reconciliation batch","operationId":"createBatch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReconBatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReconBatchResponse"}}}}}}},"/v1/reconciliation/batches/{id}/run-matching":{"post":{"tags":["Reconciliation"],"summary":"Run the multi-pass matching engine on a batch","operationId":"runMatching","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"performedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReconBatchResponse"}}}}}}},"/v1/reconciliation/batches/{id}/manual-match":{"post":{"tags":["Reconciliation"],"summary":"Manually match source and target items","operationId":"manualMatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualMatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/reconciliation/batches/{id}/ingest-target":{"post":{"tags":["Reconciliation"],"summary":"Ingest target (internal CBS) items from CSV content","operationId":"ingestTarget","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/reconciliation/batches/{id}/ingest-source":{"post":{"tags":["Reconciliation"],"summary":"Ingest source (external/switch) items from CSV content","operationId":"ingestSource","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/reconciliation/batches/{id}/complete":{"post":{"tags":["Reconciliation"],"summary":"Mark a reviewed batch as completed","operationId":"completeBatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"performedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReconBatchResponse"}}}}}}},"/v1/products":{"get":{"tags":["Deposit Products"],"operationId":"listProducts","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductResponse"}}}}}}},"post":{"tags":["Deposit Products"],"operationId":"createProduct","parameters":[{"name":"createdBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProductRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}}}}},"/v1/platform/fx/zwg-rate/refresh":{"post":{"tags":["Per-currency money bounds"],"summary":"Fetch today's official USD/ZWG rate. Keeps the last good one on failure.","operationId":"refresh","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ZwgRateResponse"}}}}}}},"/v1/platform/fees":{"get":{"tags":["Fee configuration"],"summary":"List fee rules, newest first per payment type","operationId":"list","parameters":[{"name":"paymentType","in":"query","required":false,"schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeeConfigResponse"}}}}}}},"post":{"tags":["Fee configuration"],"summary":"Set a fee rule. Parks for release; charges nothing yet.","operationId":"create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeConfigChangeCommand"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/platform/fees/{id}/close":{"post":{"tags":["Fee configuration"],"summary":"Close a fee rule. Parks for release; changes nothing yet.","operationId":"close","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeConfigChangeCommand"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/periods/{id}/reopen":{"post":{"tags":["Periods"],"operationId":"reopenPeriod","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReopenPeriodRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/periods/year-end":{"post":{"tags":["Periods"],"operationId":"runYearEnd","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"runBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/YearEndResultResponse"}}}}}}},"/v1/periods/treasury-day-end":{"post":{"tags":["Periods"],"operationId":"runTreasuryDayEnd","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"runBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TreasuryDayEndResultResponse"}}}}}}},"/v1/periods/month-end":{"post":{"tags":["Periods"],"operationId":"runMonthEnd","parameters":[{"name":"yearMonth","in":"query","required":true,"schema":{"type":"string"}},{"name":"runBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/MonthEndResultResponse"}}}}}}},"/v1/periods/day-end":{"post":{"tags":["Periods"],"operationId":"runDayEnd","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"runBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DayEndResultResponse"}}}}}}},"/v1/payments":{"get":{"tags":["Payments"],"operationId":"listPayments","parameters":[{"name":"accountId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["INTERNAL_TRANSFER","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","BILL_PAYMENT","SALARY_PAYMENT","BULK_PAYMENT"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["INITIATED","PENDING_APPROVAL","APPROVED","PROCESSING","SENT","COMPLETED","FAILED","REVERSED","TIMED_OUT","CANCELLED"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"post":{"tags":["Payments"],"operationId":"initiatePayment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiatePaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/{id}/reverse":{"post":{"tags":["Payments"],"summary":"Request a payment reversal. Parks for release; reverses nothing.","operationId":"reversePayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReversePaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/payments/{id}/provider-submit":{"post":{"tags":["Payments"],"summary":"Submit a sent payment to its provider switch. Idempotent per order.","description":"Fires the instruction at the rail the payment was already routed to. Accepting is not settling: no journal is posted here. Refuses with a named code when the rail is modelled, unconfigured, or already terminal.","operationId":"submit","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProviderSubmissionResponse"}}}}}}},"/v1/payments/{id}/provider-poll":{"post":{"tags":["Payments"],"summary":"Poll a submitted payment's provider status. Idempotent; can settle.","description":"On terminal code 00 this drives the rail's existing settlement confirmation, which posts the clearing journal and completes the order. On a terminal failure code it records the code and marks the order FAILED, moving no money. A second poll on a terminal submission posts nothing.","operationId":"poll","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProviderSubmissionResponse"}}}}}}},"/v1/payments/{id}/process":{"post":{"tags":["Payments"],"operationId":"processPayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessPaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/{id}/confirm-settlement":{"post":{"tags":["Payments"],"operationId":"confirmSettlement","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmSettlementRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/{id}/cancel":{"post":{"tags":["Payments"],"operationId":"cancelPayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/{id}/approve":{"post":{"tags":["Payments"],"operationId":"approvePayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovePaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/receive":{"post":{"tags":["Payments"],"operationId":"receivePayment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceivePaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/provider-sweep":{"post":{"tags":["Payments"],"summary":"Submit every queued payment and poll every submitted one. Idempotent.","description":"Intended for a scheduler calling on its own identity; nothing in this engine ticks on its own (V50). Can settle: a poll returning terminal code 00 drives the rail's existing settlement confirmation. Per-row failures are counted, never fatal.","operationId":"sweep","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProviderSweepResponse"}}}}}}},"/v1/payment-batches/{id}/submit":{"post":{"tags":["Payment Batches"],"operationId":"submitForApproval","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitBatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}},"/v1/payment-batches/{id}/process":{"post":{"tags":["Payment Batches"],"operationId":"processBatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}},"/v1/payment-batches/{id}/approve":{"post":{"tags":["Payment Batches"],"operationId":"approveBatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveBatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}},"/v1/payment-batches/salary":{"post":{"tags":["Payment Batches"],"operationId":"createSalaryBatch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSalaryBatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}},"/v1/payment-batches/bulk":{"post":{"tags":["Payment Batches"],"operationId":"createBulkBatch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBulkBatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}},"/v1/onboarding/requirement-templates":{"get":{"tags":["Onboarding Requirements"],"summary":"List requirement templates","description":"Admin console read: every item including retired ones. Optionally filtered to one track.","operationId":"list_1","parameters":[{"name":"track","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RequirementTemplateView"}}}}}}},"post":{"tags":["Onboarding Requirements"],"summary":"Add a checklist item to a track","operationId":"create_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRequirementTemplateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RequirementTemplateView"}}}}}}},"/v1/onboarding/requirement-templates/{id}/deactivate":{"post":{"tags":["Onboarding Requirements"],"summary":"Retire a checklist item","description":"Soft retirement. The row is kept, because applications were assessed against it.","operationId":"deactivate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RequirementTemplateView"}}}}}}},"/v1/onboarding/requirement-templates/{id}/activate":{"post":{"tags":["Onboarding Requirements"],"summary":"Restore a retired checklist item","operationId":"activate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RequirementTemplateView"}}}}}}},"/v1/onboarding/applications":{"get":{"tags":["Onboarding Applications"],"summary":"List applications","description":"For an applicant (applicantId), their own applications. For a staff caller (X-Staff-Actor), the review queue, optionally filtered by status.","operationId":"list_2","parameters":[{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","enum":["DRAFT","SUBMITTED","IN_REVIEW","REQUIREMENTS_PENDING","APPROVED","REJECTED"]}}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OnboardingApplicationView"}}}}}}},"post":{"tags":["Onboarding Applications"],"summary":"Create a draft application (applicant)","operationId":"create_2","parameters":[{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOnboardingApplicationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationView"}}}}}}},"/v1/onboarding/applications/{id}/submit":{"post":{"tags":["Onboarding Applications"],"summary":"Submit an application for review (applicant)","description":"Draft or returned -> submitted. Refused if a required document is still missing.","operationId":"submit_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingApplicantActorRequest"}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationView"}}}}}}},"/v1/onboarding/applications/{id}/open":{"post":{"tags":["Onboarding Applications"],"summary":"Open a submitted application for review (staff, operator+)","description":"Submitted -> in review. A WRITE: a viewer/auditor role must not advance the queue.","operationId":"open","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"reviewedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationView"}}}}}}},"/v1/onboarding/applications/{id}/items/{itemId}/review":{"post":{"tags":["Onboarding Applications"],"summary":"Accept or reject one checklist item (staff, operator+)","description":"A reject requires a note (kept in-app + audit ONLY) and returns the whole application to requirements_pending. Accepted items survive a return.","operationId":"reviewItem","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"reviewedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewItemRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationDetailView"}}}}}}},"/v1/onboarding/applications/{id}/documents":{"get":{"tags":["Onboarding Applications"],"summary":"List an application's documents (metadata only)","operationId":"listDocuments","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"post":{"tags":["Onboarding Applications"],"summary":"Upload a document for a requirement (applicant)","description":"Parts: file (required), requirementTemplateId (required). The declared content type must agree with the file's magic bytes; the document is created scanStatus PENDING and is not servable until an external scanner reports CLEAN. Re-upload for a returned requirement supersedes the previous document.","operationId":"uploadDocument","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"requirementTemplateId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"uploadedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OnboardingApplicationDetailView"}}}}}}},"/v1/notifications/statements/run-due":{"post":{"tags":["notification-sweep-controller"],"summary":"Tell active account holders their statement for the last completed period is available. Idempotent per account per period.","operationId":"runStatementNotices","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StatementNoticeRunResponse"}}}}}}},"/v1/notifications/statement-claims/{id}/retry":{"post":{"tags":["Notification administration"],"summary":"Return a stranded claim to the sweep so it is attempted again.","operationId":"retryClaim","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StatementClaimResponse"}}}}}}},"/v1/notifications/statement-claims/{id}/cancel":{"post":{"tags":["Notification administration"],"summary":"Close a stranded claim. Terminal, and the reason is recorded.","operationId":"cancelClaim","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelStatementClaimRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StatementClaimResponse"}}}}}}},"/v1/loans/{id}/write-off":{"post":{"tags":["Loans"],"summary":"Write off a loan","operationId":"writeOffLoan","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteOffLoanRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}},"/v1/loans/{id}/repay":{"post":{"tags":["Loans"],"summary":"Process a loan repayment","operationId":"processRepayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessRepaymentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanRepaymentResponse"}}}}}}},"/v1/loans/{id}/recoveries":{"get":{"tags":["Loans"],"summary":"Recoveries recorded against a written-off loan, and what may still be recovered","operationId":"getRecoveries","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}},"post":{"tags":["Loans"],"summary":"Record a post-write-off recovery (credits 4207, does not resurrect the loan)","operationId":"recordRecovery","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordRecoveryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanRepaymentResponse"}}}}}}},"/v1/loans/roll-due":{"post":{"tags":["Loans"],"summary":"Roll due installment interest and fees onto their loans (daily batch)","operationId":"rollDue","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loans/disburse":{"post":{"tags":["Loans"],"summary":"Disburse an approved loan","operationId":"disburseLoan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisburseLoanRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}},"/v1/loans/auto-debit":{"get":{"tags":["Loan Auto-Debit"],"summary":"List auto-debit instructions (all, or filtered by loan)","operationId":"list_3","parameters":[{"name":"loanId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AutoDebitInstructionResponse"}}}}}}},"post":{"tags":["Loan Auto-Debit"],"summary":"Register an opt-in auto-debit instruction for a loan","operationId":"create_3","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAutoDebitInstructionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AutoDebitInstructionResponse"}}}}}}},"/v1/loans/auto-debit/run":{"post":{"tags":["Loan Auto-Debit"],"summary":"Run every enabled auto-debit instruction (operator-triggered)","operationId":"run","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AutoDebitRunResult"}}}}}}},"/v1/loans/arrears/update":{"post":{"tags":["Loans"],"summary":"Update arrears for all active loans (daily batch)","operationId":"updateArrears","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loan-provisioning/run":{"post":{"tags":["Loan Provisioning"],"summary":"Run IFRS 9 provisioning for all active loans (incremental delta-based GL entries)","operationId":"runProvisioning","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunProvisioningRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loan-products":{"get":{"tags":["Loan Products"],"summary":"List all active loan products","operationId":"listProducts_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanProductResponse"}}}}}}},"post":{"tags":["Loan Products"],"summary":"Create a new loan product","operationId":"createProduct_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLoanProductRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanProductResponse"}}}}}}},"/v1/loan-products/{id}/deactivate":{"post":{"tags":["Loan Products"],"summary":"Deactivate a loan product","operationId":"deactivateProduct","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"performedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanProductResponse"}}}}}}},"/v1/loan-collateral":{"post":{"tags":["Loan Collateral"],"summary":"Register a security against a loan or a loan application","operationId":"register","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterCollateralRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CollateralResponse"}}}}}}},"/v1/loan-collateral/{id}/verify":{"post":{"tags":["Loan Collateral"],"summary":"Mark a pledged security as verified","operationId":"verify","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyCollateralRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CollateralResponse"}}}}}}},"/v1/loan-collateral/{id}/revaluation":{"post":{"tags":["Loan Collateral"],"summary":"Request a revaluation (parks a lending_credit approval; writes nothing yet)","operationId":"requestRevaluation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestRevaluationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loan-collateral/{id}/release":{"post":{"tags":["Loan Collateral"],"summary":"Release a security after the loan is settled (audited, no approval step)","operationId":"release","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCollateralRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CollateralResponse"}}}}}}},"/v1/loan-applications":{"get":{"tags":["Loan Applications"],"summary":"Search loan applications (paged, filterable)","description":"Filter by reference substring, customer, product, status, requested-amount range and capture-date range. Dates are inclusive of both days.","operationId":"listApplications","parameters":[{"name":"reference","in":"query","required":false,"schema":{"type":"string"}},{"name":"customerId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"productId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["SUBMITTED","UNDER_REVIEW","ADDITIONAL_INFO_REQUIRED","PENDING_CHECKER_APPROVAL","APPROVED","REJECTED","DISBURSED","CANCELLED","EXPIRED"]}},{"name":"minAmountCents","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"maxAmountCents","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"fromDate","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"toDate","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":25}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedResponseLoanApplicationResponse"}}}}}},"post":{"tags":["Loan Applications"],"summary":"Submit a new loan application","operationId":"submitApplication","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitLoanApplicationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}},"/v1/loan-applications/{id}/review":{"post":{"tags":["Loan Applications"],"summary":"Move application to under review","operationId":"reviewApplication","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"reviewedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}},"/v1/loan-applications/{id}/reject":{"post":{"tags":["Loan Applications"],"summary":"Reject a loan application","operationId":"rejectApplication","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectLoanApplicationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}},"/v1/loan-applications/{id}/checker-approve":{"post":{"tags":["Loan Applications"],"summary":"Checker confirms loan approval (dual-authorization)","operationId":"checkerApproveApplication","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"checkerId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}},"/v1/loan-applications/{id}/approve":{"post":{"tags":["Loan Applications"],"summary":"Maker initiates loan approval (requires checker confirmation)","operationId":"approveApplication","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveLoanApplicationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}},"/v1/lending-groups":{"get":{"tags":["Group Lending"],"summary":"List lending groups","operationId":"listGroups","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["FORMING","ACTIVE","DORMANT","CLOSED"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LendingGroupResponse"}}}}}}},"post":{"tags":["Group Lending"],"summary":"Create a lending group","operationId":"createGroup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLendingGroupRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LendingGroupResponse"}}}}}}},"/v1/lending-groups/{id}/status":{"post":{"tags":["Group Lending"],"summary":"Change a lending group's status","operationId":"setStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetLendingGroupStatusRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LendingGroupResponse"}}}}}}},"/v1/lending-groups/{id}/repay":{"post":{"tags":["Group Lending"],"summary":"Bulk group repayment with an explicit per-member split (must sum exactly)","operationId":"repayGroup","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRepaymentBatchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/lending-groups/{id}/members":{"get":{"tags":["Group Lending"],"summary":"List a group's members","operationId":"listMembers","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupMemberResponse"}}}}}}},"post":{"tags":["Group Lending"],"summary":"Add an existing customer to a group","operationId":"addMember","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddGroupMemberRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GroupMemberResponse"}}}}}}},"/v1/lending-groups/{id}/members/{customerId}/exit":{"post":{"tags":["Group Lending"],"summary":"Exit a member from a group","operationId":"exitMember","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitGroupMemberRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GroupMemberResponse"}}}}}}},"/v1/lending-groups/{id}/facilities":{"get":{"tags":["Group Lending"],"summary":"List a group's facilities, newest cycle first","operationId":"listFacilities","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupFacilityResponse"}}}}}}},"post":{"tags":["Group Lending"],"summary":"Originate a group facility: one credit decision covering N member loans","operationId":"createFacility","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupFacilityRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GroupFacilityResponse"}}}}}}},"/v1/lending-groups/facilities/{facilityId}/disburse":{"post":{"tags":["Group Lending"],"summary":"Disburse all member loans on an approved group facility","operationId":"disburseFacility","parameters":[{"name":"facilityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisburseGroupFacilityRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}}},"/v1/kyc":{"post":{"tags":["KYC"],"operationId":"initiateKyc","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateKycDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/kyc/{id}/submit":{"post":{"tags":["KYC"],"operationId":"submitForReview","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/kyc/{id}/review":{"post":{"tags":["KYC"],"operationId":"reviewKyc","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewKycDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/kyc/{id}/reject":{"post":{"tags":["KYC"],"operationId":"rejectKyc","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectKycDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/kyc/{id}/kyb-attestations":{"post":{"tags":["KYC"],"summary":"Record KYB attestations on a corporate KYC file","description":"Corporate files only. Omitted flags are left as they are. Does not change the record's status.","operationId":"recordKybAttestations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KybAttestationsDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/kyc/{id}/external-checks":{"get":{"tags":["KYC"],"summary":"Latest stored external verification run for a KYC record","operationId":"getExternalChecks","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycExternalChecksResponse"}}}}}},"post":{"tags":["KYC"],"summary":"Run the external verification checks for a KYC record","operationId":"runExternalChecks","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycExternalChecksResponse"}}}}}}},"/v1/kyc/{id}/approve":{"post":{"tags":["KYC"],"operationId":"approveKyc","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/internal/documents/scan-result":{"post":{"tags":["Internal: Document Scanning"],"summary":"Record a malware-scan verdict for a stored document","description":"Scanner-only: rejected unless the caller's API-key identity is the scanner. Idempotent: re-posting the same verdict answers 200 and changes nothing, so a scanner retrying after a timeout never sees an error. 404 when no document is stored at that path.","operationId":"recordScanResult","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResultRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/interest/capitalise":{"post":{"tags":["Interest"],"operationId":"runMonthlyCapitalisation","parameters":[{"name":"valueDate","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InterestCapitalisationResultResponse"}}}}}}},"/v1/interest/accrue":{"post":{"tags":["Interest"],"operationId":"runDayEndAccrual","parameters":[{"name":"valueDate","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InterestAccrualResultResponse"}}}}}}},"/v1/gl/accounts":{"get":{"tags":["General Ledger"],"operationId":"listGlAccounts","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlAccountResponse"}}}}}}},"post":{"tags":["General Ledger"],"summary":"Create a GL account (structural config, no money movement)","operationId":"createGlAccount","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGlAccountRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GlAccountResponse"}}}}}}},"/v1/gl/accounts/import":{"post":{"tags":["General Ledger"],"summary":"Bulk-create GL accounts (all-or-nothing)","operationId":"importGlAccounts","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportGlAccountsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ImportGlAccountsResponse"}}}}}}},"/v1/expenses":{"get":{"tags":["Expenses"],"summary":"Captured expenses, newest first","operationId":"listExpenses","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING_APPROVAL","POSTED","REJECTED"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExpenseResponse"}}}}}}},"post":{"tags":["Expenses"],"summary":"Capture an expense. Parks a maker-checker approval; posts nothing until released.","operationId":"captureExpense","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExpenseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/expenses/categories":{"get":{"tags":["Expenses"],"summary":"Every expense category, retired ones included","operationId":"listCategories","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExpenseCategoryResponse"}}}}}}},"post":{"tags":["Expenses"],"summary":"Name a kind of spend and fix its debit GL account (posts nothing)","operationId":"createCategory","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExpenseCategoryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExpenseCategoryResponse"}}}}}}},"/v1/exchange-rates":{"get":{"tags":["Exchange Rates"],"operationId":"getRate","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"to","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}},"post":{"tags":["Exchange Rates"],"operationId":"setRate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExchangeRateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}}},"/v1/exchange-rates/convert":{"post":{"tags":["Exchange Rates"],"operationId":"convert","parameters":[{"name":"fromCurrency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"toCurrency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"amountCents","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ConversionResponse"}}}}}}},"/v1/customers":{"get":{"tags":["Customers"],"summary":"Customer directory: paged, searchable, and exact national-ID lookup","description":"Always answers the paged envelope {content, page, size, totalElements, totalPages, first, last}. An exact `nationalId` lookup returns a one-row page, or a page with totalElements 0 when there is no match.","operationId":"listCustomers","parameters":[{"name":"nationalId","in":"query","required":false,"schema":{"type":"string"}},{"name":"registrationNumber","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"isPep","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"customerType","in":"query","required":false,"schema":{"type":"string","enum":["INDIVIDUAL","CORPORATE"]}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":25}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedResponseCustomerDirectoryRow"}}}}}},"post":{"tags":["Customers"],"operationId":"createCustomer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}}}}},"/v1/customers/{customerId}/officers":{"get":{"tags":["Customer Officers"],"summary":"The officer register for a company","description":"Retired officers are included by default; pass activeOnly=true for the people who can act for the company today.","operationId":"listOfficers","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"activeOnly","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomerOfficerResponse"}}}}}}},"post":{"tags":["Customer Officers"],"summary":"Appoint a director or signatory","operationId":"addOfficer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddOfficerDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerOfficerResponse"}}}}}}},"/v1/customers/{customerId}/officers/{officerId}/reactivate":{"post":{"tags":["Customer Officers"],"summary":"Restore a retired officer","operationId":"reactivateOfficer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"officerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfficerActorDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerOfficerResponse"}}}}}}},"/v1/customers/{customerId}/officers/{officerId}/deactivate":{"post":{"tags":["Customer Officers"],"summary":"Retire an officer (soft delete; the row is kept for the audit trail)","operationId":"deactivateOfficer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"officerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfficerActorDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerOfficerResponse"}}}}}}},"/v1/customers/{customerId}/documents":{"get":{"tags":["Customer Documents"],"summary":"List a customer's documents","description":"Metadata only, newest first. Never returns bytes.","operationId":"list_4","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"docType","in":"query","required":false,"schema":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["UPLOADED","VERIFIED","REJECTED","ARCHIVED"]}},{"name":"kycRecordId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":25}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedResponseDocumentResponse"}}}}}},"post":{"tags":["Customer Documents"],"summary":"Upload a customer document","description":"Parts: file (required), docType (required), kycRecordId (optional). The declared content type must agree with the file's magic bytes, and the SNIFFED type is what gets stored. The document is created with scanStatus PENDING and its bytes are not servable until an external scanner reports CLEAN.","operationId":"upload","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"docType","in":"query","required":true,"schema":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]}},{"name":"kycRecordId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"uploadedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/customers/{customerId}/documents/{documentId}/review":{"post":{"tags":["Customer Documents"],"summary":"Verify or reject one document","operationId":"review","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewDocumentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/customers/{customerId}/documents/{documentId}/attach":{"post":{"tags":["Customer Documents"],"summary":"Attach a document to a KYC record","description":"The KYC record must belong to the same customer.","operationId":"attach","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachDocumentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/customers/{customerId}/documents/{documentId}/archive":{"post":{"tags":["Customer Documents"],"summary":"Archive a document (admin)","description":"Soft archive. There is no hard delete in this API.","operationId":"archive","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/customers/{customerId}/contacts":{"get":{"tags":["Customer CIF"],"summary":"The customer's interaction log, newest first","description":"Ordered by when the contact happened, not when it was typed up.","operationId":"listContacts","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomerContactResponse"}}}}}}},"post":{"tags":["Customer CIF"],"summary":"Log a contact with the customer (append-only)","operationId":"logContact","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogCustomerContactRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerContactResponse"}}}}}}},"/v1/customers/{customerId}/cases":{"get":{"tags":["Customer CIF"],"summary":"The customer's cases: open first, then resolved, each newest first","description":"Pass status=OPEN or status=RESOLVED to narrow it.","operationId":"listCases","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["OPEN","RESOLVED"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomerCaseResponse"}}}}}}},"post":{"tags":["Customer CIF"],"summary":"Open a case against the customer file","operationId":"openCase","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenCustomerCaseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerCaseResponse"}}}}}}},"/v1/customers/{customerId}/cases/{caseId}/resolve":{"post":{"tags":["Customer CIF"],"summary":"Resolve a case (terminal; a recurrence is a new case)","operationId":"resolveCase","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"caseId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveCustomerCaseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerCaseResponse"}}}}}}},"/v1/customers/corporate":{"post":{"tags":["Customers"],"summary":"Onboard a corporate customer","description":"A company has no national ID and no date of birth; its identity is the registration number, which is unique among corporates.","operationId":"createCorporateCustomer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCorporateCustomerRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}}}}},"/v1/compliance/submissions/{id}/attest":{"post":{"tags":["Regulatory Submissions"],"summary":"Record a receipt a human being received on a portal. NOT an acknowledgement: nothing here is produced by this engine and no state is derived from it.","operationId":"attest","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttestSubmissionDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/submissions/prepare":{"post":{"tags":["Regulatory Submissions"],"summary":"Put a finished artefact in front of a checker. Parks a REGULATORY_SUBMISSION_RELEASE approval and moves the artefact's own status not at all.","operationId":"prepare","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareSubmissionDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/submissions/prepare-threshold-batch":{"post":{"tags":["Regulatory Submissions"],"summary":"Freeze the pending threshold reports into one batch and put it in front of a checker.","operationId":"prepareThresholdBatch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareThresholdBatchDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/returns/{id}/submit":{"post":{"tags":["Prudential Returns"],"summary":"Prepare a REVIEWED return for submission. PARKS a release; submits nothing. The return stays REVIEWED until a second person releases it, and no RBZ reference is invented.","operationId":"submitReturn","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/returns/{id}/review":{"post":{"tags":["Prudential Returns"],"operationId":"reviewReturn","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewReturnDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/returns/loan-classification":{"post":{"tags":["Prudential Returns"],"summary":"RBZ loan classification and provisioning return for the provisioning run on this date","operationId":"generateLoanClassification","parameters":[{"name":"periodEnd","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/returns/liquidity-ratio":{"post":{"tags":["Prudential Returns"],"operationId":"generateLiquidityRatio","parameters":[{"name":"periodEnd","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/returns/large-exposure":{"post":{"tags":["Prudential Returns"],"operationId":"generateLargeExposure","parameters":[{"name":"periodEnd","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/returns/deposit-return":{"post":{"tags":["Prudential Returns"],"operationId":"generateDepositReturn","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/returns/capital-adequacy":{"post":{"tags":["Prudential Returns"],"operationId":"generateCapitalAdequacy","parameters":[{"name":"periodEnd","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/returns/aml-statistics":{"post":{"tags":["Prudential Returns"],"operationId":"generateAmlStatistics","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformedByDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}},"/v1/compliance/reports/ttr/file-pending":{"post":{"tags":["Compliance Reports"],"summary":"Freeze the pending TTRs into one batch and PARK its release. Files nothing; every report stays PENDING until a second person releases the batch.","operationId":"filePendingTtrs","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/reports/str":{"get":{"tags":["Compliance Reports"],"operationId":"listStrs","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StrResponse"}}}}}}},"post":{"tags":["Compliance Reports"],"operationId":"createStr","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStrDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StrResponse"}}}}}}},"/v1/compliance/reports/str/{id}/review":{"post":{"tags":["Compliance Reports"],"operationId":"reviewStr","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewStrDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StrResponse"}}}}}}},"/v1/compliance/reports/str/{id}/file":{"post":{"tags":["Compliance Reports"],"summary":"Prepare an APPROVED STR for submission. PARKS a release; files nothing. The report stays APPROVED until a second person releases it, and no FIU reference is ever invented.","operationId":"fileStr","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/reports/str/{id}/approve":{"post":{"tags":["Compliance Reports"],"operationId":"approveStr","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveStrDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StrResponse"}}}}}}},"/v1/compliance/regulatory-returns/runs":{"post":{"tags":["Regulatory Returns"],"summary":"Build a definition for a period. Writes a run and its values; files nothing. Building the same period again mints the next attempt and leaves the previous one in the book.","operationId":"build","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildReturnRunDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/monitoring/day-end":{"post":{"tags":["Transaction Monitoring"],"summary":"Run the aggregate day-end sweep. Omit the date for the last complete day in the institution's configured business time zone, which is how the scheduled job calls it. Structuring and velocity rules look across a day, so they cannot be evaluated on a single posting.","operationId":"dayEnd","parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"expectedBusinessTimeZone","in":"query","required":false,"schema":{"type":"string"}},{"name":"async","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/monitoring/backfill":{"post":{"tags":["Transaction Monitoring"],"summary":"Screen a window of already-posted transactions. Advisory: a finding is an alert in the existing human queue and a threshold report where one is due. Nothing is blocked.","operationId":"backfill","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}},{"name":"async","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/graph-aml-feed/pull":{"post":{"tags":["GRC Bridge"],"summary":"Pull one page of Customer 360's graph AML feed. Advisory only: a resolved finding becomes a NEW row in the existing human review queue; nothing here files, dismisses or escalates. An unresolved finding is recorded and never invented into an alert.","operationId":"pull","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/fatca/screenings/{id}/dispose":{"post":{"tags":["FATCA"],"summary":"Record what an officer decided the indicia mean. A confirmation or a cure takes evidence; only a DEFER may be recorded without any.","operationId":"dispose","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FatcaDisposeDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/fatca/screen":{"post":{"tags":["FATCA"],"summary":"Screen customers for FATCA indicia. Advisory: it closes nothing, blocks nothing and concludes nothing. Staff-driven; nothing here runs on a schedule.","operationId":"screen","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FatcaScreenBatchDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/ai-advisory/backfill":{"post":{"tags":["AI Advisory"],"summary":"Evaluate a window of already-posted transactions. Advisory: it blocks nothing, reverses nothing and files nothing, and a flag becomes a row in the human review queue.","operationId":"backfill_1","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/collections/promises/{promiseId}/cancel":{"post":{"tags":["Collections"],"summary":"Withdraw a recorded promise","operationId":"cancelPromise","parameters":[{"name":"promiseId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPromiseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/collections/loans/{loanAccountId}/promises":{"get":{"tags":["Collections"],"summary":"Promise history with derived kept/broken outcomes","operationId":"listPromises","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"post":{"tags":["Collections"],"summary":"Record a promise to pay (records an undertaking; moves no money)","operationId":"recordPromise","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordPromiseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/collections/loans/{loanAccountId}/actions":{"get":{"tags":["Collections"],"summary":"The append-only collections history for a loan","operationId":"listActions","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"post":{"tags":["Collections"],"summary":"Append a collection action (call, visit, letter, escalation)","operationId":"recordAction","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordCollectionActionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CollectionActionResponse"}}}}}}},"/v1/branches":{"get":{"tags":["Branches"],"operationId":"listBranches","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BranchResponse"}}}}}}},"post":{"tags":["Branches"],"operationId":"createBranch","parameters":[{"name":"createdBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBranchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}}}}},"/v1/bills/pay":{"post":{"tags":["Bill payments"],"operationId":"payBill","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayBillRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/bills/billers":{"get":{"tags":["Bill payments"],"operationId":"listBillers","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BillerResponse"}}}}}}},"post":{"tags":["Bill payments"],"summary":"Register a biller. Parks for release; changes nothing.","operationId":"createBiller","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillerChangeCommand"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/beneficiaries":{"get":{"tags":["Beneficiaries"],"operationId":"listBeneficiaries","parameters":[{"name":"customerId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BeneficiaryResponse"}}}}}}},"post":{"tags":["Beneficiaries"],"operationId":"addBeneficiary","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddBeneficiaryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficiaryResponse"}}}}}}},"/v1/beneficial-owners":{"post":{"tags":["Beneficial Owners"],"operationId":"addBeneficialOwner","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddBeneficialOwnerDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficialOwnerResponse"}}}}}}},"/v1/beneficial-owners/{id}/verify":{"post":{"tags":["Beneficial Owners"],"operationId":"verifyOwner","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOwnerDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficialOwnerResponse"}}}}}}},"/v1/approvals":{"get":{"tags":["Maker-Checker Approvals"],"operationId":"listApprovals","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING_APPROVAL","APPROVED","REJECTED","EXPIRED"]}},{"name":"entityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"post":{"tags":["Maker-Checker Approvals"],"operationId":"createApprovalRequest","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApprovalRequestDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/approvals/{id}/withdraw":{"post":{"tags":["Maker-Checker Approvals"],"summary":"Withdraw your own parked request. Maker only, and only while no checker has acted.","operationId":"withdrawRequest","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/approvals/{id}/reject":{"post":{"tags":["Maker-Checker Approvals"],"operationId":"rejectRequest","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalDecisionDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/approvals/{id}/approve":{"post":{"tags":["Maker-Checker Approvals"],"operationId":"approveRequest","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalDecisionDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/approvals/expire-stale":{"post":{"tags":["Maker-Checker Approvals"],"summary":"Lapse every parked request past its expiry. Idempotent.","description":"Brings overdue PENDING_APPROVAL rows to EXPIRED. Intended for a scheduler calling on its own identity; nothing in this engine ticks on its own.","operationId":"expireStale","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExpireStaleResponse"}}}}}}},"/v1/api-keys":{"get":{"tags":["API Keys"],"operationId":"listApiKeys","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyResponse"}}}}}}},"post":{"tags":["API Keys"],"operationId":"createApiKey","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CreateApiKeyResponse"}}}}}}},"/v1/alerts/{id}/investigate":{"post":{"tags":["Alerts"],"operationId":"addInvestigationNotes","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestigationNotesDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}},"/v1/alerts/{id}/file-str":{"post":{"tags":["Alerts"],"operationId":"fileStr_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileStrFromAlertDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StrResponse"}}}}}}},"/v1/alerts/{id}/escalate":{"post":{"tags":["Alerts"],"operationId":"escalateAlert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalateAlertDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}},"/v1/alerts/{id}/dismiss":{"post":{"tags":["Alerts"],"operationId":"dismissAlert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DismissAlertDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}},"/v1/alerts/{id}/close":{"post":{"tags":["Alerts"],"operationId":"closeAlert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseAlertDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}},"/v1/alerts/{id}/assign":{"post":{"tags":["Alerts"],"operationId":"assignAlert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignAlertDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}},"/v1/agents":{"get":{"tags":["Agency Banking"],"summary":"The agent register, by code","operationId":"list_7","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["APPLIED","APPROVED","ACTIVE","SUSPENDED","TERMINATED"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentResponse"}}}}}}},"post":{"tags":["Agency Banking"],"summary":"Record an agent application. Creates an APPLIED agent and nothing else.","operationId":"create_4","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}}}},"/v1/agents/{id}/terminate":{"post":{"tags":["Agency Banking"],"summary":"End an agent relationship. Parks an approval. One way once released.","operationId":"terminate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLifecycleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/{id}/suspend":{"post":{"tags":["Agency Banking"],"summary":"Suspend an agent. Parks an approval; suspends nothing until released.","operationId":"suspend","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLifecycleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/{id}/reinstate":{"post":{"tags":["Agency Banking"],"summary":"Reinstate a suspended agent. Parks an approval; puts the money rail back only on release.","operationId":"reinstate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLifecycleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/{id}/locations":{"get":{"tags":["Agency Banking"],"summary":"The outlets an agent trades from","operationId":"locations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentLocationResponse"}}}}}}},"post":{"tags":["Agency Banking"],"summary":"Add an outlet","description":"An ADDRESS, not a position fix: geo-location needs an agent device and there is none in this wave.","operationId":"addLocation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentLocationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentLocationResponse"}}}}}}},"/v1/agents/{id}/locations/{locationId}/retire":{"post":{"tags":["Agency Banking"],"summary":"Retire an outlet. A soft delete: its history stays readable.","operationId":"retireLocation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"locationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentLocationResponse"}}}}}}},"/v1/agents/{id}/float":{"get":{"tags":["Agency Banking"],"summary":"Every float movement for one agent, newest first","operationId":"floatMovements","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentFloatMovementResponse"}}}}}}},"post":{"tags":["Agency Banking"],"summary":"Top up or draw down an agent's float. Parks an approval; moves nothing until released.","operationId":"requestFloatMovement","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentFloatMovementRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/{id}/float-account":{"post":{"tags":["Agency Banking"],"summary":"Attach the agent's float account (opened on the accounts surface)","operationId":"attachFloatAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachFloatAccountRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}}}},"/v1/agents/{id}/cash-out":{"post":{"tags":["Agency Banking"],"summary":"Cash out at an agent. Posts immediately; refuses until limits are configured.","operationId":"cashOut","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCashRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentCashResponse"}}}}}}},"/v1/agents/{id}/cash-in":{"post":{"tags":["Agency Banking"],"summary":"Cash in at an agent. Posts immediately; refuses until limits are configured.","operationId":"cashIn","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCashRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentCashResponse"}}}}}}},"/v1/agents/{id}/approve":{"post":{"tags":["Agency Banking"],"summary":"Approve an applied agent. Parks an approval; approves nothing until released.","operationId":"approve","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLifecycleRequest"}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/{id}/activate":{"post":{"tags":["Agency Banking"],"summary":"Activate an approved agent. Refuses until a float account and limits exist.","operationId":"activate_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}}}},"/v1/agents/limits":{"get":{"tags":["Agency Banking"],"summary":"Every configured limits row, institution defaults and per-agent overrides","operationId":"listLimits","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentLimitResponse"}}}}}}},"post":{"tags":["Agency Banking"],"summary":"Set or override agent transaction limits. Parks an approval; changes nothing until released.","operationId":"requestLimits","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLimitRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/commission/settlements":{"get":{"tags":["Agency Banking"],"summary":"What was settled for a period","operationId":"listSettlements","parameters":[{"name":"periodStart","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"periodEnd","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentSettlementResponse"}}}}}}},"post":{"tags":["Agency Banking"],"summary":"Run the commission settlement. Parks an approval; pays nothing until released.","operationId":"requestSettlement","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettlementRunRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/agents/commission/schedules":{"get":{"tags":["Agency Banking"],"summary":"Every commission schedule","description":"Empty until the institution configures one. Cash-in and cash-out accrue ZERO until then.","operationId":"listSchedules_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentCommissionScheduleResponse"}}}}}}},"post":{"tags":["Agency Banking"],"summary":"Set what agents earn. Parks an approval; nothing accrues differently until released.","operationId":"requestSchedule","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCommissionScheduleRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ParkedChangeResponse"}}}}}}},"/v1/accounts":{"get":{"tags":["Accounts"],"summary":"Browse accounts (paged, filterable, searchable)","description":"`q` matches the account number or the holder's name; partial matches are fine.","operationId":"listAccounts","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING_ACTIVATION","ACTIVE","DORMANT","FROZEN","CLOSED"]}},{"name":"accountType","in":"query","required":false,"schema":{"type":"string","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"customerId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":25}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedResponseAccountResponse"}}}}}},"post":{"tags":["Accounts"],"operationId":"openAccount","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}}}},"/v1/accounts/{sourceId}/transfer":{"post":{"tags":["Accounts"],"operationId":"transfer","parameters":[{"name":"sourceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/accounts/{id}/withdraw":{"post":{"tags":["Accounts"],"operationId":"withdraw","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/accounts/{id}/unfreeze":{"post":{"tags":["Accounts"],"operationId":"unfreezeAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountActionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}}}},"/v1/accounts/{id}/reactivate":{"post":{"tags":["Accounts"],"operationId":"reactivateAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountActionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}}}},"/v1/accounts/{id}/freeze":{"post":{"tags":["Accounts"],"operationId":"freezeAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountActionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/accounts/{id}/deposit":{"post":{"tags":["Accounts"],"operationId":"deposit","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/accounts/{id}/close":{"post":{"tags":["Accounts"],"operationId":"closeAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountActionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/accounts/{id}/activate":{"post":{"tags":["Accounts"],"operationId":"activateAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountActionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}}}},"/v1/accounts/{accountId}/passbooks":{"get":{"tags":["Passbooks"],"summary":"The account's passbook status and history","description":"`active` is the book the customer holds now, null when the account has never been issued one. `history` lists every book, newest issue first, retired ones included.","operationId":"listPassbooks","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountPassbooksResponse"}}}}}},"post":{"tags":["Passbooks"],"summary":"Issue a passbook on the account","operationId":"issuePassbook","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuePassbookRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PassbookResponse"}}}}}}},"/v1/accounts/{accountId}/passbooks/{passbookId}/replace":{"post":{"tags":["Passbooks"],"summary":"Replace a passbook (reprint on loss): retires the old book and issues a successor","description":"Returns the SUCCESSOR. reason=LOST leaves the old book LOST; reason=FULL leaves it CLOSED.","operationId":"replacePassbook","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"passbookId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplacePassbookRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PassbookResponse"}}}}}}},"/v1/accounts/{accountId}/passbooks/{passbookId}/print-confirm":{"post":{"tags":["Passbooks"],"summary":"Confirm a print and advance the passbook cursor","description":"Idempotent on a retry: re-confirming the position the book is already at is a no-op. A position behind the cursor is refused.","operationId":"confirmPrint","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"passbookId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPassbookPrintRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PassbookResponse"}}}}}}},"/v1/accounts/dormancy-check":{"post":{"tags":["Accounts"],"operationId":"runDormancyCheck","parameters":[{"name":"referenceDate","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DormancyCheckResultResponse"}}}}}}},"/v1/customers/{customerId}/profile":{"patch":{"tags":["Customer CIF"],"summary":"Amend the CIF profile (address, employment, declared income)","description":"Omitted fields are left alone; a blank string clears a field. monthlyIncomeCents is a DECLARED figure: nothing computes with it.","operationId":"patchProfile","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchCustomerProfileRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}}}}},"/v1/customers/{customerId}/officers/{officerId}":{"get":{"tags":["Customer Officers"],"operationId":"getOfficer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"officerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerOfficerResponse"}}}}}},"patch":{"tags":["Customer Officers"],"summary":"Amend an officer's details or role","operationId":"updateOfficer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"officerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOfficerDto"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerOfficerResponse"}}}}}}},"/v1/treasury/reserves":{"get":{"tags":["Statutory Reserves"],"operationId":"getReserveHistory","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StatutoryReserveResponse"}}}}}}}},"/v1/treasury/reserves/compliance":{"get":{"tags":["Statutory Reserves"],"operationId":"getComplianceStatus","parameters":[{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReserveComplianceResponse"}}}}}}},"/v1/treasury/investments/{id}":{"get":{"tags":["Investments"],"operationId":"getInvestment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InvestmentResponse"}}}}}}},"/v1/treasury/investments/portfolio":{"get":{"tags":["Investments"],"operationId":"getPortfolioSummary","parameters":[{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InvestmentPortfolioSummaryResponse"}}}}}}},"/v1/treasury/investments/maturing":{"get":{"tags":["Investments"],"operationId":"getMaturing","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":30}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvestmentResponse"}}}}}}}},"/v1/treasury/dashboard":{"get":{"tags":["Treasury"],"operationId":"getDashboard","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TreasuryDashboardResponse"}}}}}}},"/v1/treasury/dashboard/history":{"get":{"tags":["Treasury"],"operationId":"getDashboardHistory","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TreasuryDashboardResponse"}}}}}}}},"/v1/treasury/cash-flow":{"get":{"tags":["Cash Flow Forecasts"],"operationId":"getForecasts","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"horizon","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashFlowForecastResponse"}}}}}}}},"/v1/treasury/cash-flow/accuracy":{"get":{"tags":["Cash Flow Forecasts"],"operationId":"getForecastAccuracy","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ForecastAccuracyResponse"}}}}}}},"/v1/treasury/alm":{"get":{"tags":["ALM"],"operationId":"getPositions","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlmPositionResponse"}}}}}}}},"/v1/treasury/alm/sensitivity":{"get":{"tags":["ALM"],"operationId":"getInterestRateSensitivity","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InterestRateSensitivityResponse"}}}}}}},"/v1/treasury/alm/funding-gap":{"get":{"tags":["ALM"],"operationId":"getFundingGapAnalysis","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/FundingGapAnalysisResponse"}}}}}}},"/v1/transactions/{id}":{"get":{"tags":["Transactions"],"operationId":"getTransaction","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/v1/standing-orders/{id}":{"get":{"tags":["Standing Orders"],"operationId":"getStandingOrder","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StandingOrderResponse"}}}}}}},"/v1/staff/me":{"get":{"tags":["Staff RBAC"],"operationId":"me","parameters":[{"name":"username","in":"query","required":false,"schema":{"type":"string"}},{"name":"role","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StaffMeResponse"}}}}}}},"/v1/security/access-anomalies":{"get":{"tags":["Identity risk"],"summary":"Access anomalies in this engine's own audit trail","description":"REFUSAL_BURST (a run of authorisation refusals by one actor or one address inside a fixed window), OFF_HOURS_ACCESS (activity outside the working day, read in the institution's business time zone) and MULTI_IP_ACTOR (one actor seen from several source addresses). Every threshold is an institution setting with an ASSUMED default; the response carries its own basis and caveats, including what an address here does and does not mean and which trails this engine cannot see.","operationId":"accessAnomalies","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":100}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccessAnomaliesResponse"}}}}}}},"/v1/reports/sofp":{"get":{"tags":["Financial Reports"],"operationId":"getSOFP","parameters":[{"name":"asOf","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"],"default":"USD"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StatementOfFinancialPosition"}}}}}}},"/v1/reports/runs":{"get":{"tags":["Report Scheduler"],"summary":"The run history, newest first, without the report bodies.","operationId":"listRuns","parameters":[{"name":"scheduleId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportRunResponse"}}}}}}}},"/v1/reports/runs/{id}/download":{"get":{"tags":["Report Scheduler"],"summary":"Download a run's report exactly as it was produced.","operationId":"download","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/v1/reports/income-statement":{"get":{"tags":["Financial Reports"],"operationId":"getIncomeStatement","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"],"default":"USD"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/IncomeStatement"}}}}}}},"/v1/reports/cash-flow":{"get":{"tags":["Financial Reports"],"operationId":"getCashFlow","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"],"default":"USD"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CashFlowStatement"}}}}}}},"/v1/reconciliation/suspense":{"get":{"tags":["Reconciliation"],"summary":"Suspense account aging report","operationId":"suspenseAgingReport","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SuspenseAgingReportResponse"}}}}}}},"/v1/reconciliation/suspense/{type}":{"get":{"tags":["Reconciliation"],"summary":"Suspense items by type (ZIMSWITCH, ZETSS, ECOCASH, etc.)","operationId":"suspenseByType","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string","enum":["ZIMSWITCH","ZETSS","ECOCASH","ONEMONEY","INNBUCKS","ATM","GENERAL"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SuspenseItemResponse"}}}}}}}},"/v1/reconciliation/reports/match-rate":{"get":{"tags":["Reconciliation"],"summary":"Match rate KPIs over time","operationId":"matchRateKpis","parameters":[{"name":"fromDate","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"toDate","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/MatchRateKpis"}}}}}}},"/v1/reconciliation/reports/daily-summary":{"get":{"tags":["Reconciliation"],"summary":"Daily reconciliation summary report","operationId":"dailySummary","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DailyReconciliationSummary"}}}}}}},"/v1/reconciliation/batches/{id}":{"get":{"tags":["Reconciliation"],"summary":"Get reconciliation batch detail with match/exception summary","operationId":"getBatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReconBatchResponse"}}}}}}},"/v1/reconciliation/batches/{id}/exceptions":{"get":{"tags":["Reconciliation"],"summary":"List exceptions for a reconciliation batch","operationId":"listBatchExceptions","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReconExceptionResponse"}}}}}}}},"/v1/platform":{"get":{"tags":["Platform Information"],"summary":"Platform overview","description":"Returns full platform capabilities, module list, and statistics.","operationId":"overview","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}},"security":[]}},"/v1/platform/numbering":{"get":{"tags":["Numbering Configuration"],"summary":"List the numbering rule for every identifier family","operationId":"listConfigs","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NumberingConfigResponse"}}}}}}}},"/v1/platform/fx/zwg-rate":{"get":{"tags":["Per-currency money bounds"],"summary":"The USD/ZWG rate in force, its age, and the bounds it derives","operationId":"current","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ZwgRateResponse"}}}}}}},"/v1/platform/fees/quote":{"get":{"tags":["Fee configuration"],"summary":"The fee a payment would be charged today, and the rule behind it","operationId":"quote","parameters":[{"name":"paymentType","in":"query","required":true,"schema":{"type":"string"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"amountCents","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/EffectiveFeeResponse"}}}}}}},"/v1/platform/faq":{"get":{"tags":["Platform Information"],"summary":"Prospect FAQ","description":"Frequently asked questions from prospective clients covering implementation, pricing, migration, and support.","operationId":"faq","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"security":[]}},"/v1/platform/compliance":{"get":{"tags":["Platform Information"],"summary":"Compliance matrix","description":"Maps platform capabilities to regulatory requirements. Covers RBZ, FATF, and international banking standards.","operationId":"compliance","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}},"security":[]}},"/v1/platform/banks":{"get":{"tags":["Platform Information"],"summary":"Integrated banks","description":"List of pre-configured Zimbabwe bank integrations for ZIPIT and RTGS payments.","operationId":"banks","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}},"security":[]}},"/v1/platform/architecture":{"get":{"tags":["Platform Information"],"summary":"Architecture details","description":"Technical architecture, security controls, deployment model, and disaster recovery posture.","operationId":"architecture","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object"}}}}}}},"security":[]}},"/v1/periods":{"get":{"tags":["Periods"],"operationId":"listPeriods","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccountingPeriodResponse"}}}}}}}},"/v1/periods/{id}":{"get":{"tags":["Periods"],"operationId":"getPeriod","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountingPeriodResponse"}}}}}}},"/v1/payments/{id}":{"get":{"tags":["Payments"],"operationId":"getPayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payments/{id}/provider-submission":{"get":{"tags":["Payments"],"summary":"The provider submission raised for a payment, if any.","description":"Answers 404 with PROVIDER_SUBMISSION_NOT_FOUND when the payment was sent on a rail in modelled mode, which raises no submission.","operationId":"submission","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProviderSubmissionResponse"}}}}}}},"/v1/payments/reference/{ref}":{"get":{"tags":["Payments"],"operationId":"getPaymentByReference","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentOrderResponse"}}}}}}},"/v1/payment-batches":{"get":{"tags":["Payment Batches"],"operationId":"listBatches_1","parameters":[{"name":"accountId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["DRAFT","PENDING_APPROVAL","APPROVED","PROCESSING","COMPLETED","PARTIAL","FAILED"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}}},"/v1/payment-batches/{id}":{"get":{"tags":["Payment Batches"],"operationId":"getBatch_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PaymentBatchResponse"}}}}}}},"/v1/onboarding/requirement-templates/{track}":{"get":{"tags":["Onboarding Requirements"],"summary":"The live checklist for one onboarding track","description":"Active items only, ordered by sort_order. This is what an applicant is shown.","operationId":"listForTrack","parameters":[{"name":"track","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RequirementTemplateView"}}}}}}}},"/v1/onboarding/applications/{id}/documents/{documentId}":{"get":{"tags":["Onboarding Applications"],"summary":"One document's metadata","operationId":"getDocument","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"applicantIdentityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/onboarding/applications/{id}/documents/{documentId}/content":{"get":{"tags":["Onboarding Applications"],"summary":"Stream a document's bytes","description":"Ownership-scoped and scan-gated (409 unless CLEAN). Writes a READ audit row. For a staff caller, gated on the kyc feature; for an applicant, scoped to the owner.","operationId":"documentContent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"viewedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string","format":"binary"}}}}}}},"/v1/notifications/suppressions":{"get":{"tags":["Notification administration"],"summary":"The suppression list. Ships empty; an empty list is not an error.","operationId":"listSuppressions","parameters":[{"name":"customerId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SuppressionResponse"}}}}}}}},"/v1/notifications/statement-claims/stranded":{"get":{"tags":["Notification administration"],"summary":"Statement claims still PENDING. Age is reported; no staleness is assumed.","operationId":"listStrandedClaims","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StatementClaimResponse"}}}}}}}},"/v1/loans":{"get":{"tags":["Loans"],"summary":"List loans by status, optionally scoped to a branch","operationId":"listLoans","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["ACTIVE","CLOSED","DEFAULTED","WRITTEN_OFF","RESTRUCTURED","RESCHEDULED"]}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}}},"/v1/loans/{id}":{"get":{"tags":["Loans"],"summary":"Get loan account details","operationId":"getLoan","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}},"/v1/loans/{id}/schedule":{"get":{"tags":["Loans"],"summary":"Get amortization schedule for a loan","operationId":"getSchedule","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanScheduleResponse"}}}}}}}},"/v1/loans/{id}/repayments":{"get":{"tags":["Loans"],"summary":"List repayments for a loan","operationId":"getRepayments","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanRepaymentResponse"}}}}}}}},"/v1/loans/{id}/charges":{"get":{"tags":["Loans"],"summary":"Itemized charges on a loan (upfront fees, interest, penalties)","operationId":"getCharges","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanChargeResponse"}}}}}}}},"/v1/loans/number/{loanNumber}":{"get":{"tags":["Loans"],"summary":"Get loan by human-readable loan number","operationId":"getLoanByNumber","parameters":[{"name":"loanNumber","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}},"/v1/loans/customer/{customerId}":{"get":{"tags":["Loans"],"summary":"List loans for a customer","operationId":"listByCustomer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}}},"/v1/loans/auto-debit/{id}":{"get":{"tags":["Loan Auto-Debit"],"summary":"Get one auto-debit instruction","operationId":"get_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AutoDebitInstructionResponse"}}}}}},"delete":{"tags":["Loan Auto-Debit"],"summary":"Disable an auto-debit instruction (kept for history)","operationId":"disable","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"disabledBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AutoDebitInstructionResponse"}}}}}}},"/v1/loans/arrears/aging":{"get":{"tags":["Loans"],"summary":"Get loan arrears aging report","operationId":"getAgingReport","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loan-provisioning/report":{"get":{"tags":["Loan Provisioning"],"summary":"Get provisioning report for a date","operationId":"getReport","parameters":[{"name":"asOf","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loan-provisioning/loan/{loanAccountId}/history":{"get":{"tags":["Loan Provisioning"],"summary":"Get provisioning history for a specific loan","operationId":"getLoanProvisioningHistory","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanProvisioningResponse"}}}}}}}},"/v1/loan-products/{id}":{"get":{"tags":["Loan Products"],"summary":"Get loan product details","operationId":"getProduct","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanProductResponse"}}}}}}},"/v1/loan-products/all":{"get":{"tags":["Loan Products"],"summary":"List all loan products including inactive","operationId":"listAllProducts","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanProductResponse"}}}}}}}},"/v1/loan-collateral/{id}":{"get":{"tags":["Loan Collateral"],"summary":"Get one security","operationId":"get_2","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CollateralResponse"}}}}}}},"/v1/loan-collateral/loan/{loanAccountId}":{"get":{"tags":["Loan Collateral"],"summary":"The securities held against a loan","operationId":"listByLoan","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CollateralResponse"}}}}}}}},"/v1/loan-collateral/loan/{loanAccountId}/ltv":{"get":{"tags":["Loan Collateral"],"summary":"Loan-to-value over PLEDGED and VERIFIED security (display only)","operationId":"loanToValue","parameters":[{"name":"loanAccountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/loan-collateral/application/{applicationId}":{"get":{"tags":["Loan Collateral"],"summary":"The securities offered on a loan application","operationId":"listByApplication","parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CollateralResponse"}}}}}}}},"/v1/loan-applications/{id}":{"get":{"tags":["Loan Applications"],"summary":"Get loan application details","operationId":"getApplication","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}},"/v1/loan-applications/customer/{customerId}":{"get":{"tags":["Loan Applications"],"summary":"List loan applications for a customer","operationId":"listByCustomer_1","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanApplicationResponse"}}}}}}}},"/v1/lending-groups/{id}":{"get":{"tags":["Group Lending"],"summary":"Get a lending group","operationId":"getGroup","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LendingGroupResponse"}}}}}}},"/v1/lending-groups/{id}/repayment-batches":{"get":{"tags":["Group Lending"],"summary":"The group's bulk collection history","operationId":"listBatches_2","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}}}}}}},"/v1/lending-groups/{id}/loans":{"get":{"tags":["Group Lending"],"summary":"The individual member loans originated by this group","operationId":"memberLoans","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoanAccountResponse"}}}}}}}},"/v1/lending-groups/{id}/exposure":{"get":{"tags":["Group Lending"],"summary":"Group exposure: worst-member classification and summed member arrears","operationId":"exposure","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/lending-groups/facilities/{facilityId}":{"get":{"tags":["Group Lending"],"summary":"Get a group facility","operationId":"getFacility","parameters":[{"name":"facilityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GroupFacilityResponse"}}}}}}},"/v1/kyc/{id}":{"get":{"tags":["KYC"],"operationId":"getKycRecord","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}},"/v1/kyc/expiring":{"get":{"tags":["KYC"],"operationId":"getExpiringKyc","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":30}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}}},"/v1/kyc/customer/{customerId}":{"get":{"tags":["KYC"],"operationId":"getCustomerKycRecords","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KycRecordResponse"}}}}}}}},"/v1/interest/accrual-summary":{"get":{"tags":["Interest"],"operationId":"getAccrualSummary","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InterestAccrualResponse"}}}}}}}},"/v1/gl/trial-balance":{"get":{"tags":["General Ledger"],"operationId":"getTrialBalance","parameters":[{"name":"asOf","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"branchId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"compareTo","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/v1/gl/journal-entries":{"get":{"tags":["General Ledger"],"operationId":"searchJournalEntries","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"glAccountCode","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/JournalEntryResponse"}}}}}}}},"/v1/gl/journal-entries/{transactionId}":{"get":{"tags":["General Ledger"],"operationId":"getJournalEntriesByTransaction","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/JournalEntryResponse"}}}}}}}},"/v1/gl/budgets/report":{"get":{"tags":["General Ledger"],"summary":"Budget versus actual for one month (read-only; posted journals only)","operationId":"budgetReport","parameters":[{"name":"period","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlBudgetReportRow"}}}}}}}},"/v1/gl/accounts/{id}/balance":{"get":{"tags":["General Ledger"],"operationId":"getGlBalance","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GlBalanceResponse"}}}}}}},"/v1/gl/account-statement":{"get":{"tags":["General Ledger"],"operationId":"getGlAccountStatement","parameters":[{"name":"glAccountId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GlAccountStatementResponse"}}}}}}},"/v1/exchange-rates/history":{"get":{"tags":["Exchange Rates"],"operationId":"getHistoricalRates","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"to","in":"query","required":true,"schema":{"type":"string","enum":["USD","ZWG"]}},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}}}},"/v1/customers/{id}":{"get":{"tags":["Customers"],"operationId":"getCustomer","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}}}}},"/v1/customers/{id}/duplicates":{"get":{"tags":["Identity risk"],"summary":"Possible duplicates of one customer","description":"The same group shape as the sweep, filtered to the groups this customer is a member of. An empty list means no marker links this record to another; it does not mean the customer is unknown, which answers 404.","operationId":"customerDuplicates","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerDuplicatesResponse"}}}}}}},"/v1/customers/{customerId}/profitability":{"get":{"tags":["Customer CIF"],"summary":"Income recorded to date for this customer, from posted ledger revenue","description":"Revenue GL postings on transactions that actually posted, where this customer was the only party, per GL account and currency (incomeToDateCents). Revenue on transactions shared with another customer is reported separately rather than split by inference. NO cost model, NO margin, NO projection.","operationId":"getProfitability","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomerProfitabilityResponse"}}}}}}},"/v1/customers/{customerId}/documents/{documentId}":{"get":{"tags":["Customer Documents"],"summary":"One document's metadata","description":"Returns the row whatever its scan status, including scanStatus itself. Only the content endpoint is gated: a row is not its contents.","operationId":"get_3","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}}}}},"/v1/customers/{customerId}/documents/{documentId}/content":{"get":{"tags":["Customer Documents"],"summary":"Stream a document's bytes","description":"Refuses with 409 unless scanStatus is CLEAN. Writes a READ audit row.","operationId":"content","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"documentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"viewedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string","format":"binary"}}}}}}},"/v1/customers/duplicates":{"get":{"tags":["Identity risk"],"summary":"Customer records that may be the same identity","description":"Read-only detection across the whole book. Groups are keyed by the markers that link them (phone, email, surname and date of birth, legal name, trading name, officer national ID, contact phone, shared beneficiary account). STRONG means an identity-bearing marker linked the group, or two or more independent markers linked exactly the same set of records; POSSIBLE means a single shared contact detail. This endpoint never merges, edits or deletes.","operationId":"listDuplicates","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DuplicateGroupsResponse"}}}}}}},"/v1/compliance/submissions":{"get":{"tags":["Regulatory Submissions"],"summary":"The submission register. Every row is SIMULATED and nothing has been transmitted.","operationId":"list_5","parameters":[{"name":"artefactKind","in":"query","required":false,"schema":{"type":"string","enum":["STR","TTR_BATCH","PRUDENTIAL_RETURN","TAX_RETURN","FATCA_REPORT"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PREPARED","RELEASED","SUBMITTED","SUPERSEDED"]}},{"name":"regulator","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/submissions/{id}":{"get":{"tags":["Regulatory Submissions"],"operationId":"get_4","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/submissions/{id}/render":{"get":{"tags":["Regulatory Submissions"],"summary":"The artefact as it was prepared. Watermarked; not a filing.","operationId":"render","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/v1/compliance/returns":{"get":{"tags":["Prudential Returns"],"operationId":"listReturns","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrudentialReturnResponse"}}}}}}}},"/v1/compliance/returns/{id}/export":{"get":{"tags":["Prudential Returns"],"summary":"Export a prudential return (format=csv|json)","operationId":"exportReturn","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/v1/compliance/reports/ttr":{"get":{"tags":["Compliance Reports"],"operationId":"listTtrs","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TtrResponse"}}}}}}}},"/v1/compliance/reports/ttr/{id}/export":{"get":{"tags":["Compliance Reports"],"summary":"Export a TTR (format=csv|json|xml). XML is a goAML-style template awaiting ZB's schema.","operationId":"exportTtr","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/v1/compliance/reports/str/{id}/export":{"get":{"tags":["Compliance Reports"],"summary":"Export an STR (format=csv|json|xml). XML is a goAML-style template awaiting ZB's schema.","operationId":"exportStr","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/v1/compliance/reports/statistics":{"get":{"tags":["Compliance Reports"],"operationId":"getReportingStatistics","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReportingStatistics"}}}}}}},"/v1/compliance/regulatory-returns/runs/{id}":{"get":{"tags":["Regulatory Returns"],"operationId":"run_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/regulatory-returns/definitions":{"get":{"tags":["Regulatory Returns"],"summary":"The registered return forms and their lines. Every line is ASSUMED until a regulator supplies a specification.","operationId":"definitions","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/regulatory-returns/definitions/{code}/runs":{"get":{"tags":["Regulatory Returns"],"operationId":"runs","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/regulators":{"get":{"tags":["Regulators"],"summary":"The configured regulators, their channels and their filer profiles.","operationId":"list_6","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/monitoring/runs":{"get":{"tags":["Transaction Monitoring"],"summary":"Every monitoring run, including the ones that found nothing and the ones that failed, so ran-and-found-nothing is distinguishable from never-ran.","operationId":"runs_1","parameters":[{"name":"outcome","in":"query","required":false,"schema":{"type":"string","enum":["NO_FINDING","ALERTED","TTR_RAISED","BOTH","FAILED"]}},{"name":"subjectKind","in":"query","required":false,"schema":{"type":"string","enum":["TRANSACTION","PAYMENT_ORDER","DAY_END"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/monitoring/rules":{"get":{"tags":["Transaction Monitoring"],"summary":"Every monitoring rule with its parameters, and whether each figure was ruled by this institution or merely shipped.","operationId":"rules","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/fatca/screenings":{"get":{"tags":["FATCA"],"operationId":"screenings","parameters":[{"name":"classification","in":"query","required":false,"schema":{"type":"string","enum":["NO_INDICIA","INDICIA_FOUND_REVIEW"]}},{"name":"customerId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/fatca/screenings/{id}":{"get":{"tags":["FATCA"],"operationId":"screening","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/fatca/rules":{"get":{"tags":["FATCA"],"summary":"The indicia rules, INCLUDING the indicia this engine has no field for. No de minimis threshold is encoded anywhere.","operationId":"rules_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/compliance/ai-advisory/evaluations":{"get":{"tags":["AI Advisory"],"summary":"Every advisory evaluation, including the quiet ones and the outages, so ran-and-found-nothing is distinguishable from never-ran.","operationId":"evaluations","parameters":[{"name":"outcome","in":"query","required":false,"schema":{"type":"string","enum":["NO_FLAG","FLAGGED","ENGINE_UNAVAILABLE"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/collections/queue":{"get":{"tags":["Collections"],"summary":"The collections queue: loans in arrears, filterable by classification","operationId":"queue","parameters":[{"name":"classification","in":"query","required":false,"schema":{"type":"string","enum":["CURRENT","WATCH","SUBSTANDARD","DOUBTFUL","LOSS"]}},{"name":"minArrearsDays","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/v1/branches/code/{code}":{"get":{"tags":["Branches"],"operationId":"getBranchByCode","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}}}}},"/v1/bills/payments/{id}":{"get":{"tags":["Bill payments"],"operationId":"getBillPayment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BillPaymentResponse"}}}}}}},"/v1/bills/billers/all":{"get":{"tags":["Bill payments"],"summary":"Every biller including disabled ones. Staff only; the checker's before-state.","operationId":"listAllBillers","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BillerResponse"}}}}}}}},"/v1/beneficiaries/{id}":{"get":{"tags":["Beneficiaries"],"operationId":"getBeneficiary","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficiaryResponse"}}}}}},"delete":{"tags":["Beneficiaries"],"operationId":"deactivateBeneficiary","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"deactivatedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficiaryResponse"}}}}}}},"/v1/beneficial-owners/{id}":{"get":{"tags":["Beneficial Owners"],"operationId":"getBeneficialOwner","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficialOwnerResponse"}}}}}},"delete":{"tags":["Beneficial Owners"],"operationId":"removeBeneficialOwner","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"removedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/BeneficialOwnerResponse"}}}}}}},"/v1/beneficial-owners/customer/{customerId}":{"get":{"tags":["Beneficial Owners"],"operationId":"getBeneficialOwners","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BeneficialOwnerResponse"}}}}}}}},"/v1/beneficial-owners/customer/{customerId}/validation":{"get":{"tags":["Beneficial Owners"],"operationId":"validateOwnershipCoverage","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OwnershipValidationResponse"}}}}}}},"/v1/audit":{"get":{"tags":["Audit"],"summary":"Search the audit trail (paged, read-only)","operationId":"searchAuditLogs","parameters":[{"name":"entityType","in":"query","required":false,"schema":{"type":"string"}},{"name":"entityId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"performedBy","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","enum":["CREATE","UPDATE","DELETE","STATE_CHANGE","READ","DENIED"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":25}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedResponseAuditLogResponse"}}}}}}},"/v1/approvals/{id}":{"get":{"tags":["Maker-Checker Approvals"],"operationId":"getApproval","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApprovalRequestResponse"}}}}}}},"/v1/alerts":{"get":{"tags":["Alerts"],"operationId":"listAlerts","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string"}},{"name":"customerId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"assignedTo","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}}},"/v1/alerts/{id}":{"get":{"tags":["Alerts"],"operationId":"getAlert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TransactionAlertResponse"}}}}}}},"/v1/alerts/statistics":{"get":{"tags":["Alerts"],"operationId":"getAlertStatistics","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AlertStatistics"}}}}}}},"/v1/agents/{id}/volume":{"get":{"tags":["Agency Banking"],"summary":"What one agent moved over a window","description":"POSTED journals only: a reversed cash-in does not inflate reported volume.","operationId":"volume","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AgentVolume"}}}}}}},"/v1/agents/{id}/history":{"get":{"tags":["Agency Banking"],"summary":"Every move along the lifecycle ladder, newest first","operationId":"history","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusHistoryResponse"}}}}}}}},"/v1/agents/{id}/commission":{"get":{"tags":["Agency Banking"],"summary":"One agent's commission accruals and clawbacks","description":"Empty until a commission schedule is configured. Nothing is seeded.","operationId":"commission","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentCommissionAccrualResponse"}}}}}}}},"/v1/agents/low-balance":{"get":{"tags":["Agency Banking"],"summary":"Agents at or below their float threshold","description":"The threshold defaults to the float product's own minimum balance; no second figure is invented.","operationId":"lowBalance","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentFloatPosition"}}}}}}}},"/v1/agents/float-positions":{"get":{"tags":["Agency Banking"],"summary":"What is actually in every agent's float, read from the ledger","operationId":"floatPositions","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentFloatPosition"}}}}}}}},"/v1/agents/commission/settlements/preview":{"get":{"tags":["Agency Banking"],"summary":"What a settlement run would pay, computed by the code that would pay it","operationId":"previewSettlement","parameters":[{"name":"periodStart","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"periodEnd","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","enum":["USD","ZWG"],"default":"USD"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentSettlementLine"}}}}}}}},"/v1/accounts/{id}":{"get":{"tags":["Accounts"],"operationId":"getAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}}}},"/v1/accounts/{id}/transactions":{"get":{"tags":["Accounts"],"summary":"Account statement: this account's own transactions, account-side amounts","description":"No parameters returns the full history, newest first (unchanged). `from`/`to` are VALUE DATES, both ends inclusive. `limit` counts back from the newest, for a mini statement; a filtered read is capped at 500 rows.","operationId":"getAccountTransactions","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}}},"/v1/accounts/{id}/interest-accruals":{"get":{"tags":["Accounts"],"operationId":"getAccountInterestAccruals","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InterestAccrualResponse"}}}}}}}},"/v1/accounts/{accountId}/passbooks/{passbookId}/lines":{"get":{"tags":["Passbooks"],"summary":"Unprinted passbook lines: the account's postings after the print cursor","description":"Read-only; the cursor moves on print-confirm. Send cursorTransactionId back on the confirm.","operationId":"getUnprintedLines","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"passbookId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PassbookLinesResponse"}}}}}}},"/v1/accounts/reconciliation":{"get":{"tags":["Accounts"],"summary":"Reconcile every account balance: stored vs journal vs independent derivation","operationId":"reconcile","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountReconciliationResponse"}}}}}}},"/v1/accounts/number/{accountNumber}":{"get":{"tags":["Accounts"],"operationId":"getAccountByNumber","parameters":[{"name":"accountNumber","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}}}},"/v1/accounts/customer/{customerId}":{"get":{"tags":["Accounts"],"operationId":"getAccountsByCustomer","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccountResponse"}}}}}}}},"/v1/screening/watchlist/{id}":{"delete":{"tags":["Screening"],"operationId":"removeFromWatchlist","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"removedBy","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/WatchlistEntryResponse"}}}}}}},"/v1/notifications/suppressions/{id}":{"delete":{"tags":["Notification administration"],"summary":"Remove a suppression. Messaging to that customer resumes on that transport.","operationId":"removeSuppression","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SuppressionRemovedResponse"}}}}}}},"/v1/api-keys/{id}":{"delete":{"tags":["API Keys"],"operationId":"revokeApiKey","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"components":{"schemas":{"StandingOrderResponse":{"required":["amountCents","amountDecimal","createdAt","createdBy","currency","executionCount","frequency","id","nextExecutionDate","sourceAccountId","sourceAccountNumber","status","targetAccountId","targetAccountNumber"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"sourceAccountId":{"type":"string","format":"uuid"},"sourceAccountNumber":{"type":"string"},"targetAccountId":{"type":"string","format":"uuid"},"targetAccountNumber":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"currency":{"type":"string","enum":["USD","ZWG"]},"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","QUARTERLY"]},"nextExecutionDate":{"type":"string","format":"date"},"lastExecutedAt":{"type":"string","format":"date-time"},"description":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED","CANCELLED","COMPLETED"]},"maxExecutions":{"type":"integer","format":"int32"},"executionCount":{"type":"integer","format":"int32"},"endDate":{"type":"string","format":"date"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"UpdateStaffRoleRequest":{"required":["approveCategories","features","readOnly","readOnlyFeatures"],"type":"object","properties":{"label":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"approveCategories":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"readOnlyFeatures":{"type":"array","items":{"type":"string"}}}},"StaffRoleView":{"required":["approveCategories","createdAt","features","isBuiltin","label","readOnly","readOnlyFeatures","roleKey","updatedAt"],"type":"object","properties":{"roleKey":{"type":"string"},"label":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"approveCategories":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"readOnlyFeatures":{"type":"array","items":{"type":"string"}},"isBuiltin":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"UpdateStaffIdentityRequest":{"type":"object","properties":{"roleKey":{"type":"string"},"displayName":{"type":"string"},"isActive":{"type":"boolean"}}},"UpdateStaffBranchRequest":{"type":"object","properties":{"branchId":{"type":"string","format":"uuid"}}},"StaffBranchAssignmentResponse":{"required":["actorId","assigned","headOffice"],"type":"object","properties":{"actorId":{"type":"string","format":"uuid"},"branchId":{"type":"string","format":"uuid"},"assigned":{"type":"boolean"},"headOffice":{"type":"boolean"},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"ReportParams":{"type":"object","properties":{"returnType":{"type":"string"},"periodEnd":{"type":"string","format":"date"},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"asOf":{"type":"string","format":"date"}}},"UpdateReportScheduleRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","QUARTERLY"]},"nextRunDate":{"type":"string","format":"date"},"isActive":{"type":"boolean"},"params":{"$ref":"#/components/schemas/ReportParams"}}},"ReportScheduleResponse":{"required":["anchorDay","createdAt","frequency","id","isActive","nextRunDate","params","reportType","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"reportType":{"type":"string","enum":["PRUDENTIAL_RETURN","ARREARS_AGING","PROVISIONING"]},"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","QUARTERLY"]},"params":{"type":"object","additionalProperties":{"type":"object"}},"nextRunDate":{"type":"string","format":"date"},"anchorDay":{"type":"integer","format":"int32"},"isActive":{"type":"boolean"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"},"updatedAt":{"type":"string","format":"date-time"}}},"ResolveExceptionRequest":{"required":["resolutionNotes","resolutionType","resolvedBy"],"type":"object","properties":{"resolutionType":{"type":"string","enum":["MANUAL_MATCH","JOURNAL_ADJUSTMENT","REVERSAL","WRITE_OFF","FALSE_POSITIVE"]},"resolutionNotes":{"type":"string","example":"Matched manually after confirming with ZIMSWITCH"},"resolvedBy":{"type":"string","format":"uuid"}},"description":"Resolve a reconciliation exception"},"ReconExceptionResponse":{"required":["ageDays","amountCents","amountDecimal","batchReference","createdAt","escalationLevel","exceptionType","id","severity","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"batchReference":{"type":"string"},"exceptionType":{"type":"string","enum":["SOURCE_ONLY","TARGET_ONLY","AMOUNT_MISMATCH","DUPLICATE","TIMING_DIFFERENCE"]},"severity":{"type":"string","enum":["LOW","MEDIUM","HIGH","CRITICAL"]},"status":{"type":"string","enum":["OPEN","INVESTIGATING","RESOLVED","WRITTEN_OFF","ESCALATED"]},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"ageDays":{"type":"integer","format":"int32"},"escalationLevel":{"type":"integer","format":"int32"},"resolutionType":{"type":"string","enum":["MANUAL_MATCH","JOURNAL_ADJUSTMENT","REVERSAL","WRITE_OFF","FALSE_POSITIVE"]},"resolutionNotes":{"type":"string"},"resolvedBy":{"type":"string","format":"uuid"},"resolvedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"UpdateNumberingConfigRequest":{"required":["paddingWidth","prefix","segmentMode","strategy","updatedBy"],"type":"object","properties":{"strategy":{"type":"string","example":"SEQUENCE","enum":["RANDOM","SEQUENCE"]},"prefix":{"type":"string","example":"ZB"},"paddingWidth":{"maximum":18,"minimum":1,"type":"integer","format":"int32","example":7},"segmentMode":{"type":"string","example":"NONE","enum":["NONE","BRANCH","PRODUCT"]},"updatedBy":{"type":"string","format":"uuid","example":"0f9ed4cc-1bef-5fe9-8fda-284e0db731c8"}}},"NumberingConfigResponse":{"required":["entityType","paddingWidth","prefix","segmentMode","strategy","updatedAt"],"type":"object","properties":{"entityType":{"type":"string"},"strategy":{"type":"string","enum":["RANDOM","SEQUENCE"]},"prefix":{"type":"string"},"paddingWidth":{"type":"integer","format":"int32"},"segmentMode":{"type":"string","enum":["NONE","BRANCH","PRODUCT"]},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"UpdatePlatformConfigRequest":{"required":["businessTimeZone"],"type":"object","properties":{"businessTimeZone":{"type":"string","description":"IANA zone identifier, e.g. UTC or Africa/Harare.","example":"Africa/Harare"}}},"PlatformConfigResponse":{"required":["businessDate","businessTimeZone","updatedAt"],"type":"object","properties":{"businessTimeZone":{"type":"string","description":"IANA zone the institution evaluates a business date in.","example":"UTC"},"businessDate":{"type":"string","description":"The date this engine currently calls today, in that zone.","format":"date"},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"UpdateBranchScopingRequest":{"required":["branchScopingEnabled"],"type":"object","properties":{"branchScopingEnabled":{"type":"boolean"},"notes":{"type":"string"}}},"ParkedChangeResponse":{"required":["applied","approvalId","message","requestType","status"],"type":"object","properties":{"approvalId":{"type":"string","format":"uuid"},"requestType":{"type":"string"},"status":{"type":"string"},"applied":{"type":"boolean"},"message":{"type":"string"},"current":{"type":"object"}}},"UpdateRequirementTemplateRequest":{"required":["label","performedBy","required","sortOrder"],"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"docType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]},"required":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"performedBy":{"type":"string","format":"uuid"}}},"RequirementTemplateView":{"required":["createdAt","id","isActive","itemKey","label","required","sortOrder","track","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"track":{"type":"string","enum":["CORPORATE","INDIVIDUAL","DIASPORA"]},"itemKey":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"docType":{"type":"string","description":"Document type that satisfies this item; null means it is an acknowledgement, not an upload","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]},"required":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"description":"One line of an onboarding requirement checklist"},"OnboardingCompanyDetailsDto":{"type":"object","properties":{"legalName":{"type":"string"},"registrationNumber":{"type":"string"},"tradingName":{"type":"string"},"incorporationDate":{"type":"string","format":"date"},"companyPhone":{"type":"string"},"companyEmail":{"type":"string"},"contactPersonName":{"type":"string"},"contactPersonNationalId":{"type":"string"},"contactPersonPhone":{"type":"string"},"contactPersonEmail":{"type":"string"},"contactPersonDateOfBirth":{"type":"string","description":"The representative's date of birth. Required to mint their individual CIF at approval.","format":"date"}},"description":"Company and representative details for an onboarding application"},"UpdateOnboardingApplicationRequest":{"required":["details"],"type":"object","properties":{"applicantIdentityId":{"type":"string","description":"The BFF applicant identity that owns the application (may also be a query param)","format":"uuid"},"details":{"$ref":"#/components/schemas/OnboardingCompanyDetailsDto"}}},"OnboardingApplicationView":{"required":["applicantIdentityId","createdAt","id","status","track","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"track":{"type":"string","enum":["CORPORATE","INDIVIDUAL","DIASPORA"]},"status":{"type":"string","enum":["DRAFT","SUBMITTED","IN_REVIEW","REQUIREMENTS_PENDING","APPROVED","REJECTED"]},"applicantIdentityId":{"type":"string","format":"uuid"},"legalName":{"type":"string"},"registrationNumber":{"type":"string"},"tradingName":{"type":"string"},"incorporationDate":{"type":"string","format":"date"},"companyPhone":{"type":"string"},"companyEmail":{"type":"string"},"contactPersonName":{"type":"string"},"contactPersonNationalId":{"type":"string"},"contactPersonPhone":{"type":"string"},"contactPersonEmail":{"type":"string"},"contactPersonDateOfBirth":{"type":"string","format":"date"},"submittedAt":{"type":"string","format":"date-time"},"decidedBy":{"type":"string","format":"uuid"},"decidedAt":{"type":"string","format":"date-time"},"promotedOrgId":{"type":"string","format":"uuid"},"promotedAdminCustomerId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"description":"An onboarding application (summary)"},"UpdateLendingPolicyRequest":{"type":"object","properties":{"accrueInterestOnDefaulted":{"type":"boolean"},"penaltyBackfillMissedDays":{"type":"boolean"},"notes":{"type":"string"}}},"UpdateProvisioningConfigRequest":{"type":"object","properties":{"currentMaxDays":{"type":"integer","format":"int32"},"watchMaxDays":{"type":"integer","format":"int32"},"substandardMaxDays":{"type":"integer","format":"int32"},"doubtfulMaxDays":{"type":"integer","format":"int32"},"currentRateBps":{"type":"integer","format":"int32"},"watchRateBps":{"type":"integer","format":"int32"},"substandardRateBps":{"type":"integer","format":"int32"},"doubtfulRateBps":{"type":"integer","format":"int32"},"lossRateBps":{"type":"integer","format":"int32"},"stage1MaxDays":{"type":"integer","format":"int32"},"stage2MaxDays":{"type":"integer","format":"int32"},"defaultStatusAfterDays":{"type":"integer","format":"int32"},"notes":{"type":"string"}}},"UpsertGlBudgetRequest":{"required":["amountCents","currency","glCode","period"],"type":"object","properties":{"glCode":{"maxLength":32,"minLength":0,"type":"string","example":"5401"},"period":{"pattern":"^\\d{4}-(0[1-9]|1[0-2])$","type":"string","example":"2026-08"},"amountCents":{"type":"integer","description":"In the account's own direction: debit-positive for ASSET/EXPENSE, credit-positive for LIABILITY/EQUITY/REVENUE","format":"int64","example":250000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]}}},"GlBudgetResponse":{"required":["amountCents","currency","glCode","glName","period","updatedAt"],"type":"object","properties":{"glCode":{"type":"string"},"glName":{"type":"string"},"period":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"updatedBy":{"type":"string","format":"uuid"},"updatedAt":{"type":"string","format":"date-time"}}},"UpdateGlAccountRequest":{"required":["clearParent","performedBy"],"type":"object","properties":{"name":{"type":"string","example":"Suspense - Development (renamed)"},"code":{"type":"string","example":"2900-DEV2"},"type":{"type":"string","example":"LIABILITY","enum":["ASSET","LIABILITY","EQUITY","REVENUE","EXPENSE"]},"parentCode":{"type":"string","example":"2000"},"parentId":{"type":"string","format":"uuid"},"clearParent":{"type":"boolean","description":"Detach from any parent. Wins over parentCode/parentId"},"isActive":{"type":"boolean","example":true},"allowDirectPosting":{"type":"boolean","description":"Accept direct postings even once this account has children"},"performedBy":{"type":"string","description":"Actor recorded on the audit entry","format":"uuid"}}},"GlAccountResponse":{"required":["allowDirectPosting","balanceCents","balanceDecimal","code","currency","id","isActive","name","type"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["ASSET","LIABILITY","EQUITY","REVENUE","EXPENSE"]},"currency":{"type":"string","enum":["USD","ZWG"]},"parentCode":{"type":"string"},"isActive":{"type":"boolean"},"allowDirectPosting":{"type":"boolean"},"balanceCents":{"type":"integer","format":"int64"},"balanceDecimal":{"type":"number"}}},"UpdateExpenseCategoryRequest":{"type":"object","properties":{"name":{"maxLength":120,"minLength":0,"type":"string"},"debitGlCode":{"maxLength":32,"minLength":0,"type":"string"},"active":{"type":"boolean"}}},"ExpenseCategoryResponse":{"required":["active","debitGlCode","debitGlName","id","name"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"debitGlCode":{"type":"string"},"active":{"type":"boolean"},"debitGlName":{"type":"string"}}},"UpdateSigningMandateRequest":{"required":["updatedBy"],"type":"object","properties":{"signingMandate":{"type":"string","example":"ANY_TWO","enum":["ANY_ONE","ANY_TWO","ALL"]},"updatedBy":{"type":"string","description":"Operator performing the change; stamped on the audit entry","format":"uuid"}}},"CorporateProfile":{"type":"object","properties":{"legalName":{"type":"string"},"registrationNumber":{"type":"string"},"incorporationDate":{"type":"string","format":"date"},"tradingName":{"type":"string"},"contactPersonName":{"type":"string"},"contactPersonPhone":{"type":"string"},"contactPersonEmail":{"type":"string"},"signingMandate":{"type":"string","enum":["ANY_ONE","ANY_TWO","ALL"]}}},"CustomerProfile":{"required":["nationality"],"type":"object","properties":{"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"city":{"type":"string"},"province":{"type":"string"},"postalCode":{"type":"string"},"addressCountry":{"type":"string","description":"ISO 3166-1 alpha-3","example":"ZWE"},"residentialAddress":{"type":"string","description":"The address as originally captured (V1 free text). Not derived from the lines above."},"postalAddress":{"type":"string"},"nationality":{"type":"string"},"occupation":{"type":"string"},"employer":{"type":"string"},"employmentStatus":{"type":"string","enum":["EMPLOYED","SELF_EMPLOYED","UNEMPLOYED","RETIRED","STUDENT","OTHER"]},"employerAddress":{"type":"string"},"employmentStartDate":{"type":"string","format":"date"},"monthlyIncomeCents":{"type":"integer","description":"DECLARED monthly income in cents. Nothing computes with it: no fee, no limit, no score reads it.","format":"int64"},"incomeCurrency":{"type":"string","enum":["USD","ZWG"]},"incomeSource":{"type":"string"},"annualIncomeBand":{"type":"string","description":"The banded answer captured since V1, kept beside the stated figure"},"sourceOfFunds":{"type":"string"}}},"CustomerResponse":{"required":["createdAt","customerType","displayName","id","isPep","kycStatus","phone","profile","riskRating","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerType":{"type":"string","enum":["INDIVIDUAL","CORPORATE"]},"displayName":{"type":"string"},"nationalId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"phone":{"type":"string"},"email":{"type":"string"},"kycStatus":{"type":"string","enum":["PENDING","VERIFIED","REJECTED","EXPIRED"]},"riskRating":{"type":"string","enum":["LOW","MEDIUM","HIGH","PROHIBITED"]},"isPep":{"type":"boolean"},"corporate":{"$ref":"#/components/schemas/CorporateProfile"},"profile":{"$ref":"#/components/schemas/CustomerProfile"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"RegulatorProfileChangeDto":{"required":["identifiers"],"type":"object","properties":{"identifiers":{"type":"object","additionalProperties":{"type":"string"}},"requestedBy":{"type":"string","format":"uuid"},"notes":{"type":"string"}}},"RegulatorChannelChangeDto":{"required":["artefactKind","format","transportKind"],"type":"object","properties":{"artefactKind":{"type":"string","enum":["STR","TTR_BATCH","PRUDENTIAL_RETURN","TAX_RETURN","FATCA_REPORT"]},"transportKind":{"type":"string"},"endpoint":{"type":"string"},"credentialRef":{"type":"string"},"format":{"type":"string"},"notes":{"type":"string"},"requestedBy":{"type":"string","format":"uuid"},"makerNotes":{"type":"string"}}},"UpdatePrudentialConfigRequest":{"type":"object","properties":{"institutionClass":{"type":"string"},"carMinimumBps":{"type":"integer","format":"int32"},"tier1MinimumBps":{"type":"integer","format":"int32"},"leverageMinimumBps":{"type":"integer","format":"int32"},"liquidityMinimumBps":{"type":"integer","format":"int32"},"largeExposureThresholdBps":{"type":"integer","format":"int32"},"singleBorrowerLimitBps":{"type":"integer","format":"int32"},"corporateGroupLimitBps":{"type":"integer","format":"int32"},"aggregateLargeExposureBps":{"type":"integer","format":"int32"},"insiderSingleLimitBps":{"type":"integer","format":"int32"},"insiderAggregateLimitBps":{"type":"integer","format":"int32"},"fxOverallLimitBps":{"type":"integer","format":"int32"},"fxSingleCurrencyLimitBps":{"type":"integer","format":"int32"},"notes":{"type":"string"}}},"ParkedConfigChangeResponse":{"required":["applied","approvalId","message","requestType","status"],"type":"object","properties":{"approvalId":{"type":"string","format":"uuid"},"requestType":{"type":"string"},"status":{"type":"string"},"applied":{"type":"boolean"},"message":{"type":"string"},"current":{"$ref":"#/components/schemas/PrudentialConfigResponse"}}},"PrudentialConfigResponse":{"required":["aggregateLargeExposureBps","carMinimumBps","corporateGroupLimitBps","fxOverallLimitBps","fxSingleCurrencyLimitBps","insiderAggregateLimitBps","insiderSingleLimitBps","institutionClass","largeExposureThresholdBps","leverageMinimumBps","liquidityMinimumBps","riskWeights","singleBorrowerLimitBps","tier1MinimumBps","updatedAt"],"type":"object","properties":{"institutionClass":{"type":"string"},"carMinimumBps":{"type":"integer","format":"int32"},"tier1MinimumBps":{"type":"integer","format":"int32"},"leverageMinimumBps":{"type":"integer","format":"int32"},"liquidityMinimumBps":{"type":"integer","format":"int32"},"largeExposureThresholdBps":{"type":"integer","format":"int32"},"singleBorrowerLimitBps":{"type":"integer","format":"int32"},"corporateGroupLimitBps":{"type":"integer","format":"int32"},"aggregateLargeExposureBps":{"type":"integer","format":"int32"},"insiderSingleLimitBps":{"type":"integer","format":"int32"},"insiderAggregateLimitBps":{"type":"integer","format":"int32"},"fxOverallLimitBps":{"type":"integer","format":"int32"},"fxSingleCurrencyLimitBps":{"type":"integer","format":"int32"},"riskWeights":{"type":"array","items":{"$ref":"#/components/schemas/PrudentialRiskWeightResponse"}},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"PrudentialRiskWeightResponse":{"required":["glCodePrefix","isActive","label","weightBps"],"type":"object","properties":{"glCodePrefix":{"type":"string"},"label":{"type":"string"},"weightBps":{"type":"integer","format":"int32"},"isActive":{"type":"boolean"}}},"MonitoringRuleChangeDto":{"required":["acknowledgeDrops","parameters"],"type":"object","properties":{"parameters":{"type":"object","additionalProperties":{"type":"object"}},"isActive":{"type":"boolean"},"severity":{"type":"string","enum":["LOW","MEDIUM","HIGH","CRITICAL"]},"notes":{"type":"string"},"requestedBy":{"type":"string","format":"uuid"},"acknowledgeDrops":{"type":"array","items":{"type":"string"}}}},"FatcaProfileChangeDto":{"type":"object","properties":{"reportingRoute":{"type":"string"},"giin":{"type":"string"},"sponsoringEntity":{"type":"string"},"notes":{"type":"string"}}},"UpdateComplianceEntityProfileRequest":{"type":"object","properties":{"rentityId":{"type":"string"},"rentityBranch":{"type":"string"},"submissionCode":{"type":"string"},"reportCodeStr":{"type":"string"},"reportCodeTtr":{"type":"string"},"defaultStrIndicator":{"type":"string"},"defaultTtrIndicator":{"type":"string"},"currencyCodeLocal":{"type":"string"},"institutionName":{"type":"string"},"institutionCode":{"type":"string"},"swiftCode":{"type":"string"},"entityCountryCode":{"type":"string"},"defaultTransmodeCode":{"type":"string"},"defaultFromFundsCode":{"type":"string"},"defaultToFundsCode":{"type":"string"},"defaultPartyRole":{"type":"string"},"reportingPersonFirstName":{"type":"string"},"reportingPersonLastName":{"type":"string"},"reportingPersonEmail":{"type":"string"},"reportingPersonPhone":{"type":"string"},"reportingPersonOccupation":{"type":"string"}}},"ComplianceEntityProfileResponse":{"required":["configured","currencyCodeLocal","defaultFromFundsCode","defaultPartyRole","defaultStrIndicator","defaultToFundsCode","defaultTransmodeCode","defaultTtrIndicator","entityCountryCode","rentityId","reportCodeStr","reportCodeTtr","submissionCode","updatedAt"],"type":"object","properties":{"rentityId":{"type":"string"},"rentityBranch":{"type":"string"},"submissionCode":{"type":"string"},"reportCodeStr":{"type":"string"},"reportCodeTtr":{"type":"string"},"defaultStrIndicator":{"type":"string"},"defaultTtrIndicator":{"type":"string"},"currencyCodeLocal":{"type":"string"},"institutionName":{"type":"string"},"institutionCode":{"type":"string"},"swiftCode":{"type":"string"},"entityCountryCode":{"type":"string"},"defaultTransmodeCode":{"type":"string"},"defaultFromFundsCode":{"type":"string"},"defaultToFundsCode":{"type":"string"},"defaultPartyRole":{"type":"string"},"reportingPersonFirstName":{"type":"string"},"reportingPersonLastName":{"type":"string"},"reportingPersonEmail":{"type":"string"},"reportingPersonPhone":{"type":"string"},"reportingPersonOccupation":{"type":"string"},"configured":{"type":"boolean"},"unsetLabel":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"UpdateBranchRequest":{"required":["name","updatedBy"],"type":"object","properties":{"name":{"type":"string"},"region":{"type":"string"},"address":{"type":"string"},"isActive":{"type":"boolean"},"updatedBy":{"type":"string","format":"uuid"}}},"BranchResponse":{"required":["code","createdAt","id","isActive","name","openedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"address":{"type":"string"},"isActive":{"type":"boolean"},"openedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"BillerChangeCommand":{"required":["category","code","enabled","name","referenceLabel"],"type":"object","properties":{"billerId":{"type":"string","format":"uuid"},"code":{"type":"string","example":"ZESA-PREPAID"},"name":{"type":"string","example":"ZESA Prepaid Electricity"},"category":{"type":"string","example":"Utilities"},"kind":{"type":"string","description":"BILL or AIRTIME. Omit to default to BILL when registering, or to leave the kind unchanged when amending. AIRTIME changes two things: the customer reference must be a mobile number, which is normalised to international E.164 form at payment and STORED in that form, and the order dispatches on the airtime provider rail. If you also set referenceRegex on an AIRTIME biller, write the pattern against the E.164 form (^\\+263(77|78)[0-9]{7}$) and never against the national one (^0[0-9]{9}$), because the pattern is applied AFTER normalisation and a national-form pattern would refuse every payment to this biller.","example":"BILL","enum":["BILL","AIRTIME"]},"referenceLabel":{"type":"string","example":"Meter number"},"referenceRegex":{"type":"string","description":"The shape a valid customer reference takes, or omit it if the biller has not declared one (omitted is NOT the same as a pattern matching everything). For a BILL biller this matches the reference as typed, e.g. a meter number ^[0-9]{11}$. FOR AN AIRTIME BILLER IT IS MATCHED AFTER THE NUMBER HAS BEEN NORMALISED TO E.164, so write it against that form, e.g. ^\\+263(77|78)[0-9]{7}$. A national-form pattern such as ^0[0-9]{9}$ on an AIRTIME biller refuses every payment made to it.","example":"^[0-9]{11}$"},"enabled":{"type":"boolean"},"makerNotes":{"type":"string"}}},"UpdateAgentRequest":{"required":["clearLowBalanceThreshold"],"type":"object","properties":{"tradingName":{"maxLength":200,"minLength":0,"type":"string"},"contactPhone":{"maxLength":30,"minLength":0,"type":"string"},"contactEmail":{"maxLength":255,"minLength":0,"type":"string"},"branchId":{"type":"string","format":"uuid"},"lowBalanceThresholdCents":{"type":"integer","format":"int64"},"clearLowBalanceThreshold":{"type":"boolean","description":"Go back to the default: the float product's own minimum balance"},"notes":{"maxLength":1000,"minLength":0,"type":"string"}}},"AgentResponse":{"required":["agentCode","contactPhone","createdAt","currency","customerId","id","status","tradingName"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agentCode":{"type":"string"},"tradingName":{"type":"string"},"status":{"type":"string","enum":["APPLIED","APPROVED","ACTIVE","SUSPENDED","TERMINATED"]},"currency":{"type":"string","enum":["USD","ZWG"]},"customerId":{"type":"string","format":"uuid"},"floatAccountId":{"type":"string","format":"uuid"},"floatAccountNumber":{"type":"string"},"floatGlCode":{"type":"string","description":"The agent float liability account the float posts to (2107 for USD)"},"branchId":{"type":"string","format":"uuid"},"contactPhone":{"type":"string"},"contactEmail":{"type":"string"},"lowBalanceThresholdCents":{"type":"integer","description":"Null means the float product's own minimum balance is used","format":"int64"},"notes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"terminatedAt":{"type":"string","format":"date-time"}}},"StatutoryReserveResponse":{"required":["actualReserveCents","calculatedAt","calculationDate","currency","demandReserveRateBps","fixedReserveRateBps","id","isCompliant","requiredReserveCents","savingsReserveRateBps","surplusDeficitCents","totalDemandDepositsCents","totalDepositBaseCents","totalFixedDepositsCents","totalSavingsDepositsCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"calculationDate":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"totalDemandDepositsCents":{"type":"integer","format":"int64"},"totalSavingsDepositsCents":{"type":"integer","format":"int64"},"totalFixedDepositsCents":{"type":"integer","format":"int64"},"totalDepositBaseCents":{"type":"integer","format":"int64"},"demandReserveRateBps":{"type":"integer","format":"int32"},"savingsReserveRateBps":{"type":"integer","format":"int32"},"fixedReserveRateBps":{"type":"integer","format":"int32"},"requiredReserveCents":{"type":"integer","format":"int64"},"actualReserveCents":{"type":"integer","format":"int64"},"surplusDeficitCents":{"type":"integer","format":"int64"},"isCompliant":{"type":"boolean"},"calculatedAt":{"type":"string","format":"date-time"}}},"PurchaseInvestmentRequestDto":{"required":["counterparty","currency","faceValueCents","interestRateBps","investmentType","maturityDate","purchaseDate","purchasePriceCents"],"type":"object","properties":{"investmentType":{"type":"string","enum":["TREASURY_BILL","TREASURY_BOND","INTERBANK_PLACEMENT","CORPORATE_BOND","GOVERNMENT_BOND","FIXED_DEPOSIT_PLACED"]},"counterparty":{"maxLength":200,"minLength":0,"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"faceValueCents":{"type":"integer","format":"int64"},"purchasePriceCents":{"type":"integer","format":"int64"},"interestRateBps":{"maximum":100000,"type":"integer","format":"int32"},"purchaseDate":{"type":"string","format":"date"},"maturityDate":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"notes":{"maxLength":4000,"minLength":0,"type":"string"},"createdBy":{"type":"string","format":"uuid"},"makerNotes":{"maxLength":4000,"minLength":0,"type":"string"}}},"SellInvestmentRequestDto":{"required":["salePriceCents"],"type":"object","properties":{"salePriceCents":{"type":"integer","format":"int64"},"soldBy":{"type":"string","format":"uuid"},"makerNotes":{"maxLength":4000,"minLength":0,"type":"string"}}},"MatureInvestmentRequestDto":{"required":["proceedsCents"],"type":"object","properties":{"proceedsCents":{"type":"integer","format":"int64"},"makerNotes":{"maxLength":4000,"minLength":0,"type":"string"}}},"CashFlowForecastResponse":{"required":["closingBalanceCents","currency","forecastDate","forecastHorizon","generatedAt","id","openingBalanceCents","projectedDepositsCents","projectedFeeIncomeCents","projectedInterestExpenseCents","projectedInterestIncomeCents","projectedMobileMoneyInflowsCents","projectedMobileMoneyOutflowsCents","projectedRtgsInflowsCents","projectedRtgsOutflowsCents","projectedSalaryPaymentsCents","projectedWithdrawalsCents","projectedZipitInflowsCents","projectedZipitOutflowsCents","totalProjectedInflowsCents","totalProjectedOutflowsCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"forecastDate":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"branchId":{"type":"string","format":"uuid"},"openingBalanceCents":{"type":"integer","format":"int64"},"totalProjectedInflowsCents":{"type":"integer","format":"int64"},"totalProjectedOutflowsCents":{"type":"integer","format":"int64"},"closingBalanceCents":{"type":"integer","format":"int64"},"projectedDepositsCents":{"type":"integer","format":"int64"},"projectedWithdrawalsCents":{"type":"integer","format":"int64"},"projectedFeeIncomeCents":{"type":"integer","format":"int64"},"projectedInterestIncomeCents":{"type":"integer","format":"int64"},"projectedInterestExpenseCents":{"type":"integer","format":"int64"},"projectedZipitInflowsCents":{"type":"integer","format":"int64"},"projectedRtgsInflowsCents":{"type":"integer","format":"int64"},"projectedMobileMoneyInflowsCents":{"type":"integer","format":"int64"},"projectedZipitOutflowsCents":{"type":"integer","format":"int64"},"projectedRtgsOutflowsCents":{"type":"integer","format":"int64"},"projectedMobileMoneyOutflowsCents":{"type":"integer","format":"int64"},"projectedSalaryPaymentsCents":{"type":"integer","format":"int64"},"actualInflowsCents":{"type":"integer","format":"int64"},"actualOutflowsCents":{"type":"integer","format":"int64"},"actualClosingCents":{"type":"integer","format":"int64"},"varianceCents":{"type":"integer","format":"int64"},"forecastHorizon":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY"]},"generatedAt":{"type":"string","format":"date-time"}}},"AlmPositionResponse":{"required":["assets030DaysCents","assets181365DaysCents","assets3190DaysCents","assets91180DaysCents","assetsOnDemandCents","assetsOver365DaysCents","cumulativeGapCents","currency","gap030DaysCents","gap181365DaysCents","gap3190DaysCents","gap91180DaysCents","gapOnDemandCents","gapOver365DaysCents","generatedAt","id","liabilities030DaysCents","liabilities181365DaysCents","liabilities3190DaysCents","liabilities91180DaysCents","liabilitiesOnDemandCents","liabilitiesOver365DaysCents","liquidityCoverageRatioBps","positionDate","totalAssetsCents","totalLiabilitiesCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"positionDate":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"assetsOnDemandCents":{"type":"integer","format":"int64"},"assets030DaysCents":{"type":"integer","format":"int64"},"assets3190DaysCents":{"type":"integer","format":"int64"},"assets91180DaysCents":{"type":"integer","format":"int64"},"assets181365DaysCents":{"type":"integer","format":"int64"},"assetsOver365DaysCents":{"type":"integer","format":"int64"},"totalAssetsCents":{"type":"integer","format":"int64"},"liabilitiesOnDemandCents":{"type":"integer","format":"int64"},"liabilities030DaysCents":{"type":"integer","format":"int64"},"liabilities3190DaysCents":{"type":"integer","format":"int64"},"liabilities91180DaysCents":{"type":"integer","format":"int64"},"liabilities181365DaysCents":{"type":"integer","format":"int64"},"liabilitiesOver365DaysCents":{"type":"integer","format":"int64"},"totalLiabilitiesCents":{"type":"integer","format":"int64"},"gapOnDemandCents":{"type":"integer","format":"int64"},"gap030DaysCents":{"type":"integer","format":"int64"},"gap3190DaysCents":{"type":"integer","format":"int64"},"gap91180DaysCents":{"type":"integer","format":"int64"},"gap181365DaysCents":{"type":"integer","format":"int64"},"gapOver365DaysCents":{"type":"integer","format":"int64"},"cumulativeGapCents":{"type":"integer","format":"int64"},"liquidityCoverageRatioBps":{"type":"integer","format":"int32"},"generatedAt":{"type":"string","format":"date-time"}}},"CreateTransactionRequest":{"required":["createdBy","description","entries","type","valueDate"],"type":"object","properties":{"type":{"type":"string","enum":["DEPOSIT","WITHDRAWAL","TRANSFER","INTEREST_ACCRUAL","FEE","LOAN_DISBURSEMENT","LOAN_REPAYMENT","ADJUSTMENT","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","SALARY_PAYMENT","BULK_PAYMENT","BILL_PAYMENT","PAYMENT_REVERSAL","INVESTMENT_PURCHASE","INVESTMENT_MATURITY","INVESTMENT_SALE","INVESTMENT_INTEREST"]},"description":{"type":"string"},"valueDate":{"type":"string","format":"date"},"createdBy":{"type":"string","format":"uuid"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/JournalEntryRequest"}},"branchId":{"type":"string","format":"uuid"},"idempotencyKey":{"type":"string"},"idempotencyClient":{"type":"string"},"idempotencyFingerprint":{"type":"string"},"paymentOrderId":{"type":"string","format":"uuid"}}},"JournalEntryRequest":{"required":["creditCents","currency","debitCents","description","glAccountCode"],"type":"object","properties":{"glAccountCode":{"type":"string"},"debitCents":{"type":"integer","format":"int64"},"creditCents":{"type":"integer","format":"int64"},"description":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"accountId":{"type":"string","format":"uuid"}}},"JournalEntryResponse":{"required":["creditCents","creditDecimal","currency","debitCents","debitDecimal","description","glAccountCode","glAccountName","id","valueDate"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"glAccountCode":{"type":"string"},"glAccountName":{"type":"string"},"debitCents":{"type":"integer","format":"int64"},"creditCents":{"type":"integer","format":"int64"},"debitDecimal":{"type":"number"},"creditDecimal":{"type":"number"},"description":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"valueDate":{"type":"string","format":"date"},"postedAt":{"type":"string","format":"date-time"}}},"TransactionResponse":{"required":["createdAt","createdBy","description","entries","id","isBalanced","reference","state","totalCreditCents","totalDebitCents","type","valueDate"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["DEPOSIT","WITHDRAWAL","TRANSFER","INTEREST_ACCRUAL","FEE","LOAN_DISBURSEMENT","LOAN_REPAYMENT","ADJUSTMENT","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","SALARY_PAYMENT","BULK_PAYMENT","BILL_PAYMENT","PAYMENT_REVERSAL","INVESTMENT_PURCHASE","INVESTMENT_MATURITY","INVESTMENT_SALE","INVESTMENT_INTEREST"]},"state":{"type":"string","enum":["PENDING","POSTED","REVERSED","CANCELLED"]},"reference":{"type":"string"},"description":{"type":"string"},"valueDate":{"type":"string","format":"date"},"postedAt":{"type":"string","format":"date-time"},"reversedAt":{"type":"string","format":"date-time"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/JournalEntryResponse"}},"totalDebitCents":{"type":"integer","format":"int64"},"totalCreditCents":{"type":"integer","format":"int64"},"isBalanced":{"type":"boolean"},"accountDebitCents":{"type":"integer","format":"int64"},"accountCreditCents":{"type":"integer","format":"int64"}}},"CreateStandingOrderRequest":{"required":["amountCents","createdBy","currency","frequency","sourceAccountId","startDate","targetAccountId"],"type":"object","properties":{"sourceAccountId":{"type":"string","format":"uuid"},"targetAccountId":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","QUARTERLY"]},"startDate":{"type":"string","format":"date"},"description":{"type":"string"},"maxExecutions":{"type":"integer","format":"int32"},"endDate":{"type":"string","format":"date"},"createdBy":{"type":"string","format":"uuid"}}},"StandingOrderExecutionResultResponse":{"required":["executedCount","executionDate","failedCount","failedOrderIds"],"type":"object","properties":{"executedCount":{"type":"integer","format":"int32"},"failedCount":{"type":"integer","format":"int32"},"failedOrderIds":{"type":"array","items":{"type":"string","format":"uuid"}},"executionDate":{"type":"string","format":"date"}}},"CreateStaffRoleRequest":{"required":["approveCategories","features","label","readOnly","readOnlyFeatures","roleKey"],"type":"object","properties":{"roleKey":{"type":"string"},"label":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"approveCategories":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"readOnlyFeatures":{"type":"array","items":{"type":"string"}}}},"CreateStaffIdentityRequest":{"required":["roleKey","username"],"type":"object","properties":{"username":{"type":"string"},"displayName":{"type":"string"},"roleKey":{"type":"string"}}},"ReviewScreeningDto":{"required":["decision","notes","reviewedBy"],"type":"object","properties":{"decision":{"type":"string"},"notes":{"type":"string"},"reviewedBy":{"type":"string","format":"uuid"}}},"ScreeningRecordResponse":{"required":["createdAt","customerId","id","screenedAt","screeningType","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"screeningType":{"type":"string","enum":["PEP","SANCTIONS","BLACKLIST","ADVERSE_MEDIA","INTERNAL"]},"status":{"type":"string","enum":["PENDING","CLEAR","MATCH","FALSE_POSITIVE","CONFIRMED_MATCH"]},"matchScore":{"type":"integer","format":"int32"},"screenedAgainst":{"type":"string"},"screenedAt":{"type":"string","format":"date-time"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"},"reviewNotes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"AddWatchlistDto":{"required":["addedBy","listType","name","source"],"type":"object","properties":{"listType":{"type":"string","enum":["PEP","SANCTIONS","BLACKLIST","INTERNAL"]},"name":{"type":"string"},"nationalId":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"nationality":{"type":"string"},"reason":{"type":"string"},"source":{"type":"string"},"addedBy":{"type":"string","format":"uuid"},"expiresAt":{"type":"string","format":"date-time"}}},"WatchlistEntryResponse":{"required":["addedAt","id","isActive","listType","name","source"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"listType":{"type":"string","enum":["PEP","SANCTIONS","BLACKLIST","INTERNAL"]},"name":{"type":"string"},"nationalId":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"nationality":{"type":"string"},"reason":{"type":"string"},"source":{"type":"string"},"isActive":{"type":"boolean"},"addedBy":{"type":"string","format":"uuid"},"addedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"}}},"ScreenedByDto":{"required":["screenedBy"],"type":"object","properties":{"screenedBy":{"type":"string","format":"uuid"}}},"CreateReportScheduleRequest":{"required":["frequency","params","reportType"],"type":"object","properties":{"reportType":{"type":"string","enum":["PRUDENTIAL_RETURN","ARREARS_AGING","PROVISIONING"]},"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","QUARTERLY"]},"nextRunDate":{"type":"string","format":"date"},"params":{"$ref":"#/components/schemas/ReportParams"}}},"RunDueResponse":{"required":["alreadyRun","asOf","failed","generated","notPermitted","results","schedulesDue"],"type":"object","properties":{"asOf":{"type":"string","format":"date"},"schedulesDue":{"type":"integer","format":"int32"},"generated":{"type":"integer","format":"int32"},"alreadyRun":{"type":"integer","format":"int32"},"failed":{"type":"integer","format":"int32"},"notPermitted":{"type":"integer","format":"int32"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleRunOutcomeResponse"}}}},"ScheduleRunOutcomeResponse":{"required":["frequency","nextRunDate","outcome","periodKey","reportType","scheduleId"],"type":"object","properties":{"scheduleId":{"type":"string","format":"uuid"},"reportType":{"type":"string","enum":["PRUDENTIAL_RETURN","ARREARS_AGING","PROVISIONING"]},"frequency":{"type":"string"},"periodKey":{"type":"string"},"outcome":{"type":"string"},"runId":{"type":"string","format":"uuid"},"rowCount":{"type":"integer","format":"int32"},"nextRunDate":{"type":"string","format":"date"},"detail":{"type":"string"}}},"GenerateReportRequest":{"required":["params","reportType"],"type":"object","properties":{"reportType":{"type":"string","enum":["PRUDENTIAL_RETURN","ARREARS_AGING","PROVISIONING"]},"format":{"type":"string"},"params":{"$ref":"#/components/schemas/ReportParams"}}},"ReportRunResponse":{"required":["generatedAt","hasOutput","id","params","reportType","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"scheduleId":{"type":"string","format":"uuid"},"reportType":{"type":"string","enum":["PRUDENTIAL_RETURN","ARREARS_AGING","PROVISIONING"]},"params":{"type":"object","additionalProperties":{"type":"object"}},"status":{"type":"string"},"outputFormat":{"type":"string"},"rowCount":{"type":"integer","format":"int32"},"errorDetail":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"triggeredBy":{"type":"string","format":"uuid"},"periodKey":{"type":"string"},"hasOutput":{"type":"boolean"}}},"CreateReconDefinitionRequest":{"required":["autoMatch","code","createdBy","frequency","lookbackDays","name","sourceType","targetType","toleranceType","toleranceValueCents"],"type":"object","properties":{"code":{"type":"string","example":"ZIPIT_DAILY"},"name":{"type":"string","example":"ZIPIT Daily Reconciliation"},"description":{"type":"string","example":"Reconcile ZIMSWITCH settlement file against CBS payment transactions"},"sourceType":{"type":"string","example":"ZIMSWITCH_SETTLEMENT"},"targetType":{"type":"string","example":"CBS_PAYMENT_TRANSACTIONS"},"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","ON_DEMAND"]},"toleranceType":{"type":"string","enum":["EXACT","ABSOLUTE","PERCENTAGE"]},"toleranceValueCents":{"type":"integer","description":"Tolerance value in cents","format":"int64","example":0},"lookbackDays":{"type":"integer","format":"int32","example":3},"autoMatch":{"type":"boolean"},"createdBy":{"type":"string","format":"uuid"}},"description":"Create a reconciliation definition"},"ReconDefinitionResponse":{"required":["autoMatch","code","frequency","id","isActive","lookbackDays","name","sourceType","targetType","toleranceType","toleranceValueCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"sourceType":{"type":"string"},"targetType":{"type":"string"},"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY","ON_DEMAND"]},"toleranceType":{"type":"string","enum":["EXACT","ABSOLUTE","PERCENTAGE"]},"toleranceValueCents":{"type":"integer","format":"int64"},"lookbackDays":{"type":"integer","format":"int32"},"autoMatch":{"type":"boolean"},"isActive":{"type":"boolean"}}},"CreateReconBatchRequest":{"required":["createdBy","definitionId","reconDate"],"type":"object","properties":{"definitionId":{"type":"string","format":"uuid"},"reconDate":{"type":"string","format":"date","example":"2026-05-21"},"sourceFileName":{"type":"string"},"sourceFileHash":{"type":"string"},"createdBy":{"type":"string","format":"uuid"}},"description":"Create a reconciliation batch"},"ReconBatchResponse":{"required":["batchReference","definitionCode","exceptionCount","id","matchRatePercent","matchedCount","netDifferenceCents","netDifferenceDecimal","reconDate","sourceRecordCount","sourceTotalAmountCents","sourceTotalAmountDecimal","status","targetRecordCount","targetTotalAmountCents","targetTotalAmountDecimal","unmatchedSource","unmatchedTarget"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"batchReference":{"type":"string"},"definitionCode":{"type":"string"},"reconDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["PENDING","INGESTING","MATCHING","REVIEW","COMPLETED","FAILED"]},"sourceFileName":{"type":"string"},"sourceRecordCount":{"type":"integer","format":"int32"},"targetRecordCount":{"type":"integer","format":"int32"},"matchedCount":{"type":"integer","format":"int32"},"unmatchedSource":{"type":"integer","format":"int32"},"unmatchedTarget":{"type":"integer","format":"int32"},"exceptionCount":{"type":"integer","format":"int32"},"sourceTotalAmountCents":{"type":"integer","format":"int64"},"targetTotalAmountCents":{"type":"integer","format":"int64"},"netDifferenceCents":{"type":"integer","format":"int64"},"sourceTotalAmountDecimal":{"type":"number"},"targetTotalAmountDecimal":{"type":"number"},"netDifferenceDecimal":{"type":"number"},"matchRatePercent":{"type":"number"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"}}},"ManualMatchRequest":{"required":["performedBy","sourceItemIds","targetItemIds"],"type":"object","properties":{"sourceItemIds":{"type":"array","items":{"type":"string","format":"uuid"}},"targetItemIds":{"type":"array","items":{"type":"string","format":"uuid"}},"performedBy":{"type":"string","format":"uuid"}},"description":"Manually match source and target items"},"CreateProductRequest":{"required":["accountType","allowsOverdraft","autoSweepEnabled","currency","dormancyDays","interestCalculationMethod","interestCompoundingFrequency","interestPostingFrequency","interestRateBps","lockInDays","maxWithdrawalPerDayCents","maxWithdrawalsPerMonth","minimumBalanceCents","minimumOpeningBalanceCents","monthlyFeeCents","name","overdraftLimitCents","penaltyRateBps","sweepThresholdCents","tieredInterest","withdrawalFeeCents"],"type":"object","properties":{"name":{"type":"string"},"accountType":{"type":"string","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]},"currency":{"type":"string","enum":["USD","ZWG"]},"interestRateBps":{"type":"integer","format":"int32"},"minimumBalanceCents":{"type":"integer","format":"int64"},"minimumOpeningBalanceCents":{"type":"integer","format":"int64"},"monthlyFeeCents":{"type":"integer","format":"int64"},"withdrawalFeeCents":{"type":"integer","format":"int64"},"description":{"type":"string"},"interestCalculationMethod":{"type":"string","enum":["DAILY_ACCRUAL","MONTHLY_AVERAGE","MINIMUM_BALANCE"]},"interestCompoundingFrequency":{"type":"string","enum":["DAILY","MONTHLY","QUARTERLY","SEMI_ANNUAL","ANNUAL","AT_MATURITY"]},"interestPostingFrequency":{"type":"string","enum":["MONTHLY","QUARTERLY","SEMI_ANNUAL","ANNUAL","AT_MATURITY"]},"tieredInterest":{"type":"string"},"maxWithdrawalPerDayCents":{"type":"integer","format":"int64"},"maxWithdrawalsPerMonth":{"type":"integer","format":"int32"},"lockInDays":{"type":"integer","format":"int32"},"penaltyRateBps":{"type":"integer","format":"int32"},"allowsOverdraft":{"type":"boolean"},"overdraftLimitCents":{"type":"integer","format":"int64"},"dormancyDays":{"type":"integer","format":"int32"},"autoSweepEnabled":{"type":"boolean"},"sweepTargetAccountType":{"type":"string","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]},"sweepThresholdCents":{"type":"integer","format":"int64"}}},"ProductResponse":{"required":["accountType","allowsOverdraft","autoSweepEnabled","createdAt","currency","dormancyDays","id","interestCalculationMethod","interestCompoundingFrequency","interestPostingFrequency","interestRateBps","interestRatePercent","isActive","lockInDays","maxWithdrawalPerDayCents","maxWithdrawalsPerMonth","minimumBalanceCents","minimumOpeningBalanceCents","monthlyFeeCents","name","overdraftLimitCents","penaltyRateBps","sweepThresholdCents","tieredInterest","withdrawalFeeCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"accountType":{"type":"string","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]},"currency":{"type":"string","enum":["USD","ZWG"]},"interestRateBps":{"type":"integer","format":"int32"},"interestRatePercent":{"type":"number"},"minimumBalanceCents":{"type":"integer","format":"int64"},"minimumOpeningBalanceCents":{"type":"integer","format":"int64"},"monthlyFeeCents":{"type":"integer","format":"int64"},"withdrawalFeeCents":{"type":"integer","format":"int64"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"description":{"type":"string"},"interestCalculationMethod":{"type":"string","enum":["DAILY_ACCRUAL","MONTHLY_AVERAGE","MINIMUM_BALANCE"]},"interestCompoundingFrequency":{"type":"string","enum":["DAILY","MONTHLY","QUARTERLY","SEMI_ANNUAL","ANNUAL","AT_MATURITY"]},"interestPostingFrequency":{"type":"string","enum":["MONTHLY","QUARTERLY","SEMI_ANNUAL","ANNUAL","AT_MATURITY"]},"tieredInterest":{"type":"string"},"maxWithdrawalPerDayCents":{"type":"integer","format":"int64"},"maxWithdrawalsPerMonth":{"type":"integer","format":"int32"},"lockInDays":{"type":"integer","format":"int32"},"penaltyRateBps":{"type":"integer","format":"int32"},"allowsOverdraft":{"type":"boolean"},"overdraftLimitCents":{"type":"integer","format":"int64"},"dormancyDays":{"type":"integer","format":"int32"},"autoSweepEnabled":{"type":"boolean"},"sweepTargetAccountType":{"type":"string","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]},"sweepThresholdCents":{"type":"integer","format":"int64"}}},"DerivedBounds":{"type":"object","properties":{"approvalThresholdZwgCents":{"type":"integer","format":"int64"},"zipitDailyLimitZwgCents":{"type":"integer","format":"int64"},"mobileMoneyDailyLimitZwgCents":{"type":"integer","format":"int64"}}},"ZwgRateResponse":{"required":["derived","stale"],"type":"object","properties":{"usdZwgRate":{"type":"number"},"rateScrapedAt":{"type":"string","format":"date-time"},"rateFetchedAt":{"type":"string","format":"date-time"},"lastFetchAttemptedAt":{"type":"string","format":"date-time"},"lastFetchError":{"type":"string"},"ageHours":{"type":"integer","format":"int64"},"stale":{"type":"boolean"},"derived":{"$ref":"#/components/schemas/DerivedBounds"}}},"FeeConfigChangeCommand":{"required":["flatFeeCents","maxFeeCents","minFeeCents","paymentType","percentageBps","tieredFees"],"type":"object","properties":{"action":{"type":"string","description":"SET or CLOSE. Required; refused 422 by name if absent.","example":"SET","enum":["SET","CLOSE"]},"paymentType":{"type":"string","description":"SET only","example":"INTERNAL_TRANSFER"},"currency":{"type":"string","description":"SET only","example":"USD","enum":["USD","ZWG"]},"feeType":{"type":"string","description":"SET only","example":"FLAT","enum":["FLAT","PERCENTAGE","TIERED"]},"flatFeeCents":{"type":"integer","format":"int64"},"percentageBps":{"type":"integer","format":"int32"},"minFeeCents":{"type":"integer","format":"int64"},"maxFeeCents":{"type":"integer","description":"0 means uncapped","format":"int64"},"tieredFees":{"type":"string"},"effectiveFrom":{"type":"string","description":"SET only","format":"date"},"effectiveTo":{"type":"string","format":"date"},"feeConfigId":{"type":"string","description":"CLOSE only: the rule being ended","format":"uuid"},"reason":{"type":"string","description":"CLOSE only: why the charge is being removed"},"makerNotes":{"type":"string"}}},"ReopenPeriodRequest":{"required":["reason","requestedBy"],"type":"object","properties":{"reason":{"type":"string"},"requestedBy":{"type":"string","format":"uuid"}}},"ApprovalRequestResponse":{"required":["createdAt","entityId","entityType","id","makerId","payload","requestType","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"requestType":{"type":"string","enum":["ACCOUNT_OPENING","TRANSACTION_POSTING","PRODUCT_CHANGE","TRANSACTION_REVERSAL","PAYMENT_REVERSAL","ACCOUNT_CLOSURE","ACCOUNT_FREEZE","PAYMENT_APPROVAL","BATCH_PAYMENT_APPROVAL","LOAN_APPROVAL","LOAN_DISBURSEMENT","LOAN_WRITE_OFF","LOAN_RESTRUCTURE","CORPORATE_ONBOARDING_DECISION","COLLATERAL_REVALUATION","PRUDENTIAL_CONFIG_CHANGE","PROVISIONING_CONFIG_CHANGE","LENDING_POLICY_CHANGE","BRANCH_SCOPING_CHANGE","TREASURY_INVESTMENT_PURCHASE","TREASURY_INVESTMENT_SALE","TREASURY_INVESTMENT_MATURITY","EXPENSE_POSTING","STAFF_ROLE_CHANGE","AGENT_ONBOARDING","AGENT_SUSPENSION","AGENT_REINSTATEMENT","AGENT_TERMINATION","AGENT_FLOAT_MOVEMENT","AGENT_LIMIT_OVERRIDE","AGENT_COMMISSION_SCHEME_CHANGE","AGENT_COMMISSION_SETTLEMENT","BILLER_REGISTRY_CHANGE","FEE_CONFIG_CHANGE","REGULATORY_SUBMISSION_RELEASE","REGULATORY_CHANNEL_CHANGE","REGULATOR_PROFILE_CHANGE","FATCA_PROFILE_CHANGE","MONITORING_RULE_CHANGE"]},"entityType":{"type":"string"},"entityId":{"type":"string","format":"uuid"},"payload":{"type":"string"},"status":{"type":"string","enum":["PENDING_APPROVAL","APPROVED","REJECTED","EXPIRED"]},"makerId":{"type":"string","format":"uuid"},"makerNotes":{"type":"string"},"checkerId":{"type":"string","format":"uuid"},"checkerNotes":{"type":"string"},"decidedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"YearEndResultResponse":{"required":["expenseAccountsClosed","netIncomeCents","netIncomeDecimal","periodClosed","revenueAccountsClosed","transferredToRetainedEarnings","year"],"type":"object","properties":{"year":{"type":"integer","format":"int32"},"revenueAccountsClosed":{"type":"integer","format":"int32"},"expenseAccountsClosed":{"type":"integer","format":"int32"},"netIncomeCents":{"type":"integer","format":"int64"},"netIncomeDecimal":{"type":"number"},"transferredToRetainedEarnings":{"type":"boolean"},"periodClosed":{"type":"boolean"}}},"ReserveCalcResult":{"required":["actualCents","currency","isCompliant","requiredCents"],"type":"object","properties":{"currency":{"type":"string"},"requiredCents":{"type":"integer","format":"int64"},"actualCents":{"type":"integer","format":"int64"},"isCompliant":{"type":"boolean"}}},"TreasuryDayEndResultResponse":{"required":["almPositionsGenerated","date","forecastsReconciled","investmentsProcessed","reserveCalculations","totalAccruedCents"],"type":"object","properties":{"date":{"type":"string","format":"date"},"investmentsProcessed":{"type":"integer","format":"int32"},"totalAccruedCents":{"type":"integer","format":"int64"},"reserveCalculations":{"type":"array","items":{"$ref":"#/components/schemas/ReserveCalcResult"}},"forecastsReconciled":{"type":"array","items":{"type":"string"}},"almPositionsGenerated":{"type":"array","items":{"type":"string"}}}},"MonthEndResultResponse":{"required":["feesPosted","interestCapitalisedAccounts","periodClosed","totalCapitalisedCents","totalFeeCents","yearMonth"],"type":"object","properties":{"yearMonth":{"type":"string"},"interestCapitalisedAccounts":{"type":"integer","format":"int32"},"totalCapitalisedCents":{"type":"integer","format":"int64"},"feesPosted":{"type":"integer","format":"int32"},"totalFeeCents":{"type":"integer","format":"int64"},"periodClosed":{"type":"boolean"}}},"DayEndResultResponse":{"required":["date","dormancyAccountsChecked","dormancyAccountsMarked","interestAccruedAccounts","periodClosed","standingOrdersExecuted","totalInterestAccruedCents","trialBalanceBalanced"],"type":"object","properties":{"date":{"type":"string","format":"date"},"interestAccruedAccounts":{"type":"integer","format":"int32"},"totalInterestAccruedCents":{"type":"integer","format":"int64"},"standingOrdersExecuted":{"type":"integer","format":"int32"},"dormancyAccountsChecked":{"type":"integer","format":"int32"},"dormancyAccountsMarked":{"type":"integer","format":"int32"},"trialBalanceBalanced":{"type":"boolean"},"periodClosed":{"type":"boolean"}}},"InitiatePaymentRequest":{"required":["amountCents","createdBy","currency","destinationAccountNumber","sourceAccountId","type","valueDate"],"type":"object","properties":{"type":{"type":"string","example":"ZIPIT","enum":["INTERNAL_TRANSFER","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","BILL_PAYMENT","SALARY_PAYMENT","BULK_PAYMENT"]},"sourceAccountId":{"type":"string","format":"uuid","example":"6a3e685e-fc86-4aac-92b7-d6d24e81ebb1"},"destinationAccountNumber":{"type":"string","example":"1234567890"},"destinationBankCode":{"type":"string","example":"CBZ"},"destinationBankName":{"type":"string","example":"CBZ Bank"},"destinationName":{"type":"string","example":"John Banda"},"amountCents":{"type":"integer","format":"int64","example":15000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"channel":{"type":"string","example":"ZIPIT"},"narration":{"type":"string","example":"Invoice payment #INV-2026-001"},"valueDate":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid","example":"3dcb3a71-6c65-4493-aa4e-104ba4ac2cc5"}}},"PaymentOrderResponse":{"required":["amountCents","amountDecimal","createdAt","createdBy","currency","destinationAccountNumber","feeCents","feeDecimal","id","orderReference","status","type","valueDate"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"orderReference":{"type":"string"},"type":{"type":"string","enum":["INTERNAL_TRANSFER","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","BILL_PAYMENT","SALARY_PAYMENT","BULK_PAYMENT"]},"status":{"type":"string","enum":["INITIATED","PENDING_APPROVAL","APPROVED","PROCESSING","SENT","COMPLETED","FAILED","REVERSED","TIMED_OUT","CANCELLED"]},"sourceAccountNumber":{"type":"string"},"destinationAccountNumber":{"type":"string"},"destinationBankCode":{"type":"string"},"destinationBankName":{"type":"string"},"destinationName":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"feeCents":{"type":"integer","format":"int64"},"feeDecimal":{"type":"number"},"currency":{"type":"string","enum":["USD","ZWG"]},"channel":{"type":"string"},"externalReference":{"type":"string"},"failureReason":{"type":"string"},"narration":{"type":"string"},"valueDate":{"type":"string","format":"date"},"createdBy":{"type":"string","format":"uuid"},"approvedBy":{"type":"string","format":"uuid"},"approvedAt":{"type":"string","format":"date-time"},"processedBy":{"type":"string","format":"uuid"},"processedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"transactionId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"ReversePaymentRequest":{"required":["reason"],"type":"object","properties":{"reason":{"type":"string"},"reversedBy":{"type":"string","format":"uuid"}}},"ProviderSubmissionResponse":{"required":["createdAt","id","paymentOrderId","rail","state","submitAttempts","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"paymentOrderId":{"type":"string","format":"uuid"},"rail":{"type":"string"},"mmProvider":{"type":"string"},"requestClass":{"type":"string"},"state":{"type":"string"},"terminalCode":{"type":"string","description":"The switch's own terminal code. 00 settles; 05/06/51/99 are terminal failures."},"providerReference":{"type":"string"},"submitAttempts":{"type":"integer","format":"int32"},"lastSubmitAt":{"type":"string","format":"date-time"},"lastPollAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"description":"A payment instruction sent to a switch, and what the switch said"},"ProcessPaymentRequest":{"type":"object","properties":{"processedBy":{"type":"string","format":"uuid","example":"3dcb3a71-6c65-4493-aa4e-104ba4ac2cc5"}}},"ConfirmSettlementRequest":{"required":["externalReference"],"type":"object","properties":{"externalReference":{"type":"string"}}},"CancelPaymentRequest":{"required":["reason"],"type":"object","properties":{"reason":{"type":"string"},"cancelledBy":{"type":"string","format":"uuid","example":"3dcb3a71-6c65-4493-aa4e-104ba4ac2cc5"}}},"ApprovePaymentRequest":{"type":"object","properties":{"approvedBy":{"type":"string","format":"uuid","example":"3dcb3a71-6c65-4493-aa4e-104ba4ac2cc5"}}},"ReceivePaymentRequest":{"required":["amountCents","currency","destinationAccountNumber","receivedBy","type","valueDate"],"type":"object","properties":{"type":{"type":"string","enum":["INTERNAL_TRANSFER","ZIPIT_SEND","ZIPIT_RECEIVE","RTGS_SEND","RTGS_RECEIVE","MOBILE_MONEY_SEND","MOBILE_MONEY_RECEIVE","BILL_PAYMENT","SALARY_PAYMENT","BULK_PAYMENT"]},"destinationAccountNumber":{"type":"string"},"sourceAccountNumber":{"type":"string"},"sourceBankCode":{"type":"string"},"sourceBankName":{"type":"string"},"senderName":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"externalReference":{"type":"string"},"narration":{"type":"string"},"valueDate":{"type":"string","format":"date"},"receivedBy":{"type":"string","format":"uuid"},"idempotencyKey":{"maxLength":80,"minLength":0,"type":"string","description":"REQUIRED. Caller-supplied retry token, scoped to the calling client. A call without one is refused 400 IDEMPOTENCY_KEY_REQUIRED before any order is minted; blank counts as absent. An inbound payment mints a new order on every call, so without a key a replayed webhook cannot be told from a second payment. Send a key that is stable for this payment and resend the SAME key to retry.","example":"ecocash-webhook-9f2c1e0a-2d55-4a1b-9b3e-6c7d8e9f0a1b"}}},"ProviderSweepResponse":{"required":["confirmed","errored","failed","pending","submitted"],"type":"object","properties":{"submitted":{"type":"integer","format":"int32"},"confirmed":{"type":"integer","format":"int32"},"failed":{"type":"integer","format":"int32"},"pending":{"type":"integer","format":"int32"},"errored":{"type":"integer","format":"int32"}},"description":"How many provider submissions each phase of the sweep moved"},"SubmitBatchRequest":{"required":["submittedBy"],"type":"object","properties":{"submittedBy":{"type":"string","format":"uuid"}}},"PaymentBatchItemResponse":{"required":["amountCents","amountDecimal","destinationAccountNumber","destinationName","id","itemIndex","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"itemIndex":{"type":"integer","format":"int32"},"destinationAccountNumber":{"type":"string"},"destinationBankCode":{"type":"string"},"destinationName":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"narration":{"type":"string"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"failureReason":{"type":"string"},"paymentOrderId":{"type":"string","format":"uuid"}}},"PaymentBatchResponse":{"required":["batchReference","createdAt","createdBy","currency","failedItems","id","items","processedItems","sourceAccountId","status","totalAmountCents","totalAmountDecimal","totalFeeCents","totalItems","type"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"batchReference":{"type":"string"},"type":{"type":"string","enum":["SALARY","BULK_TRANSFER","BULK_BILL"]},"status":{"type":"string","enum":["DRAFT","PENDING_APPROVAL","APPROVED","PROCESSING","COMPLETED","PARTIAL","FAILED"]},"sourceAccountId":{"type":"string","format":"uuid"},"totalAmountCents":{"type":"integer","format":"int64"},"totalAmountDecimal":{"type":"number"},"totalFeeCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"totalItems":{"type":"integer","format":"int32"},"processedItems":{"type":"integer","format":"int32"},"failedItems":{"type":"integer","format":"int32"},"narration":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"approvedBy":{"type":"string","format":"uuid"},"processedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"items":{"type":"array","items":{"$ref":"#/components/schemas/PaymentBatchItemResponse"}}}},"ApproveBatchRequest":{"required":["approvedBy"],"type":"object","properties":{"approvedBy":{"type":"string","format":"uuid"}}},"CreateSalaryBatchRequest":{"required":["createdBy","currency","payees","sourceAccountId"],"type":"object","properties":{"sourceAccountId":{"type":"string","format":"uuid"},"currency":{"type":"string","enum":["USD","ZWG"]},"payees":{"type":"array","items":{"$ref":"#/components/schemas/PayeeItem"}},"branchId":{"type":"string","format":"uuid"},"narration":{"type":"string"},"createdBy":{"type":"string","format":"uuid"}}},"PayeeItem":{"required":["accountNumber","amountCents","name"],"type":"object","properties":{"accountNumber":{"type":"string"},"bankCode":{"type":"string"},"name":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"narration":{"type":"string"}}},"CreateBulkBatchRequest":{"required":["batchType","createdBy","currency","items","sourceAccountId"],"type":"object","properties":{"sourceAccountId":{"type":"string","format":"uuid"},"currency":{"type":"string","enum":["USD","ZWG"]},"batchType":{"type":"string","enum":["SALARY","BULK_TRANSFER","BULK_BILL"]},"items":{"type":"array","items":{"$ref":"#/components/schemas/PayeeItem"}},"branchId":{"type":"string","format":"uuid"},"narration":{"type":"string"},"createdBy":{"type":"string","format":"uuid"}}},"CreateRequirementTemplateRequest":{"required":["itemKey","label","performedBy","required","sortOrder","track"],"type":"object","properties":{"track":{"type":"string","enum":["CORPORATE","INDIVIDUAL","DIASPORA"]},"itemKey":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"docType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]},"required":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"performedBy":{"type":"string","format":"uuid"}}},"PerformedByDto":{"required":["performedBy"],"type":"object","properties":{"performedBy":{"type":"string","format":"uuid"}}},"CreateOnboardingApplicationRequest":{"required":["details","track"],"type":"object","properties":{"track":{"type":"string","description":"One of CORPORATE, INDIVIDUAL, DIASPORA","example":"CORPORATE"},"applicantIdentityId":{"type":"string","description":"The BFF applicant identity that owns the application","format":"uuid"},"details":{"$ref":"#/components/schemas/OnboardingCompanyDetailsDto"}}},"OnboardingApplicantActorRequest":{"type":"object","properties":{"applicantIdentityId":{"type":"string","format":"uuid"}}},"ReviewItemRequest":{"required":["accepted"],"type":"object","properties":{"accepted":{"type":"boolean"},"note":{"type":"string","description":"Required on a reject. Stays IN-APP + audit ONLY; never sent in a notification."}}},"DocumentResponse":{"required":["contentType","createdAt","docType","filename","id","scanStatus","sha256","sizeBytes","status","updatedAt","uploadedAt","uploadedBy"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","description":"The customer owner, or null for a document still owned by a pending onboarding application","format":"uuid"},"applicationId":{"type":"string","description":"The onboarding-application owner, or null for a document owned directly by a customer","format":"uuid"},"kycRecordId":{"type":"string","format":"uuid"},"docType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]},"status":{"type":"string","enum":["UPLOADED","VERIFIED","REJECTED","ARCHIVED"]},"scanStatus":{"type":"string","description":"Malware-scan verdict. Content is served only when CLEAN.","enum":["PENDING","CLEAN","INFECTED","SCAN_FAILED"]},"scanDetail":{"type":"string"},"scannedAt":{"type":"string","format":"date-time"},"filename":{"type":"string","description":"Sanitised original filename. Display only: the stored object is named from ids."},"contentType":{"type":"string","description":"The SNIFFED media type, never the uploader's claim"},"sizeBytes":{"type":"integer","format":"int64"},"sha256":{"type":"string","description":"SHA-256 of the bytes as received, so a swapped object is detectable"},"uploadedBy":{"type":"string","format":"uuid"},"uploadedAt":{"type":"string","format":"date-time"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"},"reviewNotes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"description":"Customer document metadata"},"OnboardingApplicationDetailView":{"required":["documents","items"],"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OnboardingItemView"}},"documents":{"type":"array","items":{"$ref":"#/components/schemas/DocumentResponse"}}},"description":"An onboarding application with its checklist and documents"},"OnboardingItemView":{"required":["id","itemStatus","requirementTemplateId"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"requirementTemplateId":{"type":"string","format":"uuid"},"itemKey":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"docType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]},"required":{"type":"boolean"},"itemStatus":{"type":"string","enum":["PENDING","UPLOADED","IN_REVIEW","ACCEPTED","REJECTED"]},"documentId":{"type":"string","format":"uuid"},"reviewNote":{"type":"string"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"}},"description":"An onboarding checklist item"},"StatementNoticeRunResponse":{"required":["alreadyNotified","asOf","considered","failed","notified","periodKey","skipped"],"type":"object","properties":{"asOf":{"type":"string","format":"date"},"periodKey":{"type":"string"},"considered":{"type":"integer","format":"int32"},"notified":{"type":"integer","format":"int32"},"alreadyNotified":{"type":"integer","format":"int32"},"skipped":{"type":"integer","format":"int32"},"failed":{"type":"integer","format":"int32"}}},"StatementClaimResponse":{"required":["accountId","ageHours","createdAt","id","notifiedBy","outcome","periodKey"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"accountNumber":{"type":"string"},"periodKey":{"type":"string"},"outcome":{"type":"string"},"notifiedBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"ageHours":{"type":"integer","format":"int64"}}},"CancelStatementClaimRequest":{"type":"object","properties":{"reason":{"type":"string","example":"Sweep died mid-run on 2026-08-31; period already covered by a manual statement."}}},"WriteOffLoanRequest":{"required":["reason","writtenOffBy"],"type":"object","properties":{"writtenOffBy":{"type":"string","format":"uuid"},"reason":{"type":"string"}},"description":"Write off a loan"},"LoanAccountResponse":{"required":["applicationId","arrearsClassification","arrearsDays","currency","customerId","customerName","disbursedAmountCents","disbursedAt","firstRepaymentDate","gracePeriodDays","id","interestMethod","interestRateBps","loanNumber","loanProductId","loanProductName","maturityDate","outstandingFeesCents","outstandingInterestCents","outstandingPenaltiesCents","outstandingPrincipalCents","principalCents","principalDecimal","repaymentFrequency","status","termMonths","totalOutstandingCents","totalOutstandingDecimal","totalRepaidCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"loanNumber":{"type":"string"},"customerId":{"type":"string","format":"uuid"},"customerName":{"type":"string"},"loanProductId":{"type":"string","format":"uuid"},"loanProductName":{"type":"string"},"applicationId":{"type":"string","format":"uuid"},"principalCents":{"type":"integer","format":"int64"},"principalDecimal":{"type":"number"},"disbursedAmountCents":{"type":"integer","format":"int64"},"outstandingPrincipalCents":{"type":"integer","format":"int64"},"outstandingInterestCents":{"type":"integer","format":"int64"},"outstandingFeesCents":{"type":"integer","format":"int64"},"outstandingPenaltiesCents":{"type":"integer","format":"int64"},"totalOutstandingCents":{"type":"integer","format":"int64"},"totalOutstandingDecimal":{"type":"number"},"totalRepaidCents":{"type":"integer","format":"int64"},"interestRateBps":{"type":"integer","format":"int32"},"interestMethod":{"type":"string","enum":["FLAT","DECLINING_BALANCE","REDUCING_BALANCE"]},"repaymentFrequency":{"type":"string","enum":["DAILY","WEEKLY","BIWEEKLY","MONTHLY","QUARTERLY","SEMI_ANNUALLY","ANNUALLY","BULLET"]},"termMonths":{"type":"integer","format":"int32"},"gracePeriodDays":{"type":"integer","format":"int32"},"currency":{"type":"string","enum":["USD","ZWG"]},"status":{"type":"string","enum":["ACTIVE","CLOSED","DEFAULTED","WRITTEN_OFF","RESTRUCTURED","RESCHEDULED"]},"arrearsDays":{"type":"integer","format":"int32"},"arrearsClassification":{"type":"string","enum":["CURRENT","WATCH","SUBSTANDARD","DOUBTFUL","LOSS"]},"disbursedAt":{"type":"string","format":"date-time"},"maturityDate":{"type":"string","format":"date"},"firstRepaymentDate":{"type":"string","format":"date"},"nextRepaymentDate":{"type":"string","format":"date"},"lastRepaymentDate":{"type":"string","format":"date"},"closedAt":{"type":"string","format":"date-time"},"loanOfficerId":{"type":"string","format":"uuid"},"branchId":{"type":"string","format":"uuid"}}},"ProcessRepaymentRequest":{"required":["amountCents","processedBy","repaymentMethod","valueDate"],"type":"object","properties":{"amountCents":{"type":"integer","description":"Repayment amount in cents","format":"int64","example":10000},"repaymentMethod":{"type":"string","enum":["CASH","ACCOUNT_DEBIT","MOBILE_MONEY","BANK_TRANSFER","CHEQUE","SALARY_DEDUCTION"]},"sourceAccountId":{"type":"string","format":"uuid"},"valueDate":{"type":"string","format":"date"},"notes":{"type":"string"},"receivedBy":{"type":"string","format":"uuid"},"processedBy":{"type":"string","format":"uuid"},"idempotencyKey":{"maxLength":80,"minLength":0,"type":"string","description":"Optional caller-supplied retry token, scoped to the calling client.","example":"ussd-repay-9f2c1e0a-2d55-4a1b-9b3e-6c7d8e9f0a1b"}},"description":"Process a loan repayment"},"LoanRepaymentResponse":{"required":["amountCents","amountDecimal","createdAt","feesPortionCents","id","interestPortionCents","isEarlyRepayment","isRecovery","loanNumber","overpaymentCents","penaltyPortionCents","principalPortionCents","repaymentMethod","repaymentReference","valueDate"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"repaymentReference":{"type":"string"},"loanNumber":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"principalPortionCents":{"type":"integer","format":"int64"},"interestPortionCents":{"type":"integer","format":"int64"},"feesPortionCents":{"type":"integer","format":"int64"},"penaltyPortionCents":{"type":"integer","format":"int64"},"overpaymentCents":{"type":"integer","format":"int64"},"repaymentMethod":{"type":"string","enum":["CASH","ACCOUNT_DEBIT","MOBILE_MONEY","BANK_TRANSFER","CHEQUE","SALARY_DEDUCTION"]},"valueDate":{"type":"string","format":"date"},"isEarlyRepayment":{"type":"boolean"},"isRecovery":{"type":"boolean"},"notes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"RecordRecoveryRequest":{"required":["amountCents","method","recordedBy","valueDate"],"type":"object","properties":{"amountCents":{"type":"integer","description":"Recovered amount in cents","format":"int64","example":25000},"method":{"type":"string","description":"CASH debits 1001; ACCOUNT_DEBIT debits 2101 and names the account","enum":["CASH","ACCOUNT_DEBIT","MOBILE_MONEY","BANK_TRANSFER","CHEQUE","SALARY_DEDUCTION"]},"sourceAccountId":{"type":"string","description":"Required when the method takes the money from an account","format":"uuid"},"valueDate":{"type":"string","format":"date"},"notes":{"type":"string"},"recordedBy":{"type":"string","format":"uuid"}},"description":"Record a post-write-off recovery on a written-off loan"},"DisburseLoanRequest":{"required":["applicationId","disbursedBy","disbursementAccountId"],"type":"object","properties":{"applicationId":{"type":"string","format":"uuid"},"disbursementAccountId":{"type":"string","format":"uuid"},"disbursedBy":{"type":"string","format":"uuid"},"branchId":{"type":"string","format":"uuid"},"loanOfficerId":{"type":"string","format":"uuid"}},"description":"Disburse an approved loan"},"CreateAutoDebitInstructionRequest":{"required":["createdBy","loanAccountId","sourceAccountId"],"type":"object","properties":{"loanAccountId":{"type":"string","format":"uuid"},"sourceAccountId":{"type":"string","description":"Deposit account the installment is debited from","format":"uuid"},"createdBy":{"type":"string","format":"uuid"}}},"AutoDebitInstructionResponse":{"required":["createdAt","createdBy","enabled","id","loanAccountId","sourceAccountId"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"loanAccountId":{"type":"string","format":"uuid"},"sourceAccountId":{"type":"string","format":"uuid"},"enabled":{"type":"boolean"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"disabledAt":{"type":"string","format":"date-time"},"disabledBy":{"type":"string","format":"uuid"},"lastRunDate":{"type":"string","format":"date"},"lastRunOutcome":{"type":"string"},"lastRunReason":{"type":"string"}}},"AutoDebitInstructionOutcome":{"required":["instructionId","loanAccountId","outcome","sourceAccountId"],"type":"object","properties":{"instructionId":{"type":"string","format":"uuid"},"loanAccountId":{"type":"string","format":"uuid"},"sourceAccountId":{"type":"string","format":"uuid"},"outcome":{"type":"string","enum":["PAID","SKIPPED_INSUFFICIENT","SKIPPED_NO_DUE","SKIPPED_LOAN_INACTIVE","SKIPPED_ALREADY_RUN","ERROR"]},"dueAmountCents":{"type":"integer","format":"int64"},"debitedCents":{"type":"integer","format":"int64"},"reason":{"type":"string"}}},"AutoDebitRunResult":{"required":["asOf","attempted","errors","instructionsEvaluated","outcomes","paid","paidCents","skippedAlreadyRun","skippedInsufficient","skippedLoanInactive","skippedNoDue"],"type":"object","properties":{"asOf":{"type":"string","format":"date"},"instructionsEvaluated":{"type":"integer","format":"int32"},"attempted":{"type":"integer","format":"int32"},"paid":{"type":"integer","format":"int32"},"skippedInsufficient":{"type":"integer","format":"int32"},"skippedNoDue":{"type":"integer","format":"int32"},"skippedLoanInactive":{"type":"integer","format":"int32"},"skippedAlreadyRun":{"type":"integer","format":"int32"},"errors":{"type":"integer","format":"int32"},"paidCents":{"type":"integer","format":"int64"},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/AutoDebitInstructionOutcome"}}}},"RunProvisioningRequest":{"required":["asOf","runBy"],"type":"object","properties":{"runBy":{"type":"string","format":"uuid"},"asOf":{"type":"string","format":"date"}},"description":"Run IFRS 9 provisioning"},"CreateLoanProductRequest":{"required":["code","collateralRequired","createdBy","currency","gracePeriodDays","insuranceFeeBps","interestMethod","interestRateBps","latePaymentPenaltyBps","maxAmountCents","maxLoansPerCustomer","maxTermMonths","minAmountCents","minCollateralCoveragePct","minTermMonths","name","processingFeeBps","repaymentFrequency","requiresGuarantor"],"type":"object","properties":{"code":{"type":"string","example":"PL-USD-002"},"name":{"type":"string","example":"Personal Loan Plus"},"description":{"type":"string","example":"Enhanced personal loan with flexible terms"},"currency":{"type":"string","enum":["USD","ZWG"]},"interestRateBps":{"type":"integer","description":"Annual interest rate in basis points","format":"int32","example":2400},"interestMethod":{"type":"string","enum":["FLAT","DECLINING_BALANCE","REDUCING_BALANCE"]},"repaymentFrequency":{"type":"string","enum":["DAILY","WEEKLY","BIWEEKLY","MONTHLY","QUARTERLY","SEMI_ANNUALLY","ANNUALLY","BULLET"]},"minTermMonths":{"type":"integer","format":"int32","example":3},"maxTermMonths":{"type":"integer","format":"int32","example":36},"minAmountCents":{"type":"integer","description":"Minimum loan amount in cents","format":"int64","example":5000},"maxAmountCents":{"type":"integer","description":"Maximum loan amount in cents","format":"int64","example":500000},"gracePeriodDays":{"type":"integer","format":"int32","example":0},"processingFeeBps":{"type":"integer","format":"int32","example":200},"insuranceFeeBps":{"type":"integer","format":"int32","example":50},"latePaymentPenaltyBps":{"type":"integer","format":"int32","example":500},"collateralRequired":{"type":"boolean"},"minCollateralCoveragePct":{"type":"integer","format":"int32"},"maxLoansPerCustomer":{"type":"integer","format":"int32"},"requiresGuarantor":{"type":"boolean"},"createdBy":{"type":"string","format":"uuid"}},"description":"Create a new loan product"},"LoanProductResponse":{"required":["code","collateralRequired","currency","gracePeriodDays","id","insuranceFeeBps","interestMethod","interestRateBps","interestRatePercent","isActive","latePaymentPenaltyBps","maxAmountCents","maxAmountDecimal","maxLoansPerCustomer","maxTermMonths","minAmountCents","minAmountDecimal","minCollateralCoveragePct","minTermMonths","name","processingFeeBps","repaymentFrequency","requiresGuarantor"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"interestRateBps":{"type":"integer","format":"int32"},"interestRatePercent":{"type":"number"},"interestMethod":{"type":"string","enum":["FLAT","DECLINING_BALANCE","REDUCING_BALANCE"]},"repaymentFrequency":{"type":"string","enum":["DAILY","WEEKLY","BIWEEKLY","MONTHLY","QUARTERLY","SEMI_ANNUALLY","ANNUALLY","BULLET"]},"minTermMonths":{"type":"integer","format":"int32"},"maxTermMonths":{"type":"integer","format":"int32"},"minAmountCents":{"type":"integer","format":"int64"},"maxAmountCents":{"type":"integer","format":"int64"},"minAmountDecimal":{"type":"number"},"maxAmountDecimal":{"type":"number"},"gracePeriodDays":{"type":"integer","format":"int32"},"processingFeeBps":{"type":"integer","format":"int32"},"insuranceFeeBps":{"type":"integer","format":"int32"},"latePaymentPenaltyBps":{"type":"integer","format":"int32"},"collateralRequired":{"type":"boolean"},"minCollateralCoveragePct":{"type":"integer","format":"int32"},"maxLoansPerCustomer":{"type":"integer","format":"int32"},"requiresGuarantor":{"type":"boolean"},"isActive":{"type":"boolean"}}},"RegisterCollateralRequest":{"required":["collateralType","currency","description","estimatedValueCents","registeredBy"],"type":"object","properties":{"loanAccountId":{"type":"string","format":"uuid"},"loanApplicationId":{"type":"string","format":"uuid"},"collateralType":{"type":"string","enum":["PROPERTY","VEHICLE","EQUIPMENT","INVENTORY","CASH_DEPOSIT","GOVERNMENT_SECURITIES","INSURANCE_POLICY","GUARANTOR","GROUP_GUARANTEE","OTHER"]},"description":{"type":"string","example":"Toyota Hilux 2019, reg AEB 1234"},"estimatedValueCents":{"type":"integer","description":"Open-market estimate in cents","format":"int64","example":1500000},"forcedSaleValueCents":{"type":"integer","description":"Forced-sale value in cents. This is the figure provisioning nets off exposure when present.","format":"int64","example":1000000},"currency":{"type":"string","enum":["USD","ZWG"]},"registrationReference":{"type":"string"},"valuationDate":{"type":"string","format":"date"},"nextValuationDate":{"type":"string","format":"date"},"guarantorName":{"type":"string"},"guarantorNationalId":{"type":"string"},"guarantorPhone":{"type":"string"},"notes":{"type":"string"},"registeredBy":{"type":"string","format":"uuid"}},"description":"Register a security against a loan or a loan application (one of the two is required)"},"CollateralResponse":{"required":["collateralType","createdAt","currency","description","estimatedValueCents","estimatedValueDecimal","id","nettingValueCents","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"loanAccountId":{"type":"string","format":"uuid"},"loanApplicationId":{"type":"string","format":"uuid"},"collateralType":{"type":"string","enum":["PROPERTY","VEHICLE","EQUIPMENT","INVENTORY","CASH_DEPOSIT","GOVERNMENT_SECURITIES","INSURANCE_POLICY","GUARANTOR","GROUP_GUARANTEE","OTHER"]},"description":{"type":"string"},"estimatedValueCents":{"type":"integer","format":"int64"},"estimatedValueDecimal":{"type":"number"},"forcedSaleValueCents":{"type":"integer","format":"int64"},"nettingValueCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"status":{"type":"string","enum":["PLEDGED","VERIFIED","RELEASED","SEIZED","LIQUIDATED"]},"registrationReference":{"type":"string"},"valuationDate":{"type":"string","format":"date"},"nextValuationDate":{"type":"string","format":"date"},"guarantorName":{"type":"string"},"notes":{"type":"string"},"releasedAt":{"type":"string","format":"date-time"},"releaseReason":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"VerifyCollateralRequest":{"required":["verifiedBy"],"type":"object","properties":{"verifiedBy":{"type":"string","format":"uuid"}}},"RequestRevaluationRequest":{"required":["newEstimatedValueCents","reason","requestedBy","valuationDate"],"type":"object","properties":{"newEstimatedValueCents":{"type":"integer","format":"int64","example":1200000},"newForcedSaleValueCents":{"type":"integer","format":"int64"},"valuationDate":{"type":"string","format":"date"},"nextValuationDate":{"type":"string","format":"date"},"reason":{"type":"string","example":"Annual revaluation by a registered valuer"},"requestedBy":{"type":"string","format":"uuid"}},"description":"Request a revaluation. This writes NOTHING: it parks a COLLATERAL_REVALUATION approval under the lending_credit category, and the checker's release is what writes the new figures."},"ReleaseCollateralRequest":{"required":["reason","releasedBy"],"type":"object","properties":{"reason":{"type":"string"},"releasedBy":{"type":"string","format":"uuid"}},"description":"Release a security. Refused while the loan is still ACTIVE or DEFAULTED."},"SubmitLoanApplicationRequest":{"required":["createdBy","customerId","existingLoanObligationsCents","loanProductId","purpose","requestedAmountCents","termMonths"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"loanProductId":{"type":"string","format":"uuid"},"requestedAmountCents":{"type":"integer","description":"Requested loan amount in cents","format":"int64","example":100000},"termMonths":{"type":"integer","format":"int32","example":12},"purpose":{"type":"string","example":"Working capital for farming season"},"monthlyIncomeCents":{"type":"integer","description":"Monthly income in cents. For a CORPORATE borrower this is the business's monthly revenue.","format":"int64","example":250000},"monthlyExpensesCents":{"type":"integer","description":"Monthly expenses in cents. For a CORPORATE borrower this is the business's monthly operating expenses.","format":"int64","example":150000},"existingLoanObligationsCents":{"type":"integer","format":"int64"},"employmentStatus":{"type":"string","description":"Individual borrowers only; a company is not employed.","enum":["EMPLOYED","SELF_EMPLOYED","BUSINESS_OWNER","RETIRED","UNEMPLOYED","STUDENT"]},"employerName":{"type":"string","description":"Individual borrowers only; a company is not employed."},"branchId":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"}},"description":"Submit a loan application"},"LoanApplicationResponse":{"required":["applicationReference","createdAt","customerId","customerName","customerType","existingLoanObligationsCents","id","loanProductId","loanProductName","purpose","requestedAmountCents","requestedAmountDecimal","status","termMonths"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"applicationReference":{"type":"string"},"customerId":{"type":"string","format":"uuid"},"customerName":{"type":"string"},"customerType":{"type":"string","enum":["INDIVIDUAL","CORPORATE"]},"loanProductId":{"type":"string","format":"uuid"},"loanProductName":{"type":"string"},"requestedAmountCents":{"type":"integer","format":"int64"},"requestedAmountDecimal":{"type":"number"},"approvedAmountCents":{"type":"integer","format":"int64"},"termMonths":{"type":"integer","format":"int32"},"purpose":{"type":"string"},"status":{"type":"string","enum":["SUBMITTED","UNDER_REVIEW","ADDITIONAL_INFO_REQUIRED","PENDING_CHECKER_APPROVAL","APPROVED","REJECTED","DISBURSED","CANCELLED","EXPIRED"]},"creditScore":{"type":"integer","format":"int32"},"debtToIncomeRatioBps":{"type":"integer","format":"int32"},"monthlyIncomeCents":{"type":"integer","format":"int64"},"monthlyExpensesCents":{"type":"integer","format":"int64"},"existingLoanObligationsCents":{"type":"integer","format":"int64"},"employmentStatus":{"type":"string","enum":["EMPLOYED","SELF_EMPLOYED","BUSINESS_OWNER","RETIRED","UNEMPLOYED","STUDENT"]},"employerName":{"type":"string"},"rejectionReason":{"type":"string"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"},"approvedBy":{"type":"string","format":"uuid"},"approvedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"RejectLoanApplicationRequest":{"required":["reason","rejectedBy"],"type":"object","properties":{"rejectedBy":{"type":"string","format":"uuid"},"reason":{"type":"string"}},"description":"Reject a loan application"},"ApproveLoanApplicationRequest":{"required":["approvedBy"],"type":"object","properties":{"approvedBy":{"type":"string","format":"uuid"},"approvedAmountCents":{"type":"integer","description":"If null, approves for requested amount","format":"int64"}},"description":"Approve a loan application"},"CreateLendingGroupRequest":{"required":["createdBy","name"],"type":"object","properties":{"name":{"type":"string","example":"Mbare Traders Group A"},"branchId":{"type":"string","format":"uuid"},"loanOfficerId":{"type":"string","format":"uuid"},"minSize":{"type":"integer","description":"Defaults to the platform minimum (3) when absent","format":"int32"},"maxSize":{"type":"integer","description":"Defaults to the platform maximum (20) when absent","format":"int32"},"meetingSchedule":{"type":"string"},"notes":{"type":"string"},"createdBy":{"type":"string","format":"uuid"}},"description":"Create a lending group. Members are added afterwards, one existing customer at a time."},"LendingGroupResponse":{"required":["createdAt","groupNumber","id","maxSize","minSize","name","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"groupNumber":{"type":"string"},"name":{"type":"string"},"branchId":{"type":"string","format":"uuid"},"loanOfficerId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["FORMING","ACTIVE","DORMANT","CLOSED"]},"minSize":{"type":"integer","format":"int32"},"maxSize":{"type":"integer","format":"int32"},"activeMembers":{"type":"integer","format":"int32"},"meetingSchedule":{"type":"string"},"notes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"SetLendingGroupStatusRequest":{"required":["changedBy","status"],"type":"object","properties":{"status":{"type":"string","enum":["FORMING","ACTIVE","DORMANT","CLOSED"]},"changedBy":{"type":"string","format":"uuid"}}},"GroupRepaymentBatchRequest":{"required":["processedBy","repaymentMethod","splits","totalAmountCents","valueDate"],"type":"object","properties":{"totalAmountCents":{"type":"integer","format":"int64","example":15000},"splits":{"type":"array","items":{"$ref":"#/components/schemas/GroupRepaymentSplitLine"}},"repaymentMethod":{"type":"string","enum":["CASH","ACCOUNT_DEBIT","MOBILE_MONEY","BANK_TRANSFER","CHEQUE","SALARY_DEDUCTION"]},"sourceAccountId":{"type":"string","format":"uuid"},"valueDate":{"type":"string","format":"date"},"facilityId":{"type":"string","format":"uuid"},"notes":{"type":"string"},"processedBy":{"type":"string","format":"uuid"}},"description":"A bulk group repayment. The splits MUST sum exactly to totalAmountCents: there is no pro-rata rule, because a lump sum does not say whose debt it settles."},"GroupRepaymentSplitLine":{"required":["amountCents","loanAccountId"],"type":"object","properties":{"loanAccountId":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","format":"int64","example":5000}},"description":"One member's named share of a bulk collection"},"AddGroupMemberRequest":{"required":["addedBy","customerId","role"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["CHAIRPERSON","SECRETARY","TREASURER","MEMBER"]},"addedBy":{"type":"string","format":"uuid"}}},"GroupMemberResponse":{"required":["customerId","groupId","id","joinedAt","role","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"groupId":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["CHAIRPERSON","SECRETARY","TREASURER","MEMBER"]},"status":{"type":"string","enum":["ACTIVE","EXITED"]},"joinedAt":{"type":"string","format":"date-time"},"exitedAt":{"type":"string","format":"date-time"},"exitReason":{"type":"string"}}},"ExitGroupMemberRequest":{"required":["exitedBy","reason"],"type":"object","properties":{"reason":{"type":"string"},"exitedBy":{"type":"string","format":"uuid"}}},"CreateGroupFacilityRequest":{"required":["createdBy","members"],"type":"object","properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/FacilityMemberLine"}},"purpose":{"type":"string"},"createdBy":{"type":"string","format":"uuid"}},"description":"Originate a group facility. This creates one ordinary loan application per member and parks ONE credit decision on /v1/approvals under the lending_credit category. Nothing is disbursed until a checker releases it."},"FacilityMemberLine":{"required":["amountCents","customerId","disbursementAccountId","loanProductId","termMonths"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"loanProductId":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","description":"Requested amount in cents","format":"int64","example":50000},"termMonths":{"type":"integer","format":"int32","example":12},"disbursementAccountId":{"type":"string","description":"The account the member's proceeds are credited to","format":"uuid"},"purpose":{"type":"string"}},"description":"One member's line on a group origination"},"GroupFacilityResponse":{"required":["createdAt","currency","cycleNumber","facilityNumber","groupId","groupNumber","id","memberCount","status","totalDisbursedCents","totalRequestedCents"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"facilityNumber":{"type":"string"},"groupId":{"type":"string","format":"uuid"},"groupNumber":{"type":"string"},"cycleNumber":{"type":"integer","format":"int32"},"status":{"type":"string","enum":["PENDING_APPROVAL","APPROVED","DISBURSED","CANCELLED"]},"totalRequestedCents":{"type":"integer","format":"int64"},"totalDisbursedCents":{"type":"integer","format":"int64"},"memberCount":{"type":"integer","format":"int32"},"currency":{"type":"string","enum":["USD","ZWG"]},"approvalRequestId":{"type":"string","format":"uuid"},"purpose":{"type":"string"},"disbursedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"DisburseGroupFacilityRequest":{"required":["disbursedBy","disbursementAccounts"],"type":"object","properties":{"disbursementAccounts":{"type":"object","additionalProperties":{"type":"string","description":"customerId -> the account that member's proceeds are credited to","format":"uuid"},"description":"customerId -> the account that member's proceeds are credited to"},"disbursedBy":{"type":"string","format":"uuid"}},"description":"Disburse every member loan on an approved facility"},"InitiateKycDto":{"required":["customerId","idNumber","idType","initiatedBy"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"idType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION"]},"idNumber":{"type":"string"},"idExpiryDate":{"type":"string","format":"date"},"addressType":{"type":"string","enum":["UTILITY_BILL","BANK_STATEMENT","LEASE_AGREEMENT","EMPLOYER_LETTER"]},"sourceOfFunds":{"type":"string"},"sourceOfWealth":{"type":"string"},"expectedMonthlyTurnoverCents":{"type":"integer","format":"int64"},"notes":{"type":"string"},"initiatedBy":{"type":"string","format":"uuid"}}},"DocumentSummary":{"required":["contentType","docType","filename","id","scanStatus","sizeBytes","status","uploadedAt","uploadedBy"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"docType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION","PROOF_OF_ADDRESS","PAYSLIP","OTHER"]},"filename":{"type":"string"},"contentType":{"type":"string"},"sizeBytes":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["UPLOADED","VERIFIED","REJECTED","ARCHIVED"]},"scanStatus":{"type":"string","enum":["PENDING","CLEAN","INFECTED","SCAN_FAILED"]},"uploadedAt":{"type":"string","format":"date-time"},"uploadedBy":{"type":"string","format":"uuid"}},"description":"A document attached to a KYC record"},"KycRecordResponse":{"required":["addressVerified","beneficialOwnersDeclared","createdAt","customerId","directorsVerified","documents","id","idNumber","idType","idVerified","kybComplete","kycLevel","registeredAddressAttested","registrationNumberVerified","riskScore","status","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"kycLevel":{"type":"string","enum":["SIMPLIFIED","STANDARD","ENHANCED","CORPORATE"]},"status":{"type":"string","enum":["PENDING","IN_REVIEW","APPROVED","REJECTED","EXPIRED"]},"idType":{"type":"string","enum":["NATIONAL_ID","PASSPORT","DRIVERS_LICENSE","COMPANY_REGISTRATION"]},"idNumber":{"type":"string"},"idExpiryDate":{"type":"string","format":"date"},"idVerified":{"type":"boolean"},"addressType":{"type":"string","enum":["UTILITY_BILL","BANK_STATEMENT","LEASE_AGREEMENT","EMPLOYER_LETTER"]},"addressVerified":{"type":"boolean"},"registrationNumberVerified":{"type":"boolean"},"registeredAddressAttested":{"type":"boolean"},"directorsVerified":{"type":"boolean"},"beneficialOwnersDeclared":{"type":"boolean"},"kybComplete":{"type":"boolean"},"kybDocumentRequirements":{"type":"array","items":{"type":"string","enum":["CERTIFICATE_OF_INCORPORATION","MEMORANDUM_AND_ARTICLES","DIRECTORS_REGISTER","SHAREHOLDERS_REGISTER","PROOF_OF_REGISTERED_ADDRESS","BOARD_RESOLUTION_TO_OPEN_ACCOUNT","TAX_CLEARANCE"]}},"documents":{"type":"array","items":{"$ref":"#/components/schemas/DocumentSummary"}},"sourceOfFunds":{"type":"string"},"sourceOfWealth":{"type":"string"},"expectedMonthlyTurnoverCents":{"type":"integer","format":"int64"},"riskScore":{"type":"integer","format":"int32"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"},"approvedBy":{"type":"string","format":"uuid"},"approvedAt":{"type":"string","format":"date-time"},"rejectionReason":{"type":"string"},"expiryDate":{"type":"string","format":"date"},"nextReviewDate":{"type":"string","format":"date"},"notes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ReviewKycDto":{"required":["decision","reviewedBy"],"type":"object","properties":{"decision":{"type":"string","enum":["APPROVE","REJECT"]},"reviewedBy":{"type":"string","format":"uuid"}}},"RejectKycDto":{"required":["reason","rejectedBy"],"type":"object","properties":{"reason":{"type":"string"},"rejectedBy":{"type":"string","format":"uuid"}}},"KybAttestationsDto":{"required":["recordedBy"],"type":"object","properties":{"registrationNumberVerified":{"type":"boolean","description":"The registration number was checked against the registrar's record"},"registeredAddressAttested":{"type":"boolean","description":"The registered address on file was attested"},"directorsVerified":{"type":"boolean","description":"The officer register was checked against the company's filings"},"beneficialOwnersDeclared":{"type":"boolean","description":"The beneficial-owner register was declared complete"},"recordedBy":{"type":"string","description":"Reviewer performing the attestation; stamped on the audit entry","format":"uuid"}}},"ExternalCheckResultResponse":{"required":["checkedAt","outcome","source"],"type":"object","properties":{"outcome":{"type":"string","enum":["MATCH","NO_MATCH","INCONCLUSIVE"]},"source":{"type":"string"},"reference":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"details":{"$ref":"#/components/schemas/JsonNode"}}},"JsonNode":{"type":"object"},"KycExternalChecksResponse":{"required":["checkedAt","customerId","kycRecordId","performedBy","providerMode","runId"],"type":"object","properties":{"kycRecordId":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"runId":{"type":"string","format":"uuid"},"providerMode":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"performedBy":{"type":"string","format":"uuid"},"identityRegistry":{"$ref":"#/components/schemas/ExternalCheckResultResponse"},"sanctionsAndPep":{"$ref":"#/components/schemas/ExternalCheckResultResponse"},"creditBureau":{"$ref":"#/components/schemas/ExternalCheckResultResponse"},"adverseMedia":{"$ref":"#/components/schemas/ExternalCheckResultResponse"}}},"ApprovedByDto":{"required":["approvedBy"],"type":"object","properties":{"approvedBy":{"type":"string","format":"uuid"}}},"ScanResultRequest":{"required":["scanStatus","storagePath"],"type":"object","properties":{"storagePath":{"type":"string"},"scanStatus":{"type":"string","enum":["PENDING","CLEAN","INFECTED","SCAN_FAILED"]},"detail":{"type":"string"}}},"InterestCapitalisationResultResponse":{"required":["failedAccounts","processedAccounts","totalCapitalisedCents","totalCapitalisedDecimal","valueDate"],"type":"object","properties":{"processedAccounts":{"type":"integer","format":"int32"},"totalCapitalisedCents":{"type":"integer","format":"int64"},"totalCapitalisedDecimal":{"type":"number"},"failedAccounts":{"type":"array","items":{"type":"string","format":"uuid"}},"valueDate":{"type":"string","format":"date"}}},"InterestAccrualResultResponse":{"required":["failedAccounts","processedAccounts","totalInterestAccruedCents","totalInterestAccruedDecimal","valueDate"],"type":"object","properties":{"processedAccounts":{"type":"integer","format":"int32"},"totalInterestAccruedCents":{"type":"integer","format":"int64"},"totalInterestAccruedDecimal":{"type":"number"},"failedAccounts":{"type":"array","items":{"type":"string","format":"uuid"}},"valueDate":{"type":"string","format":"date"}}},"CreateGlAccountRequest":{"required":["allowDirectPosting","code","currency","name"],"type":"object","properties":{"code":{"maxLength":32,"minLength":0,"type":"string","example":"2900-DEV"},"name":{"type":"string","example":"Suspense - Development"},"type":{"type":"string","description":"Inherited from the parent when a parent is named and this is omitted; required otherwise","example":"LIABILITY","enum":["ASSET","LIABILITY","EQUITY","REVENUE","EXPENSE"]},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"parentCode":{"type":"string","description":"Optional parent, by code","example":"2000"},"allowDirectPosting":{"type":"boolean","description":"Accept direct postings even once this account has children"},"parentId":{"type":"string","description":"Optional parent, by id. Takes precedence over parentCode","format":"uuid"},"performedBy":{"type":"string","description":"Optional. Taken from the verified session when there is one","format":"uuid"}}},"ImportGlAccountRow":{"required":["code","currency","name","type"],"type":"object","properties":{"code":{"maxLength":32,"minLength":0,"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["ASSET","LIABILITY","EQUITY","REVENUE","EXPENSE"]},"currency":{"type":"string","enum":["USD","ZWG"]},"parentCode":{"type":"string"},"parentId":{"type":"string","format":"uuid"}}},"ImportGlAccountsRequest":{"required":["accounts","performedBy"],"type":"object","properties":{"accounts":{"type":"array","items":{"$ref":"#/components/schemas/ImportGlAccountRow"}},"performedBy":{"type":"string","format":"uuid"}}},"GlAccountImportError":{"required":["index","message"],"type":"object","properties":{"index":{"type":"integer","format":"int32"},"code":{"type":"string"},"message":{"type":"string"}}},"ImportGlAccountsResponse":{"required":["accounts","errors","imported"],"type":"object","properties":{"imported":{"type":"integer","format":"int32"},"accounts":{"type":"array","items":{"$ref":"#/components/schemas/GlAccountResponse"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/GlAccountImportError"}}}},"CreateExpenseRequest":{"required":["amountCents","categoryId","currency","incurredOn"],"type":"object","properties":{"categoryId":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","format":"int64","example":45000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"incurredOn":{"type":"string","description":"The date the cost was incurred; becomes the journal value date","format":"date","example":"2026-08-25"},"note":{"maxLength":1000,"minLength":0,"type":"string"},"creditGlCode":{"type":"string","description":"The credit side. Defaults to 1001 cash; must be an active ASSET (cash) or LIABILITY (payable) GL account","example":"1001"},"makerNotes":{"maxLength":1000,"minLength":0,"type":"string"}}},"CreateExpenseCategoryRequest":{"required":["active","debitGlCode","name"],"type":"object","properties":{"name":{"maxLength":120,"minLength":0,"type":"string","example":"Stationery"},"debitGlCode":{"maxLength":32,"minLength":0,"type":"string","example":"5401"},"active":{"type":"boolean","description":"Defaults to true"}}},"CreateExchangeRateRequest":{"required":["effectiveDate","fromCurrency","rateMultiplier","toCurrency"],"type":"object","properties":{"fromCurrency":{"type":"string","enum":["USD","ZWG"]},"toCurrency":{"type":"string","enum":["USD","ZWG"]},"rateMultiplier":{"type":"integer","format":"int64"},"effectiveDate":{"type":"string","format":"date"},"source":{"type":"string"},"createdBy":{"type":"string","format":"uuid"}}},"ExchangeRateResponse":{"required":["createdAt","effectiveDate","fromCurrency","id","rateDecimal","rateMultiplier","toCurrency"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"fromCurrency":{"type":"string","enum":["USD","ZWG"]},"toCurrency":{"type":"string","enum":["USD","ZWG"]},"rateMultiplier":{"type":"integer","format":"int64"},"rateDecimal":{"type":"number"},"effectiveDate":{"type":"string","format":"date"},"source":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"ConversionResponse":{"required":["effectiveDate","fromAmountCents","fromAmountDecimal","fromCurrency","rateUsed","toAmountCents","toAmountDecimal","toCurrency"],"type":"object","properties":{"fromCurrency":{"type":"string","enum":["USD","ZWG"]},"toCurrency":{"type":"string","enum":["USD","ZWG"]},"fromAmountCents":{"type":"integer","format":"int64"},"toAmountCents":{"type":"integer","format":"int64"},"fromAmountDecimal":{"type":"number"},"toAmountDecimal":{"type":"number"},"rateUsed":{"type":"number"},"effectiveDate":{"type":"string","format":"date"}}},"CreateCustomerRequest":{"required":["dateOfBirth","firstName","isPep","lastName","nationalId","nationality","phone"],"type":"object","properties":{"nationalId":{"type":"string","example":"63-456789-C-03"},"firstName":{"type":"string","example":"Kudzai"},"lastName":{"type":"string","example":"Nhongo"},"dateOfBirth":{"type":"string","format":"date","example":"1992-08-14"},"phone":{"type":"string","example":"+263773456789"},"email":{"type":"string","example":"kudzai.nhongo@example.com"},"isPep":{"type":"boolean","example":false},"nationality":{"type":"string","description":"ISO 3166-1 alpha-3. Defaults to ZWE, the column default since V1.","example":"ZWE"},"addressCountry":{"type":"string","description":"ISO 3166-1 alpha-3, the country of the customer's address. Optional.","example":"ZWE"},"residentialAddress":{"type":"string","example":"12 Samora Machel Avenue, Belgravia, Harare"},"postalAddress":{"type":"string","example":"P O Box CY 123, Causeway, Harare"}}},"AddOfficerDto":{"required":["addedBy","fullName","role"],"type":"object","properties":{"role":{"type":"string","example":"DIRECTOR","enum":["DIRECTOR","SIGNATORY","BOTH"]},"fullName":{"type":"string","example":"Rutendo Chikomba"},"nationalId":{"type":"string","description":"Optional: a foreign director may hold a passport instead","example":"63-222222-B-05"},"appointedOn":{"type":"string","format":"date","example":"2024-03-11"},"addedBy":{"type":"string","description":"Operator performing the write; stamped on the audit entry","format":"uuid"}}},"CustomerOfficerResponse":{"required":["canSign","createdAt","createdBy","customerId","fullName","id","isActive","isDirector","role","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["DIRECTOR","SIGNATORY","BOTH"]},"fullName":{"type":"string"},"nationalId":{"type":"string"},"appointedOn":{"type":"string","format":"date"},"isActive":{"type":"boolean"},"canSign":{"type":"boolean"},"isDirector":{"type":"boolean"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"OfficerActorDto":{"required":["actorId"],"type":"object","properties":{"actorId":{"type":"string","description":"Operator performing the write; stamped on the audit entry","format":"uuid"}}},"ReviewDocumentRequest":{"required":["decision","reviewedBy"],"type":"object","properties":{"decision":{"type":"string","enum":["VERIFIED","REJECTED"]},"notes":{"type":"string"},"reviewedBy":{"type":"string","format":"uuid"}}},"AttachDocumentRequest":{"required":["kycRecordId","performedBy"],"type":"object","properties":{"kycRecordId":{"type":"string","format":"uuid"},"performedBy":{"type":"string","format":"uuid"}}},"LogCustomerContactRequest":{"required":["channel","direction","loggedBy","note"],"type":"object","properties":{"channel":{"type":"string","example":"PHONE","enum":["PHONE","EMAIL","SMS","WHATSAPP","IN_PERSON","LETTER","SYSTEM","OTHER"]},"direction":{"type":"string","example":"INBOUND","enum":["INBOUND","OUTBOUND"]},"subject":{"maxLength":200,"minLength":0,"type":"string","example":"Card not received"},"note":{"maxLength":4000,"minLength":0,"type":"string","example":"Customer called to ask when the replacement card will arrive. Advised 5 working days."},"occurredAt":{"type":"string","description":"When the contact actually happened. Defaults to now; may not be in the future.","format":"date-time","example":"2026-08-22T14:05:00Z"},"loggedBy":{"type":"string","description":"Operator logging it; must match the verified session and is stamped on the audit entry","format":"uuid"}}},"CustomerContactResponse":{"required":["channel","createdAt","customerId","direction","id","loggedBy","note","occurredAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"channel":{"type":"string","enum":["PHONE","EMAIL","SMS","WHATSAPP","IN_PERSON","LETTER","SYSTEM","OTHER"]},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"]},"subject":{"type":"string"},"note":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"},"loggedBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"OpenCustomerCaseRequest":{"required":["category","openedBy","title"],"type":"object","properties":{"category":{"type":"string","example":"COMPLAINT","enum":["COMPLAINT","QUERY","REQUEST","FOLLOW_UP","OTHER"]},"title":{"maxLength":200,"minLength":0,"type":"string","example":"Duplicate debit on 21 August"},"detail":{"maxLength":4000,"minLength":0,"type":"string","example":"Customer reports the same POS purchase debited twice. Statement attached to the file."},"openedBy":{"type":"string","description":"Operator opening the case; must match the verified session and is stamped on the audit entry","format":"uuid"}}},"CustomerCaseResponse":{"required":["category","createdAt","customerId","id","openedAt","openedBy","status","title","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"category":{"type":"string","enum":["COMPLAINT","QUERY","REQUEST","FOLLOW_UP","OTHER"]},"title":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string","enum":["OPEN","RESOLVED"]},"openedBy":{"type":"string","format":"uuid"},"openedAt":{"type":"string","format":"date-time"},"resolutionNote":{"type":"string"},"resolvedBy":{"type":"string","format":"uuid"},"resolvedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ResolveCustomerCaseRequest":{"required":["resolvedBy"],"type":"object","properties":{"resolutionNote":{"maxLength":4000,"minLength":0,"type":"string","example":"Second debit was a duplicate authorisation. Reversed and confirmed with the customer."},"resolvedBy":{"type":"string","description":"Operator resolving the case; must match the verified session and is stamped on the audit entry","format":"uuid"}}},"CreateCorporateCustomerRequest":{"required":["legalName","nationality","phone","registrationNumber"],"type":"object","properties":{"legalName":{"type":"string","example":"Chikomba Logistics (Private) Limited"},"registrationNumber":{"type":"string","example":"PVT-12345/2024"},"incorporationDate":{"type":"string","format":"date","example":"2024-03-11"},"tradingName":{"type":"string","example":"Chikomba Haulage"},"phone":{"type":"string","description":"The company's own contact number","example":"+263242700100"},"email":{"type":"string","example":"accounts@chikombalogistics.co.zw"},"contactPersonName":{"type":"string","description":"The human an operator calls about this file","example":"Rutendo Chikomba"},"contactPersonPhone":{"type":"string","example":"+263772222333"},"contactPersonEmail":{"type":"string","example":"rutendo@chikombalogistics.co.zw"},"signingMandate":{"type":"string","description":"Board signing instruction. RECORDED ONLY in this wave; payments do not enforce it yet.","example":"ANY_TWO","enum":["ANY_ONE","ANY_TWO","ALL"]},"nationality":{"type":"string","example":"ZWE"},"registeredAddress":{"type":"string","example":"12 Samora Machel Avenue, Harare"}}},"AttestSubmissionDto":{"required":["reference"],"type":"object","properties":{"reference":{"type":"string"},"attestedBy":{"type":"string","format":"uuid"},"note":{"type":"string"}}},"PrepareSubmissionDto":{"required":["artefactId","artefactKind"],"type":"object","properties":{"artefactKind":{"type":"string","enum":["STR","TTR_BATCH","PRUDENTIAL_RETURN","TAX_RETURN","FATCA_REPORT"]},"artefactId":{"type":"string","format":"uuid"},"preparedBy":{"type":"string","format":"uuid"},"notes":{"type":"string"}}},"PrepareThresholdBatchDto":{"type":"object","properties":{"preparedBy":{"type":"string","format":"uuid"},"notes":{"type":"string"}}},"ReviewReturnDto":{"required":["reviewedBy"],"type":"object","properties":{"reviewedBy":{"type":"string","format":"uuid"}}},"PrudentialReturnResponse":{"required":["createdAt","data","id","reportingPeriodEnd","reportingPeriodStart","returnType","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"returnType":{"type":"string","enum":["CAPITAL_ADEQUACY","LIQUIDITY_RATIO","DEPOSIT_RETURN","LARGE_EXPOSURE","FOREIGN_CURRENCY","AML_STATISTICS","LOAN_CLASSIFICATION"]},"reportingPeriodStart":{"type":"string","format":"date"},"reportingPeriodEnd":{"type":"string","format":"date"},"status":{"type":"string","enum":["DRAFT","GENERATED","REVIEWED","SUBMITTED"]},"data":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"generatedBy":{"type":"string","format":"uuid"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"},"submittedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"CreateStrDto":{"required":["customerId","indicators","preparedBy","suspicionDescription","suspicionType"],"type":"object","properties":{"alertId":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"suspicionType":{"type":"string"},"suspicionDescription":{"type":"string"},"indicators":{"type":"array","items":{"type":"string"}},"preparedBy":{"type":"string","format":"uuid"}}},"StrResponse":{"required":["createdAt","customerId","id","preparedBy","status","strReference","suspicionDescription","suspicionType"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"strReference":{"type":"string"},"alertId":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"suspicionType":{"type":"string"},"suspicionDescription":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PENDING_REVIEW","APPROVED","FILED"]},"preparedBy":{"type":"string","format":"uuid"},"reviewedBy":{"type":"string","format":"uuid"},"reviewedAt":{"type":"string","format":"date-time"},"filedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"ReviewStrDto":{"required":["reviewedBy"],"type":"object","properties":{"reviewedBy":{"type":"string","format":"uuid"}}},"ApproveStrDto":{"required":["approvedBy"],"type":"object","properties":{"approvedBy":{"type":"string","format":"uuid"}}},"BuildReturnRunDto":{"required":["definitionCode","periodEnd","periodStart"],"type":"object","properties":{"definitionCode":{"type":"string"},"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"}}},"FatcaDisposeDto":{"required":["disposition"],"type":"object","properties":{"disposition":{"type":"string","enum":["CONFIRM_US_PERSON","CURE_NOT_US_PERSON","DEFER"]},"evidenceDocumentId":{"type":"string","format":"uuid"},"evidenceReference":{"type":"string"},"note":{"type":"string"}}},"FatcaScreenBatchDto":{"required":["limit"],"type":"object","properties":{"limit":{"type":"integer","format":"int32"},"customerId":{"type":"string","format":"uuid"}}},"CancelPromiseRequest":{"required":["cancelledBy","reason"],"type":"object","properties":{"reason":{"type":"string"},"cancelledBy":{"type":"string","format":"uuid"}}},"RecordPromiseRequest":{"required":["channel","promiseDate","promisedAmountCents","recordedBy"],"type":"object","properties":{"promisedAmountCents":{"type":"integer","format":"int64","example":25000},"promiseDate":{"type":"string","description":"The day the borrower undertook to pay by. May not be in the past.","format":"date"},"channel":{"type":"string","enum":["CALL","VISIT","SMS","WHATSAPP","EMAIL","BRANCH","OTHER"]},"notes":{"type":"string"},"recordedBy":{"type":"string","format":"uuid"}},"description":"Record a promise to pay. This moves no money and creates no receivable."},"RecordCollectionActionRequest":{"required":["actionType","performedBy"],"type":"object","properties":{"actionType":{"type":"string","enum":["CALL","VISIT","LETTER","SMS","EMAIL","ESCALATION","LEGAL_NOTICE","FIELD_REPORT","OTHER"]},"outcome":{"type":"string","example":"No answer, left voicemail"},"notes":{"type":"string"},"performedBy":{"type":"string","format":"uuid"}},"description":"Append one entry to a loan's collections history. Append only: no update, no delete."},"CollectionActionResponse":{"required":["actionType","id","loanAccountId","performedAt","performedBy"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"loanAccountId":{"type":"string","format":"uuid"},"actionType":{"type":"string","enum":["CALL","VISIT","LETTER","SMS","EMAIL","ESCALATION","LEGAL_NOTICE","FIELD_REPORT","OTHER"]},"outcome":{"type":"string"},"notes":{"type":"string"},"arrearsDaysAtAction":{"type":"integer","format":"int32"},"outstandingCentsAtAction":{"type":"integer","format":"int64"},"performedBy":{"type":"string","format":"uuid"},"performedAt":{"type":"string","format":"date-time"}}},"CreateBranchRequest":{"required":["code","name"],"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"address":{"type":"string"}}},"PayBillRequest":{"required":["amountCents","billerCode","createdBy","currency","customerReference","sourceAccountId","valueDate"],"type":"object","properties":{"billerCode":{"type":"string","example":"ZESA-PREPAID"},"customerReference":{"type":"string","example":"04123456789"},"sourceAccountId":{"type":"string","format":"uuid","example":"6a3e685e-fc86-4aac-92b7-d6d24e81ebb1"},"amountCents":{"type":"integer","format":"int64","example":15000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"channel":{"type":"string","example":"MOBILE"},"narration":{"type":"string","example":"August electricity"},"valueDate":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"idempotencyKey":{"type":"string","description":"Caller's retry token, scoped to the authenticated client. Send the same key to retry safely; a retry returns the original receipt rather than paying twice.","example":"bill-pay-2026-09-01-0001"}}},"AddBeneficiaryRequest":{"required":["accountNumber","beneficiaryName","customerId","destinationType","nickname"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"nickname":{"type":"string"},"destinationType":{"type":"string","enum":["INTERNAL","ZIPIT","RTGS","ECOCASH","INNBUCKS","ONEMONEY"]},"accountNumber":{"type":"string"},"bankCode":{"type":"string"},"bankName":{"type":"string"},"beneficiaryName":{"type":"string"},"phoneNumber":{"type":"string"}}},"BeneficiaryResponse":{"required":["accountNumber","beneficiaryName","createdAt","customerId","destinationType","id","isActive","nickname"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"nickname":{"type":"string"},"destinationType":{"type":"string","enum":["INTERNAL","ZIPIT","RTGS","ECOCASH","INNBUCKS","ONEMONEY"]},"accountNumber":{"type":"string"},"bankCode":{"type":"string"},"bankName":{"type":"string"},"beneficiaryName":{"type":"string"},"phoneNumber":{"type":"string"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}}},"AddBeneficialOwnerDto":{"required":["addedBy","controlType","customerId","isPep","ownerName","ownershipPercentage"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"ownerName":{"type":"string"},"nationalId":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"nationality":{"type":"string"},"ownershipPercentage":{"type":"number"},"controlType":{"type":"string","enum":["DIRECT_OWNERSHIP","INDIRECT_OWNERSHIP","VOTING_RIGHTS","MANAGEMENT_CONTROL"]},"isPep":{"type":"boolean"},"addedBy":{"type":"string","format":"uuid"}}},"BeneficialOwnerResponse":{"required":["controlType","createdAt","customerId","id","isPep","ownerName","ownershipPercentage","verificationStatus"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"ownerName":{"type":"string"},"nationalId":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"nationality":{"type":"string"},"ownershipPercentage":{"type":"number"},"controlType":{"type":"string","enum":["DIRECT_OWNERSHIP","INDIRECT_OWNERSHIP","VOTING_RIGHTS","MANAGEMENT_CONTROL"]},"isPep":{"type":"boolean"},"verificationStatus":{"type":"string","enum":["UNVERIFIED","VERIFIED","UNABLE_TO_VERIFY"]},"verifiedBy":{"type":"string","format":"uuid"},"verifiedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"VerifyOwnerDto":{"required":["verifiedBy"],"type":"object","properties":{"verifiedBy":{"type":"string","format":"uuid"}}},"CreateApprovalRequestDto":{"required":["entityId","entityType","makerId","payload","requestType"],"type":"object","properties":{"requestType":{"type":"string","enum":["ACCOUNT_OPENING","TRANSACTION_POSTING","PRODUCT_CHANGE","TRANSACTION_REVERSAL","PAYMENT_REVERSAL","ACCOUNT_CLOSURE","ACCOUNT_FREEZE","PAYMENT_APPROVAL","BATCH_PAYMENT_APPROVAL","LOAN_APPROVAL","LOAN_DISBURSEMENT","LOAN_WRITE_OFF","LOAN_RESTRUCTURE","CORPORATE_ONBOARDING_DECISION","COLLATERAL_REVALUATION","PRUDENTIAL_CONFIG_CHANGE","PROVISIONING_CONFIG_CHANGE","LENDING_POLICY_CHANGE","BRANCH_SCOPING_CHANGE","TREASURY_INVESTMENT_PURCHASE","TREASURY_INVESTMENT_SALE","TREASURY_INVESTMENT_MATURITY","EXPENSE_POSTING","STAFF_ROLE_CHANGE","AGENT_ONBOARDING","AGENT_SUSPENSION","AGENT_REINSTATEMENT","AGENT_TERMINATION","AGENT_FLOAT_MOVEMENT","AGENT_LIMIT_OVERRIDE","AGENT_COMMISSION_SCHEME_CHANGE","AGENT_COMMISSION_SETTLEMENT","BILLER_REGISTRY_CHANGE","FEE_CONFIG_CHANGE","REGULATORY_SUBMISSION_RELEASE","REGULATORY_CHANNEL_CHANGE","REGULATOR_PROFILE_CHANGE","FATCA_PROFILE_CHANGE","MONITORING_RULE_CHANGE"]},"entityType":{"type":"string"},"entityId":{"type":"string","format":"uuid"},"payload":{"type":"string"},"makerId":{"type":"string","format":"uuid"},"makerNotes":{"type":"string"}}},"ApprovalDecisionDto":{"type":"object","properties":{"checkerId":{"type":"string","format":"uuid"},"checkerNotes":{"type":"string"}}},"ExpireStaleResponse":{"required":["expired"],"type":"object","properties":{"expired":{"type":"integer","format":"int32"}}},"CreateApiKeyRequest":{"required":["clientName","rateLimitPerMinute","scopes"],"type":"object","properties":{"clientName":{"type":"string","example":"Mobile Banking App"},"scopes":{"type":"string","example":"read,write"},"rateLimitPerMinute":{"minimum":1,"type":"integer","format":"int32","example":60},"description":{"type":"string","example":"API key for mobile app integration"}}},"ApiKeyResponse":{"required":["clientName","createdAt","id","isActive","keyPrefix","rateLimitPerMinute","scopes"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"clientName":{"type":"string"},"keyPrefix":{"type":"string"},"scopes":{"type":"string"},"rateLimitPerMinute":{"type":"integer","format":"int32"},"isActive":{"type":"boolean"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"CreateApiKeyResponse":{"required":["apiKey","rawKey"],"type":"object","properties":{"apiKey":{"$ref":"#/components/schemas/ApiKeyResponse"},"rawKey":{"type":"string"}}},"InvestigationNotesDto":{"required":["addedBy","notes"],"type":"object","properties":{"notes":{"type":"string"},"addedBy":{"type":"string","format":"uuid"}}},"TransactionAlertResponse":{"required":["advisorySource","alertReference","alertType","createdAt","customerId","customerName","description","id","ruleCode","ruleName","severity","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"alertReference":{"type":"string"},"ruleCode":{"type":"string"},"ruleName":{"type":"string"},"customerId":{"type":"string","format":"uuid"},"customerName":{"type":"string"},"accountId":{"type":"string","format":"uuid"},"transactionId":{"type":"string","format":"uuid"},"paymentOrderId":{"type":"string","format":"uuid"},"alertType":{"type":"string","enum":["THRESHOLD_BREACH","STRUCTURING_SUSPECTED","VELOCITY_BREACH","PATTERN_DETECTED","PEP_TRANSACTION","HIGH_RISK_COUNTRY","UNUSUAL_BEHAVIOR","LARGE_CASH","DORMANT_REACTIVATION"]},"severity":{"type":"string","enum":["LOW","MEDIUM","HIGH","CRITICAL"]},"status":{"type":"string","enum":["NEW","UNDER_REVIEW","ESCALATED","DISMISSED","STR_FILED","CLOSED"]},"description":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string"},"assignedTo":{"type":"string","format":"uuid"},"investigationNotes":{"type":"string"},"escalatedTo":{"type":"string","format":"uuid"},"escalatedAt":{"type":"string","format":"date-time"},"resolution":{"type":"string"},"resolvedBy":{"type":"string","format":"uuid"},"resolvedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"advisorySource":{"type":"string","enum":["RULE","AI_ENGINE","GRAPH_AML"]},"advisoryRiskScore":{"type":"number"},"advisoryReasons":{"type":"array","items":{"type":"string"}},"advisoryModelStatus":{"type":"string"}}},"FileStrFromAlertDto":{"required":["filedBy"],"type":"object","properties":{"filedBy":{"type":"string","format":"uuid"}}},"EscalateAlertDto":{"required":["escalatedBy","escalatedTo","reason"],"type":"object","properties":{"escalatedTo":{"type":"string","format":"uuid"},"reason":{"type":"string"},"escalatedBy":{"type":"string","format":"uuid"}}},"DismissAlertDto":{"required":["dismissedBy","reason"],"type":"object","properties":{"reason":{"type":"string"},"dismissedBy":{"type":"string","format":"uuid"}}},"CloseAlertDto":{"required":["closedBy","resolution"],"type":"object","properties":{"resolution":{"type":"string"},"closedBy":{"type":"string","format":"uuid"}}},"AssignAlertDto":{"required":["assignedBy","assignedTo"],"type":"object","properties":{"assignedTo":{"type":"string","format":"uuid"},"assignedBy":{"type":"string","format":"uuid"}}},"CreateAgentRequest":{"required":["agentCode","contactPhone","currency","customerId","tradingName"],"type":"object","properties":{"agentCode":{"maxLength":30,"minLength":0,"type":"string"},"tradingName":{"maxLength":200,"minLength":0,"type":"string"},"customerId":{"type":"string","format":"uuid"},"contactPhone":{"maxLength":30,"minLength":0,"type":"string"},"contactEmail":{"maxLength":255,"minLength":0,"type":"string"},"branchId":{"type":"string","format":"uuid"},"currency":{"type":"string","description":"USD only at launch; there is no ZWG agent float product","enum":["USD","ZWG"]},"lowBalanceThresholdCents":{"type":"integer","description":"Null means the float product's own minimum balance (MONEY 5). No second number is invented.","format":"int64"},"notes":{"maxLength":1000,"minLength":0,"type":"string"}}},"AgentLifecycleRequest":{"type":"object","properties":{"reason":{"maxLength":1000,"minLength":0,"type":"string","description":"Required for a suspension, reinstatement or termination; optional on an onboarding"}}},"CreateAgentLocationRequest":{"required":["addressLine","label"],"type":"object","properties":{"label":{"maxLength":120,"minLength":0,"type":"string"},"addressLine":{"maxLength":255,"minLength":0,"type":"string"},"city":{"maxLength":120,"minLength":0,"type":"string"},"province":{"maxLength":120,"minLength":0,"type":"string"}}},"AgentLocationResponse":{"required":["active","addressLine","id","label"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"addressLine":{"type":"string"},"city":{"type":"string"},"province":{"type":"string"},"active":{"type":"boolean"}}},"AgentFloatMovementRequest":{"required":["amountCents","movementType"],"type":"object","properties":{"movementType":{"type":"string","enum":["TOP_UP","DRAWDOWN"]},"amountCents":{"type":"integer","format":"int64"},"reference":{"maxLength":120,"minLength":0,"type":"string"},"note":{"maxLength":1000,"minLength":0,"type":"string"}}},"AttachFloatAccountRequest":{"required":["accountId"],"type":"object","properties":{"accountId":{"type":"string","description":"An already-opened AGENT_FLOAT account belonging to the agent's own customer record","format":"uuid"}}},"AgentCashRequest":{"required":["amountCents","currency","customerAccountId"],"type":"object","properties":{"customerAccountId":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"locationId":{"type":"string","description":"The outlet, when the agent has more than one","format":"uuid"},"idempotencyKey":{"maxLength":80,"minLength":0,"type":"string","description":"A stable retry token. The same key with the same instruction returns the original receipt."}}},"AgentCashResponse":{"required":["agentCode","agentFloatAccountNumber","agentId","amountCents","commissionCents","createdAt","currency","customerAccountNumber","customerFeeCents","id","postedOn","transactionId","transactionReference","transactionType"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"agentCode":{"type":"string"},"transactionType":{"type":"string","enum":["CASH_IN","CASH_OUT"]},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"customerAccountNumber":{"type":"string"},"agentFloatAccountNumber":{"type":"string"},"transactionId":{"type":"string","format":"uuid"},"transactionReference":{"type":"string"},"customerFeeCents":{"type":"integer","description":"Zero until the institution configures a customer fee on the agency fee rail","format":"int64"},"commissionCents":{"type":"integer","description":"Zero until a commission schedule exists. Not an error; an honest zero.","format":"int64"},"postedOn":{"type":"string","format":"date"},"locationId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"AgentLimitRequest":{"required":["currency","customerDailyTotalMaxCents","customerPerTransactionMaxCents","dailyTotalMaxCents","effectiveFrom","perTransactionMaxCents","transactionType"],"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"transactionType":{"type":"string","enum":["CASH_IN","CASH_OUT"]},"currency":{"type":"string","enum":["USD","ZWG"]},"perTransactionMaxCents":{"type":"integer","format":"int64"},"dailyTotalMaxCents":{"type":"integer","format":"int64"},"customerPerTransactionMaxCents":{"type":"integer","format":"int64"},"customerDailyTotalMaxCents":{"type":"integer","format":"int64"},"effectiveFrom":{"type":"string","format":"date"},"effectiveTo":{"type":"string","format":"date"},"makerNotes":{"maxLength":1000,"minLength":0,"type":"string"}}},"AgentSettlementRunRequest":{"required":["currency"],"type":"object","properties":{"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]}}},"AgentCommissionScheduleRequest":{"required":["commissionType","currency","effectiveFrom","flatCommissionCents","maxCommissionCents","minCommissionCents","percentageBps","tieredCommission","transactionType"],"type":"object","properties":{"transactionType":{"type":"string","enum":["CASH_IN","CASH_OUT"]},"currency":{"type":"string","enum":["USD","ZWG"]},"commissionType":{"type":"string","enum":["FLAT","PERCENTAGE","TIERED"]},"flatCommissionCents":{"type":"integer","format":"int64"},"percentageBps":{"type":"integer","format":"int32"},"minCommissionCents":{"type":"integer","format":"int64"},"maxCommissionCents":{"type":"integer","description":"Zero means NO ceiling, matching payment_fee_configs.max_fee_cents","format":"int64"},"tieredCommission":{"type":"string","description":"[{\"uptoCents\": n, \"flatCents\": n, \"percentageBps\": n}] -- no tier is seeded"},"effectiveFrom":{"type":"string","format":"date"},"effectiveTo":{"type":"string","format":"date"},"makerNotes":{"maxLength":1000,"minLength":0,"type":"string"}}},"CreateAccountRequest":{"required":["accountType","currency","customerId","initialDepositCents","productId"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid","example":"3a262ddd-0cd3-41c9-a6ff-ff420b4e9077"},"accountType":{"type":"string","example":"SAVINGS","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]},"productId":{"type":"string","format":"uuid","example":"b0000001-0000-0000-0000-000000000001"},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"initialDepositCents":{"type":"integer","description":"Must be 0: accounts open unfunded; fund via POST /v1/accounts/{id}/deposit afterwards","format":"int64","example":0},"branchId":{"type":"string","description":"Branch the account belongs to; defaults to the customer's home branch when omitted","format":"uuid"}}},"AccountResponse":{"required":["accountNumber","accountType","balanceCents","balanceDecimal","currency","customerId","customerName","id","minimumOpeningBalanceCents","openedAt","openingCreditsCents","productName","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"customerName":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["SAVINGS","CURRENT","FIXED_DEPOSIT","CALL_DEPOSIT","YOUTH_SAVINGS","GROUP_SAVINGS","SME_BUSINESS","AGENT_FLOAT","TRUST","SALARY_SAVINGS"]},"productName":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"balanceCents":{"type":"integer","format":"int64"},"balanceDecimal":{"type":"number"},"status":{"type":"string","enum":["PENDING_ACTIVATION","ACTIVE","DORMANT","FROZEN","CLOSED"]},"openedAt":{"type":"string","format":"date-time"},"lastTransactionAt":{"type":"string","format":"date-time"},"fundedAt":{"type":"string","format":"date-time"},"openingCreditsCents":{"type":"integer","format":"int64"},"minimumOpeningBalanceCents":{"type":"integer","format":"int64"},"branchId":{"type":"string","format":"uuid"}}},"TransferRequest":{"required":["amountCents","currency","targetAccountId","transferredBy"],"type":"object","properties":{"targetAccountId":{"type":"string","format":"uuid","example":"cb9650d9-a2a8-4f6e-a7f9-cb303f8c68ea"},"amountCents":{"type":"integer","format":"int64","example":5000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"transferredBy":{"type":"string","format":"uuid","example":"3dcb3a71-6c65-4493-aa4e-104ba4ac2cc5"},"description":{"type":"string","example":"Monthly rent payment"},"idempotencyKey":{"maxLength":80,"minLength":0,"type":"string","description":"Optional caller-supplied retry token, scoped to the calling client.","example":"bff-transfer-9f2c1e0a-2d55-4a1b-9b3e-6c7d8e9f0a1b"}}},"WithdrawRequest":{"required":["amountCents","channel","currency","withdrawnBy"],"type":"object","properties":{"amountCents":{"type":"integer","format":"int64","example":10000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"channel":{"type":"string","example":"BRANCH"},"withdrawnBy":{"type":"string","format":"uuid","example":"3a262ddd-0cd3-41c9-a6ff-ff420b4e9077"}}},"AccountActionRequest":{"required":["performedBy"],"type":"object","properties":{"performedBy":{"type":"string","format":"uuid","example":"3a262ddd-0cd3-41c9-a6ff-ff420b4e9077"},"reason":{"type":"string","example":"Routine account review"}}},"DepositRequest":{"required":["amountCents","channel","currency","depositedBy"],"type":"object","properties":{"amountCents":{"type":"integer","format":"int64","example":25000},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"channel":{"type":"string","example":"BRANCH"},"depositedBy":{"type":"string","format":"uuid","example":"3a262ddd-0cd3-41c9-a6ff-ff420b4e9077"}}},"IssuePassbookRequest":{"required":["issuedBy"],"type":"object","properties":{"issuedBy":{"type":"string","description":"Operator issuing the book; must match the verified session and is stamped on the audit entry","format":"uuid"}}},"PassbookResponse":{"required":["accountId","accountNumber","id","issueSequence","issuedAt","issuedBy","linesPrinted","passbookNo","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"accountNumber":{"type":"string"},"passbookNo":{"type":"string"},"issueSequence":{"type":"integer","format":"int32"},"status":{"type":"string","enum":["ACTIVE","LOST","CLOSED"]},"issuedAt":{"type":"string","format":"date-time"},"issuedBy":{"type":"string","format":"uuid"},"replacedAt":{"type":"string","format":"date-time"},"replacedBy":{"type":"string","format":"uuid"},"replacementNote":{"type":"string"},"replacedByPassbookId":{"type":"string","format":"uuid"},"lastPrintedTransactionId":{"type":"string","description":"The last posting printed into this book. Null when nothing has been printed yet.","format":"uuid"},"lastPrintedAt":{"type":"string","format":"date-time"},"lastPrintedBy":{"type":"string","format":"uuid"},"linesPrinted":{"type":"integer","description":"How many lines have been printed into this book. A count, never a total.","format":"int32"}}},"ReplacePassbookRequest":{"required":["reason","replacedBy"],"type":"object","properties":{"reason":{"type":"string","example":"LOST","enum":["LOST","FULL"]},"note":{"type":"string","example":"Customer reported the book stolen on 22 August."},"replacedBy":{"type":"string","description":"Operator performing the replacement; must match the verified session","format":"uuid"}}},"ConfirmPassbookPrintRequest":{"required":["confirmedBy","throughTransactionId"],"type":"object","properties":{"throughTransactionId":{"type":"string","description":"The last line actually printed. Use cursorTransactionId from the lines response.","format":"uuid"},"confirmedBy":{"type":"string","description":"Operator confirming the print; must match the verified session","format":"uuid"}}},"DormancyCheckResultResponse":{"required":["accountIds","accountsChecked","accountsMarkedDormant"],"type":"object","properties":{"accountsChecked":{"type":"integer","format":"int32"},"accountsMarkedDormant":{"type":"integer","format":"int32"},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"}}}},"PatchCustomerProfileRequest":{"required":["updatedBy"],"type":"object","properties":{"addressLine1":{"type":"string","example":"12 Samora Machel Avenue"},"addressLine2":{"type":"string","example":"Belgravia"},"city":{"type":"string","example":"Harare"},"province":{"type":"string","example":"Harare Metropolitan"},"postalCode":{"type":"string","example":"00263"},"addressCountry":{"type":"string","description":"ISO 3166-1 alpha-3","example":"ZWE"},"residentialAddress":{"type":"string","example":"12 Samora Machel Avenue, Belgravia, Harare"},"postalAddress":{"type":"string","example":"P O Box CY 123, Causeway, Harare"},"nationality":{"type":"string","description":"ISO 3166-1 alpha-3. Read by the STRONG FATCA indicium US_NATIONALITY. Blank is refused rather than clearing it: the column is NOT NULL.","example":"ZWE"},"occupation":{"type":"string","example":"Logistics coordinator"},"employer":{"type":"string","example":"Chikomba Logistics (Private) Limited"},"employmentStatus":{"type":"string","example":"EMPLOYED","enum":["EMPLOYED","SELF_EMPLOYED","UNEMPLOYED","RETIRED","STUDENT","OTHER"]},"employerAddress":{"type":"string","example":"9 Kaguvi Street, Harare"},"employmentStartDate":{"type":"string","format":"date","example":"2021-04-01"},"monthlyIncomeCents":{"type":"integer","description":"DECLARED monthly income in cents. Requires incomeCurrency; nothing computes with it.","format":"int64","example":120000},"incomeCurrency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"incomeSource":{"type":"string","example":"Salary"},"annualIncomeBand":{"type":"string","example":"USD 1,000 - 2,500"},"sourceOfFunds":{"type":"string","example":"Employment"},"updatedBy":{"type":"string","description":"Operator performing the write; must match the verified session and is stamped on the audit entry","format":"uuid"}}},"UpdateOfficerDto":{"required":["updatedBy"],"type":"object","properties":{"role":{"type":"string","example":"BOTH","enum":["DIRECTOR","SIGNATORY","BOTH"]},"fullName":{"type":"string","example":"Rutendo Chikomba"},"nationalId":{"type":"string","example":"63-222222-B-05"},"appointedOn":{"type":"string","format":"date","example":"2024-03-11"},"updatedBy":{"type":"string","format":"uuid"}}},"ReserveComplianceResponse":{"required":["calculated","currency"],"type":"object","properties":{"currency":{"type":"string","enum":["USD","ZWG"]},"calculated":{"type":"boolean"},"isCompliant":{"type":"boolean"},"surplusDeficitCents":{"type":"integer","format":"int64"}}},"InvestmentResponse":{"required":["accruedInterestCents","counterparty","createdAt","createdBy","currency","currentValueCents","faceValueCents","id","interestRateBps","investmentReference","investmentType","maturityDate","purchaseDate","purchasePriceCents","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"investmentReference":{"type":"string"},"investmentType":{"type":"string","enum":["TREASURY_BILL","TREASURY_BOND","INTERBANK_PLACEMENT","CORPORATE_BOND","GOVERNMENT_BOND","FIXED_DEPOSIT_PLACED"]},"status":{"type":"string","enum":["ACTIVE","MATURED","SOLD","DEFAULTED"]},"counterparty":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"faceValueCents":{"type":"integer","format":"int64"},"purchasePriceCents":{"type":"integer","format":"int64"},"currentValueCents":{"type":"integer","format":"int64"},"accruedInterestCents":{"type":"integer","format":"int64"},"interestRateBps":{"type":"integer","format":"int32"},"purchaseDate":{"type":"string","format":"date"},"maturityDate":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"notes":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"InvestmentPortfolioSummaryResponse":{"required":["averageYieldBps","byCurrency","byType","totalAccruedInterestCents","totalCurrentValueCents","totalFaceValueCents","weightedAverageMaturityDays"],"type":"object","properties":{"totalFaceValueCents":{"type":"integer","format":"int64"},"totalCurrentValueCents":{"type":"integer","format":"int64"},"totalAccruedInterestCents":{"type":"integer","format":"int64"},"byType":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}},"byCurrency":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}},"averageYieldBps":{"type":"integer","format":"int32"},"weightedAverageMaturityDays":{"type":"integer","format":"int32"}}},"TreasuryDashboardResponse":{"required":["cashPositionCents","currency","date","demandDepositsCents","fixedDepositsCents","investmentPortfolioCents","investmentsMaturing30DaysCents","nostroBalanceCents","notCalculated","openComplianceAlerts","pendingPaymentsCents","projectedInflowsTodayCents","projectedNetCashFlowCents","projectedOutflowsTodayCents","savingsDepositsCents","totalDepositsCents","totalLiquidAssetsCents","unsettledPaymentsCents"],"type":"object","properties":{"date":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"cashPositionCents":{"type":"integer","format":"int64"},"nostroBalanceCents":{"type":"integer","format":"int64"},"totalLiquidAssetsCents":{"type":"integer","format":"int64"},"totalDepositsCents":{"type":"integer","format":"int64"},"demandDepositsCents":{"type":"integer","format":"int64"},"savingsDepositsCents":{"type":"integer","format":"int64"},"fixedDepositsCents":{"type":"integer","format":"int64"},"investmentPortfolioCents":{"type":"integer","format":"int64"},"investmentsMaturing30DaysCents":{"type":"integer","format":"int64"},"liquidityRatioBps":{"type":"integer","format":"int32"},"leverageRatioBps":{"type":"integer","format":"int32"},"requiredReserveCents":{"type":"integer","format":"int64"},"actualReserveCents":{"type":"integer","format":"int64"},"reserveSurplusDeficitCents":{"type":"integer","format":"int64"},"isReserveCompliant":{"type":"boolean"},"projectedInflowsTodayCents":{"type":"integer","format":"int64"},"projectedOutflowsTodayCents":{"type":"integer","format":"int64"},"projectedNetCashFlowCents":{"type":"integer","format":"int64"},"openComplianceAlerts":{"type":"integer","format":"int32"},"pendingPaymentsCents":{"type":"integer","format":"int64"},"unsettledPaymentsCents":{"type":"integer","format":"int64"},"notCalculated":{"type":"object","additionalProperties":{"type":"string"}}}},"ForecastAccuracyResponse":{"required":["averageVarianceCents","averageVariancePercent","currency","maxOverestimateCents","maxUnderestimateCents","periodEnd","periodStart","totalForecastDays"],"type":"object","properties":{"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"totalForecastDays":{"type":"integer","format":"int32"},"averageVarianceCents":{"type":"integer","format":"int64"},"averageVariancePercent":{"type":"number","format":"double"},"maxOverestimateCents":{"type":"integer","format":"int64"},"maxUnderestimateCents":{"type":"integer","format":"int64"},"accuracyPercent":{"type":"number","format":"double"}}},"InterestRateSensitivityResponse":{"required":["currency","date","gapCents","isAssetSensitive","niiImpactPer100BpsCents","rateSensitiveAssetsCents","rateSensitiveLiabilitiesCents"],"type":"object","properties":{"date":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"rateSensitiveAssetsCents":{"type":"integer","format":"int64"},"rateSensitiveLiabilitiesCents":{"type":"integer","format":"int64"},"gapCents":{"type":"integer","format":"int64"},"niiImpactPer100BpsCents":{"type":"integer","format":"int64"},"isAssetSensitive":{"type":"boolean"}}},"FundingGapAnalysisResponse":{"required":["buckets","cumulativeGapCents","currency","date","isPositiveGap","totalGapCents"],"type":"object","properties":{"date":{"type":"string","format":"date"},"currency":{"type":"string","enum":["USD","ZWG"]},"buckets":{"type":"array","items":{"$ref":"#/components/schemas/FundingGapBucketResponse"}},"totalGapCents":{"type":"integer","format":"int64"},"cumulativeGapCents":{"type":"integer","format":"int64"},"isPositiveGap":{"type":"boolean"}}},"FundingGapBucketResponse":{"required":["assetsCents","bucket","cumulativeGapCents","gapCents","liabilitiesCents"],"type":"object","properties":{"bucket":{"type":"string"},"assetsCents":{"type":"integer","format":"int64"},"liabilitiesCents":{"type":"integer","format":"int64"},"gapCents":{"type":"integer","format":"int64"},"cumulativeGapCents":{"type":"integer","format":"int64"}}},"PagedResponseTransactionResponse":{"required":["content","first","last","page","size","totalElements","totalPages"],"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"last":{"type":"boolean"}}},"StaffMeResponse":{"required":["approveCategories","features","readOnly","readOnlyFeatures","role"],"type":"object","properties":{"role":{"$ref":"#/components/schemas/StaffRoleRef"},"features":{"type":"array","items":{"type":"string"}},"approveCategories":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"readOnlyFeatures":{"type":"array","items":{"type":"string"}}}},"StaffRoleRef":{"required":["key","label"],"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}}},"StaffIdentityView":{"required":["createdAt","id","isActive","roleKey","username"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"username":{"type":"string"},"displayName":{"type":"string"},"roleKey":{"type":"string"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}}},"AccessAnomaliesResponse":{"required":["anomalies","basis"],"type":"object","properties":{"anomalies":{"type":"array","items":{"$ref":"#/components/schemas/AccessAnomalyResponse"}},"basis":{"$ref":"#/components/schemas/AccessAnomalyBasis"}}},"AccessAnomalyBasis":{"required":["businessDate","businessTimeZone","caveats","from","rowsScanned","source","thresholds","to"],"type":"object","properties":{"source":{"type":"string"},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"businessTimeZone":{"type":"string"},"businessDate":{"type":"string","format":"date"},"rowsScanned":{"type":"integer","format":"int64"},"thresholds":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}},"caveats":{"type":"array","items":{"type":"string"}}}},"AccessAnomalyResponse":{"required":["detail","distinctIps","firstAt","id","kind","lastAt","observations","source","subjectId","subjectLabel","subjectType"],"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["REFUSAL_BURST","OFF_HOURS_ACCESS","MULTI_IP_ACTOR"]},"subjectType":{"type":"string","enum":["STAFF_ACTOR","IP_ADDRESS"]},"subjectId":{"type":"string"},"subjectLabel":{"type":"string","description":"The staff username where one resolves, otherwise the raw identifier."},"firstAt":{"type":"string","format":"date-time"},"lastAt":{"type":"string","format":"date-time"},"observations":{"type":"integer","description":"How many audit rows this observation is built from.","format":"int64"},"distinctIps":{"type":"integer","description":"Distinct SOURCE ADDRESSES observed, not devices. Zero means the rows carried no address at all.","format":"int64"},"detail":{"type":"string"},"source":{"type":"string","description":"The table the observation was read from.","example":"public.audit_log"}}},"StatementLine":{"required":["balanceCents","balanceDecimal","glCode","glName"],"type":"object","properties":{"glCode":{"type":"string"},"glName":{"type":"string"},"balanceCents":{"type":"integer","format":"int64"},"balanceDecimal":{"type":"number"}}},"StatementOfFinancialPosition":{"required":["asOf","assets","currency","equity","isBalanced","liabilities","totalAssets","totalLiabilitiesAndEquity"],"type":"object","properties":{"asOf":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"currency":{"type":"string","enum":["USD","ZWG"]},"assets":{"$ref":"#/components/schemas/StatementSection"},"liabilities":{"$ref":"#/components/schemas/StatementSection"},"equity":{"$ref":"#/components/schemas/StatementSection"},"totalAssets":{"type":"integer","format":"int64"},"totalLiabilitiesAndEquity":{"type":"integer","format":"int64"},"isBalanced":{"type":"boolean"}}},"StatementSection":{"required":["lines","title","totalCents"],"type":"object","properties":{"title":{"type":"string"},"lines":{"type":"array","items":{"$ref":"#/components/schemas/StatementLine"}},"totalCents":{"type":"integer","format":"int64"}}},"IncomeStatement":{"required":["currency","expenses","netIncomeCents","netIncomeDecimal","periodEnd","periodStart","revenue","totalExpensesCents","totalRevenueCents"],"type":"object","properties":{"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"currency":{"type":"string","enum":["USD","ZWG"]},"revenue":{"$ref":"#/components/schemas/StatementSection"},"expenses":{"$ref":"#/components/schemas/StatementSection"},"totalRevenueCents":{"type":"integer","format":"int64"},"totalExpensesCents":{"type":"integer","format":"int64"},"netIncomeCents":{"type":"integer","format":"int64"},"netIncomeDecimal":{"type":"number"}}},"CashFlowItem":{"required":["amountCents","description"],"type":"object","properties":{"description":{"type":"string"},"amountCents":{"type":"integer","format":"int64"}}},"CashFlowSection":{"required":["items","title","totalCents"],"type":"object","properties":{"title":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CashFlowItem"}},"totalCents":{"type":"integer","format":"int64"}}},"CashFlowStatement":{"required":["closingCashCents","currency","financingActivities","investingActivities","netCashChangeCents","openingCashCents","operatingActivities","periodEnd","periodStart"],"type":"object","properties":{"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"},"branchId":{"type":"string","format":"uuid"},"currency":{"type":"string","enum":["USD","ZWG"]},"operatingActivities":{"$ref":"#/components/schemas/CashFlowSection"},"investingActivities":{"$ref":"#/components/schemas/CashFlowSection"},"financingActivities":{"$ref":"#/components/schemas/CashFlowSection"},"netCashChangeCents":{"type":"integer","format":"int64"},"openingCashCents":{"type":"integer","format":"int64"},"closingCashCents":{"type":"integer","format":"int64"}}},"AgingBandResponse":{"required":["action","amountCents","amountDecimal","count"],"type":"object","properties":{"count":{"type":"integer","format":"int32"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"action":{"type":"string"}}},"SuspenseAgingReportResponse":{"required":["band0to2Days","band16to30Days","band30PlusDays","band3to5Days","band6to15Days","byType","totalOpenAmountCents","totalOpenAmountDecimal","totalOpenItems"],"type":"object","properties":{"totalOpenItems":{"type":"integer","format":"int32"},"totalOpenAmountCents":{"type":"integer","format":"int64"},"totalOpenAmountDecimal":{"type":"number"},"band0to2Days":{"$ref":"#/components/schemas/AgingBandResponse"},"band3to5Days":{"$ref":"#/components/schemas/AgingBandResponse"},"band6to15Days":{"$ref":"#/components/schemas/AgingBandResponse"},"band16to30Days":{"$ref":"#/components/schemas/AgingBandResponse"},"band30PlusDays":{"$ref":"#/components/schemas/AgingBandResponse"},"byType":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/TypeSummaryResponse"}}}},"TypeSummaryResponse":{"required":["amountCents","amountDecimal","count"],"type":"object","properties":{"count":{"type":"integer","format":"int32"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"}}},"SuspenseItemResponse":{"required":["ageDays","agingBand","amountCents","amountDecimal","currency","id","postingDate","status","suspenseType","transactionRef"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"suspenseType":{"type":"string","enum":["ZIMSWITCH","ZETSS","ECOCASH","ONEMONEY","INNBUCKS","ATM","GENERAL"]},"transactionRef":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"amountDecimal":{"type":"number"},"currency":{"type":"string"},"postingDate":{"type":"string","format":"date"},"ageDays":{"type":"integer","format":"int32"},"status":{"type":"string","enum":["OPEN","MATCHED","CLEARED","ESCALATED","WRITTEN_OFF"]},"narrative":{"type":"string"},"agingBand":{"type":"string"}}},"DefinitionMatchRate":{"required":["batchCount","code","matchRatePercent"],"type":"object","properties":{"code":{"type":"string"},"batchCount":{"type":"integer","format":"int32"},"matchRatePercent":{"type":"number"}}},"MatchRateKpis":{"required":["byDefinition","fromDate","openExceptionAmountCents","openExceptions","openSuspenseAmountCents","openSuspenseItems","overallMatchRatePercent","targetMatchRatePercent","toDate","totalBatches"],"type":"object","properties":{"fromDate":{"type":"string","format":"date"},"toDate":{"type":"string","format":"date"},"totalBatches":{"type":"integer","format":"int32"},"overallMatchRatePercent":{"type":"number"},"targetMatchRatePercent":{"type":"number"},"openExceptions":{"type":"integer","format":"int64"},"openExceptionAmountCents":{"type":"integer","format":"int64"},"openSuspenseItems":{"type":"integer","format":"int64"},"openSuspenseAmountCents":{"type":"integer","format":"int64"},"byDefinition":{"type":"array","items":{"$ref":"#/components/schemas/DefinitionMatchRate"}}}},"BatchSummary":{"required":["batchReference","definitionCode","exceptions","matchRatePercent","matched","sourceRecords","status","targetRecords"],"type":"object","properties":{"batchReference":{"type":"string"},"definitionCode":{"type":"string"},"status":{"type":"string","enum":["PENDING","INGESTING","MATCHING","REVIEW","COMPLETED","FAILED"]},"sourceRecords":{"type":"integer","format":"int32"},"targetRecords":{"type":"integer","format":"int32"},"matched":{"type":"integer","format":"int32"},"exceptions":{"type":"integer","format":"int32"},"matchRatePercent":{"type":"number"}}},"DailyReconciliationSummary":{"required":["batchCount","batchSummaries","date","matchRatePercent","netDifferenceCents","totalExceptions","totalMatched","totalSourceAmountCents","totalSourceRecords","totalTargetAmountCents","totalTargetRecords"],"type":"object","properties":{"date":{"type":"string","format":"date"},"batchCount":{"type":"integer","format":"int32"},"totalSourceRecords":{"type":"integer","format":"int32"},"totalTargetRecords":{"type":"integer","format":"int32"},"totalMatched":{"type":"integer","format":"int32"},"totalExceptions":{"type":"integer","format":"int32"},"matchRatePercent":{"type":"number"},"totalSourceAmountCents":{"type":"integer","format":"int64"},"totalTargetAmountCents":{"type":"integer","format":"int64"},"netDifferenceCents":{"type":"integer","format":"int64"},"batchSummaries":{"type":"array","items":{"$ref":"#/components/schemas/BatchSummary"}}}},"FeeConfigResponse":{"required":["createdAt","currency","effectiveFrom","feeType","flatFeeCents","flatFeeDecimal","id","isActive","maxFeeCents","minFeeCents","paymentType","percentageBps","percentageDisplay","rule","tieredFees"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"rule":{"type":"string"},"paymentType":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"feeType":{"type":"string","enum":["FLAT","PERCENTAGE","TIERED"]},"flatFeeCents":{"type":"integer","format":"int64"},"flatFeeDecimal":{"type":"number"},"percentageBps":{"type":"integer","format":"int32"},"percentageDisplay":{"type":"string"},"minFeeCents":{"type":"integer","format":"int64"},"maxFeeCents":{"type":"integer","format":"int64"},"tieredFees":{"type":"string"},"isActive":{"type":"boolean"},"effectiveFrom":{"type":"string","format":"date"},"effectiveTo":{"type":"string","format":"date"},"createdAt":{"type":"string","format":"date-time"}}},"EffectiveFeeResponse":{"required":["amountCents","currency","feeCents","feeDecimal","paymentType"],"type":"object","properties":{"paymentType":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"amountCents":{"type":"integer","format":"int64"},"feeCents":{"type":"integer","format":"int64"},"feeDecimal":{"type":"number"},"appliedRule":{"$ref":"#/components/schemas/FeeConfigResponse"}}},"BranchScopingResponse":{"required":["branchScopingEnabled","updatedAt"],"type":"object","properties":{"branchScopingEnabled":{"type":"boolean"},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"AccountingPeriodResponse":{"required":["createdAt","id","periodDate","periodEnd","periodStart","periodType","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"periodType":{"type":"string","enum":["DAY","MONTH","QUARTER","YEAR"]},"periodDate":{"type":"string","format":"date"},"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"},"status":{"type":"string","enum":["OPEN","PROCESSING","CLOSED","REOPENED"]},"openedBy":{"type":"string","format":"uuid"},"closedBy":{"type":"string","format":"uuid"},"closedAt":{"type":"string","format":"date-time"},"notes":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"SuppressionResponse":{"required":["channel","createdAt","createdBy","customerId","id","reason"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"customerName":{"type":"string"},"channel":{"type":"string"},"reason":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"LoanScheduleResponse":{"required":["dueDate","feesCents","installmentNumber","interestCents","outstandingBalanceCents","paidInterestCents","paidPrincipalCents","principalCents","remainingCents","status","totalCents","totalDecimal"],"type":"object","properties":{"installmentNumber":{"type":"integer","format":"int32"},"dueDate":{"type":"string","format":"date"},"principalCents":{"type":"integer","format":"int64"},"interestCents":{"type":"integer","format":"int64"},"feesCents":{"type":"integer","format":"int64"},"totalCents":{"type":"integer","format":"int64"},"totalDecimal":{"type":"number"},"outstandingBalanceCents":{"type":"integer","format":"int64"},"paidPrincipalCents":{"type":"integer","format":"int64"},"paidInterestCents":{"type":"integer","format":"int64"},"remainingCents":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PARTIALLY_PAID","PAID","OVERDUE","WAIVED"]}}},"LoanChargeResponse":{"required":["amountCents","description","glCode","status","type"],"type":"object","properties":{"type":{"type":"string","enum":["PROCESSING_FEE","INSURANCE_FEE","PENALTY","INTEREST","OTHER"]},"description":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"glCode":{"type":"string"},"chargedAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["CHARGED","OUTSTANDING","PAID"]}}},"LendingPolicyConfigResponse":{"required":["accrueInterestOnDefaulted","penaltyBackfillMissedDays","updatedAt"],"type":"object","properties":{"accrueInterestOnDefaulted":{"type":"boolean"},"penaltyBackfillMissedDays":{"type":"boolean"},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"LoanProvisioningResponse":{"required":["arrearsDays","classification","collateralValueCents","createdAt","id","loanAccountId","loanNumber","netExposureCents","outstandingBalanceCents","provisionAmountCents","provisionAmountDecimal","provisionRateBps","provisioningDate","stage"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"loanAccountId":{"type":"string","format":"uuid"},"loanNumber":{"type":"string"},"provisioningDate":{"type":"string","format":"date"},"stage":{"type":"string","enum":["STAGE_1","STAGE_2","STAGE_3"]},"previousStage":{"type":"string","enum":["STAGE_1","STAGE_2","STAGE_3"]},"outstandingBalanceCents":{"type":"integer","format":"int64"},"provisionRateBps":{"type":"integer","format":"int32"},"provisionAmountCents":{"type":"integer","format":"int64"},"provisionAmountDecimal":{"type":"number"},"collateralValueCents":{"type":"integer","format":"int64"},"netExposureCents":{"type":"integer","format":"int64"},"arrearsDays":{"type":"integer","format":"int32"},"classification":{"type":"string","enum":["CURRENT","WATCH","SUBSTANDARD","DOUBTFUL","LOSS"]},"createdAt":{"type":"string","format":"date-time"}}},"ClassificationBandResponse":{"required":["classification","minDays","provisionRateBps"],"type":"object","properties":{"classification":{"type":"string"},"minDays":{"type":"integer","format":"int32"},"maxDays":{"type":"integer","format":"int32"},"provisionRateBps":{"type":"integer","format":"int32"}}},"ProvisioningConfigResponse":{"required":["bands","currentMaxDays","currentRateBps","defaultStatusAfterDays","doubtfulMaxDays","doubtfulRateBps","lossRateBps","stage1MaxDays","stage2MaxDays","substandardMaxDays","substandardRateBps","updatedAt","watchMaxDays","watchRateBps"],"type":"object","properties":{"currentMaxDays":{"type":"integer","format":"int32"},"watchMaxDays":{"type":"integer","format":"int32"},"substandardMaxDays":{"type":"integer","format":"int32"},"doubtfulMaxDays":{"type":"integer","format":"int32"},"currentRateBps":{"type":"integer","format":"int32"},"watchRateBps":{"type":"integer","format":"int32"},"substandardRateBps":{"type":"integer","format":"int32"},"doubtfulRateBps":{"type":"integer","format":"int32"},"lossRateBps":{"type":"integer","format":"int32"},"stage1MaxDays":{"type":"integer","format":"int32"},"stage2MaxDays":{"type":"integer","format":"int32"},"defaultStatusAfterDays":{"type":"integer","format":"int32"},"bands":{"type":"array","items":{"$ref":"#/components/schemas/ClassificationBandResponse"}},"updatedAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","format":"uuid"}}},"PagedResponseLoanApplicationResponse":{"required":["content","first","last","page","size","totalElements","totalPages"],"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/LoanApplicationResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"last":{"type":"boolean"}}},"InterestAccrualResponse":{"required":["accountId","accrualDate","accruedCents","accruedDecimal","balanceCents","capitalised","createdAt","id","rateBps"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"accrualDate":{"type":"string","format":"date"},"balanceCents":{"type":"integer","format":"int64"},"rateBps":{"type":"integer","format":"int32"},"accruedCents":{"type":"integer","format":"int64"},"accruedDecimal":{"type":"number"},"capitalised":{"type":"boolean"},"capitalisedAt":{"type":"string","format":"date-time"},"transactionId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"GlBudgetReportRow":{"required":["actualCents","budgetCents","currency","glCode","glName","period","varianceCents"],"type":"object","properties":{"glCode":{"type":"string"},"glName":{"type":"string"},"period":{"type":"string"},"budgetCents":{"type":"integer","format":"int64"},"actualCents":{"type":"integer","format":"int64"},"varianceCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]}}},"GlBalanceResponse":{"required":["balanceCents","balanceDecimal","code","currency","glAccountId","name","type"],"type":"object","properties":{"glAccountId":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["ASSET","LIABILITY","EQUITY","REVENUE","EXPENSE"]},"currency":{"type":"string","enum":["USD","ZWG"]},"balanceCents":{"type":"integer","format":"int64"},"balanceDecimal":{"type":"number"}}},"GlAccountStatementEntry":{"required":["creditCents","creditDecimal","debitCents","debitDecimal","description","runningBalanceCents","runningBalanceDecimal","transactionId","transactionReference","valueDate"],"type":"object","properties":{"transactionId":{"type":"string","format":"uuid"},"transactionReference":{"type":"string"},"valueDate":{"type":"string","format":"date"},"description":{"type":"string"},"debitCents":{"type":"integer","format":"int64"},"creditCents":{"type":"integer","format":"int64"},"runningBalanceCents":{"type":"integer","format":"int64"},"debitDecimal":{"type":"number"},"creditDecimal":{"type":"number"},"runningBalanceDecimal":{"type":"number"}}},"GlAccountStatementResponse":{"required":["closingBalanceCents","currency","entries","fromDate","glAccountCode","glAccountId","glAccountName","openingBalanceCents","toDate"],"type":"object","properties":{"glAccountId":{"type":"string","format":"uuid"},"glAccountCode":{"type":"string"},"glAccountName":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"fromDate":{"type":"string","format":"date"},"toDate":{"type":"string","format":"date"},"openingBalanceCents":{"type":"integer","format":"int64"},"closingBalanceCents":{"type":"integer","format":"int64"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/GlAccountStatementEntry"}}}},"ExpenseResponse":{"required":["amountCents","approvalId","categoryId","categoryName","createdAt","creditGlCode","currency","debitGlCode","id","incurredOn","makerId","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"categoryId":{"type":"string","format":"uuid"},"categoryName":{"type":"string"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"incurredOn":{"type":"string","format":"date"},"note":{"type":"string"},"creditGlCode":{"type":"string"},"status":{"type":"string","enum":["PENDING_APPROVAL","POSTED","REJECTED"]},"transactionId":{"type":"string","format":"uuid"},"makerId":{"type":"string","format":"uuid"},"checkerId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"debitGlCode":{"type":"string"},"approvalId":{"type":"string","format":"uuid"},"postedAt":{"type":"string","format":"date-time"}}},"CustomerDirectoryRow":{"required":["accountCount","createdAt","customerType","displayName","id","isPep","kycStatus","phone","riskRating","updatedAt"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerType":{"type":"string","enum":["INDIVIDUAL","CORPORATE"]},"displayName":{"type":"string"},"nationalId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"phone":{"type":"string"},"email":{"type":"string"},"kycStatus":{"type":"string","enum":["PENDING","VERIFIED","REJECTED","EXPIRED"]},"riskRating":{"type":"string","enum":["LOW","MEDIUM","HIGH","PROHIBITED"]},"isPep":{"type":"boolean"},"accountCount":{"type":"integer","format":"int64"},"corporate":{"$ref":"#/components/schemas/CorporateProfile"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"PagedResponseCustomerDirectoryRow":{"required":["content","first","last","page","size","totalElements","totalPages"],"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/CustomerDirectoryRow"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"last":{"type":"boolean"}}},"CustomerDuplicatesResponse":{"required":["groups"],"type":"object","properties":{"groups":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateGroupResponse"}}}},"DuplicateCustomerSummary":{"required":["createdAt","customerId","customerType","displayName","phone"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"customerType":{"type":"string","enum":["INDIVIDUAL","CORPORATE"]},"phone":{"type":"string"},"email":{"type":"string"},"nationalId":{"type":"string"},"registrationNumber":{"type":"string"},"homeBranchId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"DuplicateGroupResponse":{"required":["customers","groupKey","markerExplanations","markers","strength"],"type":"object","properties":{"groupKey":{"type":"string"},"markers":{"type":"array","items":{"type":"string","enum":["OFFICER_NATIONAL_ID","LEGAL_NAME","NAME_DOB","TRADING_NAME","PHONE","CONTACT_PHONE","EMAIL","BENEFICIARY_ACCOUNT"]}},"markerExplanations":{"type":"array","items":{"type":"string"}},"strength":{"type":"string","enum":["STRONG","POSSIBLE"]},"customers":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateCustomerSummary"}}}},"CustomerIncomeStream":{"required":["currency","glAccountCode","glAccountName","incomeToDateCents","postingCount"],"type":"object","properties":{"glAccountCode":{"type":"string","example":"4204"},"glAccountName":{"type":"string","example":"Loan Processing Fees"},"currency":{"type":"string","example":"USD","enum":["USD","ZWG"]},"incomeToDateCents":{"type":"integer","description":"Revenue posted to date, in cents. Not a projection.","format":"int64","example":25000},"postingCount":{"type":"integer","description":"How many posted revenue entries make up the figure","format":"int64"}}},"CustomerIncomeTotal":{"required":["currency","incomeToDateCents"],"type":"object","properties":{"currency":{"type":"string","enum":["USD","ZWG"]},"incomeToDateCents":{"type":"integer","format":"int64"}},"description":"Revenue on transactions this customer was ONE OF SEVERAL parties to. Real money the ledger cannot assign to one of them, so it is reported, never split."},"CustomerProfitabilityResponse":{"required":["asOf","basis","customerId","sharedTransactionCount","sharedTransactionIncome","streams","totals"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"asOf":{"type":"string","format":"date-time"},"basis":{"type":"string","description":"What was summed: revenue GL postings on transactions that actually posted, where this customer was the only party. No cost model, no margin, no projection.","example":"POSTED_LEDGER_REVENUE_SOLE_PARTY"},"streams":{"type":"array","items":{"$ref":"#/components/schemas/CustomerIncomeStream"}},"totals":{"type":"array","description":"Per-currency sum of `streams`. Currencies are never added together.","items":{"$ref":"#/components/schemas/CustomerIncomeTotal"}},"sharedTransactionIncome":{"type":"array","description":"Revenue on transactions this customer was ONE OF SEVERAL parties to. Real money the ledger cannot assign to one of them, so it is reported, never split.","items":{"$ref":"#/components/schemas/CustomerIncomeTotal"}},"sharedTransactionCount":{"type":"integer","description":"How many multi-party transactions the figure above came from","format":"int64"}}},"PagedResponseDocumentResponse":{"required":["content","first","last","page","size","totalElements","totalPages"],"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/DocumentResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"last":{"type":"boolean"}}},"DuplicateGroupsResponse":{"required":["groups","total"],"type":"object","properties":{"total":{"type":"integer","format":"int32"},"groups":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateGroupResponse"}}}},"TtrResponse":{"required":["amountCents","createdAt","currency","customerId","id","status","transactionDate","transactionType","ttrReference"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"ttrReference":{"type":"string"},"customerId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"transactionId":{"type":"string","format":"uuid"},"paymentOrderId":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string"},"transactionType":{"type":"string"},"transactionDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["PENDING","FILED"]},"filedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"ReportingStatistics":{"required":["averageStrProcessingDays","strsDraft","strsFiled","totalStrs","totalTtrs","ttrsFiled","ttrsPending"],"type":"object","properties":{"totalStrs":{"type":"integer","format":"int32"},"strsDraft":{"type":"integer","format":"int32"},"strsFiled":{"type":"integer","format":"int32"},"totalTtrs":{"type":"integer","format":"int32"},"ttrsPending":{"type":"integer","format":"int32"},"ttrsFiled":{"type":"integer","format":"int32"},"averageStrProcessingDays":{"type":"number","format":"double"}}},"BillPaymentResponse":{"required":["attributedAt","billerCode","customerReference","order"],"type":"object","properties":{"order":{"$ref":"#/components/schemas/PaymentOrderResponse"},"billerCode":{"type":"string"},"billerName":{"type":"string"},"customerReference":{"type":"string"},"attributedAt":{"type":"string","format":"date-time"}}},"BillerResponse":{"required":["category","code","enabled","id","kind","name","referenceLabel"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"kind":{"type":"string","enum":["BILL","AIRTIME"]},"referenceLabel":{"type":"string"},"referenceRegex":{"type":"string"},"enabled":{"type":"boolean"}}},"OwnershipValidationResponse":{"required":["customerId","hasPepOwner","isAdequate","owners","totalOwnershipPercent"],"type":"object","properties":{"customerId":{"type":"string","format":"uuid"},"totalOwnershipPercent":{"type":"number","format":"double"},"isAdequate":{"type":"boolean"},"hasPepOwner":{"type":"boolean"},"owners":{"type":"array","items":{"$ref":"#/components/schemas/BeneficialOwnerResponse"}}}},"AuditLogResponse":{"required":["action","entityId","entityType","id","performedAt","performedBy"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"entityType":{"type":"string"},"entityId":{"type":"string","format":"uuid"},"action":{"type":"string","enum":["CREATE","UPDATE","DELETE","STATE_CHANGE","READ","DENIED"]},"performedBy":{"type":"string","format":"uuid"},"performedAt":{"type":"string","format":"date-time"},"ipAddress":{"type":"string"},"oldValue":{"$ref":"#/components/schemas/JsonNode"},"newValue":{"$ref":"#/components/schemas/JsonNode"}}},"PagedResponseAuditLogResponse":{"required":["content","first","last","page","size","totalElements","totalPages"],"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"last":{"type":"boolean"}}},"AlertStatistics":{"required":["avgResolutionDays","bySeverity","strsFiled","totalEscalated","totalNew","totalOpen","totalUnderReview"],"type":"object","properties":{"totalOpen":{"type":"integer","format":"int32"},"totalNew":{"type":"integer","format":"int32"},"totalUnderReview":{"type":"integer","format":"int32"},"totalEscalated":{"type":"integer","format":"int32"},"bySeverity":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}},"avgResolutionDays":{"type":"number","format":"double"},"strsFiled":{"type":"integer","format":"int32"}}},"AgentVolume":{"required":["agentCode","agentId","cashInCents","cashInCount","cashOutCents","cashOutCount","from","to"],"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"agentCode":{"type":"string"},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"cashInCount":{"type":"integer","format":"int64"},"cashInCents":{"type":"integer","format":"int64"},"cashOutCount":{"type":"integer","format":"int64"},"cashOutCents":{"type":"integer","format":"int64"}}},"AgentStatusHistoryResponse":{"required":["fromStatus","id","performedAt","performedBy","toStatus"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"fromStatus":{"type":"string","enum":["APPLIED","APPROVED","ACTIVE","SUSPENDED","TERMINATED"]},"toStatus":{"type":"string","enum":["APPLIED","APPROVED","ACTIVE","SUSPENDED","TERMINATED"]},"reason":{"type":"string"},"approvalRequestId":{"type":"string","format":"uuid"},"performedBy":{"type":"string","format":"uuid"},"performedAt":{"type":"string","format":"date-time"}}},"AgentFloatMovementResponse":{"required":["agentId","amountCents","approvalRequestId","cashGlCode","createdAt","currency","floatAccountNumber","id","makerId","movementType","status"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"movementType":{"type":"string","enum":["TOP_UP","DRAWDOWN"]},"amountCents":{"type":"integer","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"floatAccountNumber":{"type":"string"},"cashGlCode":{"type":"string","description":"The cash account pinned when the movement was parked"},"reference":{"type":"string"},"note":{"type":"string"},"status":{"type":"string","enum":["PENDING_APPROVAL","RELEASED","REJECTED"]},"approvalRequestId":{"type":"string","format":"uuid"},"transactionId":{"type":"string","format":"uuid"},"transactionReference":{"type":"string"},"makerId":{"type":"string","format":"uuid"},"checkerId":{"type":"string","format":"uuid"},"releasedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"AgentCommissionAccrualResponse":{"required":["accruedOn","agentTransactionId","amountCents","currency","entryType","id","settled","signedCents","transactionReference"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"entryType":{"type":"string","enum":["ACCRUAL","CLAWBACK"]},"amountCents":{"type":"integer","description":"Always positive. The direction is entryType.","format":"int64"},"signedCents":{"type":"integer","description":"What this row contributes to the net owed: negative for a clawback","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"agentTransactionId":{"type":"string","format":"uuid"},"transactionReference":{"type":"string"},"accruedOn":{"type":"string","format":"date"},"settlementId":{"type":"string","format":"uuid"},"settled":{"type":"boolean"}}},"AgentFloatPosition":{"required":["agentCode","agentId","balanceCents","belowThreshold","floatAccountNumber","glCode","status","thresholdCents","thresholdIsProductMinimum","tradingName"],"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"agentCode":{"type":"string"},"tradingName":{"type":"string"},"status":{"type":"string","enum":["APPLIED","APPROVED","ACTIVE","SUSPENDED","TERMINATED"]},"floatAccountNumber":{"type":"string"},"glCode":{"type":"string"},"balanceCents":{"type":"integer","format":"int64"},"thresholdCents":{"type":"integer","format":"int64"},"belowThreshold":{"type":"boolean"},"thresholdIsProductMinimum":{"type":"boolean"}}},"AgentLimitResponse":{"required":["active","approvalRequestId","currency","customerDailyTotalMaxCents","customerPerTransactionMaxCents","dailyTotalMaxCents","effectiveFrom","id","institutionDefault","perTransactionMaxCents","transactionType"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agentId":{"type":"string","description":"Null means this is the institution default, covering every agent","format":"uuid"},"institutionDefault":{"type":"boolean"},"transactionType":{"type":"string","enum":["CASH_IN","CASH_OUT"]},"currency":{"type":"string","enum":["USD","ZWG"]},"perTransactionMaxCents":{"type":"integer","format":"int64"},"dailyTotalMaxCents":{"type":"integer","format":"int64"},"customerPerTransactionMaxCents":{"type":"integer","format":"int64"},"customerDailyTotalMaxCents":{"type":"integer","format":"int64"},"active":{"type":"boolean"},"effectiveFrom":{"type":"string","format":"date"},"effectiveTo":{"type":"string","format":"date"},"approvalRequestId":{"type":"string","format":"uuid"}}},"AgentSettlementResponse":{"required":["agentCode","agentId","checkerId","currency","floatAccountNumber","grossCommissionCents","id","periodEnd","periodStart","settledAt","transactionReference"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"agentCode":{"type":"string"},"periodStart":{"type":"string","format":"date"},"periodEnd":{"type":"string","format":"date"},"grossCommissionCents":{"type":"integer","description":"GROSS. No withholding tax is computed anywhere on this engine (MONEY 9).","format":"int64"},"currency":{"type":"string","enum":["USD","ZWG"]},"floatAccountNumber":{"type":"string"},"transactionReference":{"type":"string"},"checkerId":{"type":"string","format":"uuid"},"settledAt":{"type":"string","format":"date-time"}}},"AgentSettlementLine":{"required":["accrualRows","agentCode","agentId","currency","netCents"],"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"agentCode":{"type":"string"},"netCents":{"type":"integer","format":"int64"},"accrualRows":{"type":"integer","format":"int32"},"currency":{"type":"string","enum":["USD","ZWG"]}}},"AgentCommissionScheduleResponse":{"required":["active","approvalRequestId","commissionType","currency","effectiveFrom","flatCommissionCents","id","maxCommissionCents","minCommissionCents","percentageBps","tieredCommission","transactionType"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"transactionType":{"type":"string","enum":["CASH_IN","CASH_OUT"]},"currency":{"type":"string","enum":["USD","ZWG"]},"commissionType":{"type":"string","enum":["FLAT","PERCENTAGE","TIERED"]},"flatCommissionCents":{"type":"integer","format":"int64"},"percentageBps":{"type":"integer","format":"int32"},"minCommissionCents":{"type":"integer","format":"int64"},"maxCommissionCents":{"type":"integer","description":"Zero means NO ceiling","format":"int64"},"tieredCommission":{"type":"string"},"active":{"type":"boolean"},"effectiveFrom":{"type":"string","format":"date"},"effectiveTo":{"type":"string","format":"date"},"approvalRequestId":{"type":"string","format":"uuid"}}},"PagedResponseAccountResponse":{"required":["content","first","last","page","size","totalElements","totalPages"],"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/AccountResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"last":{"type":"boolean"}}},"AccountPassbooksResponse":{"required":["accountId","accountNumber","history"],"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"accountNumber":{"type":"string"},"active":{"$ref":"#/components/schemas/PassbookResponse"},"history":{"type":"array","description":"Every book issued on this account, newest issue first, retired ones included","items":{"$ref":"#/components/schemas/PassbookResponse"}}}},"PassbookLineResponse":{"required":["amountCents","description","reference","runningBalanceCents","transactionId","type","valueDate"],"type":"object","properties":{"transactionId":{"type":"string","format":"uuid"},"reference":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"valueDate":{"type":"string","format":"date"},"postedAt":{"type":"string","format":"date-time"},"amountCents":{"type":"integer","format":"int64"},"runningBalanceCents":{"type":"integer","format":"int64"}}},"PassbookLinesResponse":{"required":["accountId","accountNumber","closingBalanceCents","currency","lineCount","lines","openingBalanceCents","passbookId","passbookNo","status"],"type":"object","properties":{"passbookId":{"type":"string","format":"uuid"},"passbookNo":{"type":"string"},"accountId":{"type":"string","format":"uuid"},"accountNumber":{"type":"string"},"currency":{"type":"string","enum":["USD","ZWG"]},"status":{"type":"string","enum":["ACTIVE","LOST","CLOSED"]},"openingBalanceCents":{"type":"integer","description":"Balance as at the print cursor: everything already printed into this book","format":"int64"},"closingBalanceCents":{"type":"integer","description":"Balance after the last unprinted line. Equals the account ledger balance when the lines run to the end.","format":"int64"},"lineCount":{"type":"integer","format":"int32"},"cursorTransactionId":{"type":"string","description":"Send this back on print-confirm. Null when there is nothing to print.","format":"uuid"},"lines":{"type":"array","items":{"$ref":"#/components/schemas/PassbookLineResponse"}}}},"AccountReconciliationResponse":{"required":["agreeing","balanced","derivedAgreeing","disagreeing","rows","totalAccounts","totalLedgerCents"],"type":"object","properties":{"totalAccounts":{"type":"integer","format":"int32"},"agreeing":{"type":"integer","format":"int32"},"disagreeing":{"type":"integer","format":"int32"},"balanced":{"type":"boolean"},"derivedAgreeing":{"type":"integer","format":"int32"},"totalLedgerCents":{"type":"integer","format":"int64"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/AccountReconciliationRow"}}}},"AccountReconciliationRow":{"required":["accountId","accountNumber","agrees","derivedAgrees","derivedCents","ledgerCents","storedCents"],"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"accountNumber":{"type":"string"},"storedCents":{"type":"integer","format":"int64"},"ledgerCents":{"type":"integer","format":"int64"},"derivedCents":{"type":"integer","format":"int64"},"agrees":{"type":"boolean"},"derivedAgrees":{"type":"boolean"}}},"SuppressionRemovedResponse":{"required":["channel","customerId","effect","id","reason","removedAt","removedBy"],"type":"object","properties":{"id":{"type":"string","format":"uuid"},"customerId":{"type":"string","format":"uuid"},"channel":{"type":"string"},"reason":{"type":"string"},"removedBy":{"type":"string","format":"uuid"},"removedAt":{"type":"string","format":"date-time"},"effect":{"type":"string"}}}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","description":"API key for authentication. Include in X-API-Key header. Generate keys via POST /v1/api-keys (requires admin scope). Keys use SHA-256 hashing and support scoped access (read, write, admin) with per-key rate limiting.","name":"X-API-Key","in":"header"}}}}