Download OpenAPI specification:
Bounded-context REST surface (BIAN-aligned). The contract behind admin-portal src/lib/types.ts.
Beneficiary registry for funds transfers. A beneficiary is a saved destination account (internal or external) that a party can reuse across outbound transfers. Reads require transfer:read; creating, updating, activating, deactivating, or deleting a beneficiary requires transfer:operate.
Returns all saved beneficiaries. When ownerPartyId is supplied only beneficiaries belonging to that party are returned; omitting it returns the full registry (staff view).
| ownerPartyId | string <uuid> Filter to beneficiaries owned by this party; omit to list all |
[- {
- "accountNumber": "string",
- "active": true,
- "bankCode": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "currency": "string",
- "internalAccountId": "e408f878-4fac-40bb-8bdc-8640840744e2",
- "name": "string",
- "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "rail": "string",
- "type": "string"
}
]Creates a new beneficiary record for a party and returns its generated id (HTTP 201). The beneficiary starts in ACTIVE status and is immediately available for use in transfer instructions. Requires transfer:operate.
| anchor | string |
| beneficiaryId required | string <uuid> |
| frequency | string |
| name | string |
| settlementAccountId required | string <uuid> |
| settlementDay | integer <int32> |
| whtTaxClass | string |
{- "anchor": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "frequency": "string",
- "name": "string",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementDay": 0,
- "whtTaxClass": "string"
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Permanently removes a beneficiary from the registry. This is a hard delete — the record cannot be recovered. Pending or historical transfer instructions that referenced this beneficiary are not affected. Returns 204 No Content. Requires transfer:operate.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Replaces the mutable fields of an existing beneficiary (account details, alias, etc.). Returns 204 No Content on success. The beneficiary's status and owner are not changed by this operation. Requires transfer:operate.
| id required | string <uuid> |
| anchor | string |
| beneficiaryId required | string <uuid> |
| frequency | string |
| name | string |
| settlementAccountId required | string <uuid> |
| settlementDay | integer <int32> |
| whtTaxClass | string |
{- "anchor": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "frequency": "string",
- "name": "string",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementDay": 0,
- "whtTaxClass": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Returns an INACTIVE beneficiary to ACTIVE status so it can be used in transfer instructions again. Returns 204 No Content. Idempotent-safe if the beneficiary is already active. Requires transfer:operate.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Moves a beneficiary to INACTIVE status so it cannot be used as a transfer destination. Returns 204 No Content. Idempotent-safe if the beneficiary is already inactive. Requires transfer:operate.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}AML/CFT watchlist management and subject screening. The watchlist holds sanctioned or high-risk party references that trigger alerts during onboarding and transaction processing. Screening runs a subject reference against the active watchlist and records a result that must be disposed (confirmed hit or cleared) by an authorised compliance officer before the related workflow can proceed. No permission model is enforced at this layer — callers are expected to be internal services or staff with appropriate access configured upstream.
Returns all screening results, or filters to those for a specific subject reference when subjectRef is supplied. Results include match details and disposition status (PENDING, CONFIRMED_HIT, CLEARED). Useful for compliance dashboards and audit trails.
| subjectRef | string Optional subject reference to filter results; returns all results when omitted |
[- {
- "dispositionNote": "string",
- "dispositionedAt": "string",
- "dispositionedBy": "string",
- "hits": [
- {
- "listType": "string",
- "matchedName": "string",
- "score": 0,
- "watchlistEntryId": "1082a4a9-23b6-430a-9c3f-c875ca1bff8c"
}
], - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "passed": true,
- "screenedAt": "string",
- "status": "string",
- "subjectName": "string",
- "subjectRef": "string",
- "threshold": 0
}
]Runs the supplied subject reference against all active watchlist entries and records the result. Returns the new ScreeningResultView at HTTP 201, including match details and an initial disposition status of PENDING. The screening result must be disposed (see POST /screenings/{id}/disposition) before the originating workflow can be unblocked.
| name | string |
| subjectRef | string |
| threshold | integer <int32> |
{- "name": "string",
- "subjectRef": "string",
- "threshold": 0
}{- "dispositionNote": "string",
- "dispositionedAt": "string",
- "dispositionedBy": "string",
- "hits": [
- {
- "listType": "string",
- "matchedName": "string",
- "score": 0,
- "watchlistEntryId": "1082a4a9-23b6-430a-9c3f-c875ca1bff8c"
}
], - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "passed": true,
- "screenedAt": "string",
- "status": "string",
- "subjectName": "string",
- "subjectRef": "string",
- "threshold": 0
}Returns a single screening result by its id, including match details and current disposition. Returns 404 if not found.
| id required | string <uuid> |
{- "dispositionNote": "string",
- "dispositionedAt": "string",
- "dispositionedBy": "string",
- "hits": [
- {
- "listType": "string",
- "matchedName": "string",
- "score": 0,
- "watchlistEntryId": "1082a4a9-23b6-430a-9c3f-c875ca1bff8c"
}
], - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "passed": true,
- "screenedAt": "string",
- "status": "string",
- "subjectName": "string",
- "subjectRef": "string",
- "threshold": 0
}Records the compliance officer's disposition decision on a PENDING screening result. When confirmed=true the result transitions to CONFIRMED_HIT (a genuine match, triggering downstream escalation); when confirmed=false it transitions to CLEARED (a false positive, unblocking the originating workflow). The by and note parameters are recorded in the audit trail. Returns the updated ScreeningResultView. Disposing an already-disposed result overwrites the previous decision — intended for correction workflows only.
| id required | string <uuid> |
| confirmed required | boolean true to confirm a genuine watchlist hit; false to clear as a false positive |
| by required | string Identity of the compliance officer recording the disposition |
| note | string Optional free-text rationale for the disposition decision |
{- "dispositionNote": "string",
- "dispositionedAt": "string",
- "dispositionedBy": "string",
- "hits": [
- {
- "listType": "string",
- "matchedName": "string",
- "score": 0,
- "watchlistEntryId": "1082a4a9-23b6-430a-9c3f-c875ca1bff8c"
}
], - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "passed": true,
- "screenedAt": "string",
- "status": "string",
- "subjectName": "string",
- "subjectRef": "string",
- "threshold": 0
}Returns all watchlist entries (both active and deactivated), ordered by creation time.
[- {
- "active": true,
- "aliases": [
- "string"
], - "country": "string",
- "externalRef": "string",
- "fullName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "listType": "string",
- "source": "string"
}
]Creates a new active watchlist entry for a sanctioned or high-risk subject reference. Returns the persisted entry at HTTP 201. The entry is immediately visible to subsequent screenings — no publish delay. Duplicate entries for the same subject reference are not deduplicated by this endpoint; callers should check the list first if uniqueness matters.
| aliases | Array of strings |
| country | string |
| externalRef | string |
| fullName required | string non-empty |
| listType required | string non-empty |
| source | string |
{- "aliases": [
- "string"
], - "country": "string",
- "externalRef": "string",
- "fullName": "string",
- "listType": "string",
- "source": "string"
}{- "active": true,
- "aliases": [
- "string"
], - "country": "string",
- "externalRef": "string",
- "fullName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "listType": "string",
- "source": "string"
}Marks the watchlist entry as inactive so it is no longer matched during future screenings. The entry record is retained for audit purposes. Returns 204 No Content on success. Deactivating an already-inactive entry is a no-op and still returns 204.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Manages the set of applicability rules that determine which charges apply to which products, transaction types, or customer segments. Reads are open to authenticated users; creating, replacing, or removing rules requires the pricing:manage authority.
Returns all configured charge applicability rules. No authority required beyond authentication.
[- {
- "active": true,
- "amountFrom": 0,
- "amountTo": 0,
- "bearerOverride": "string",
- "channel": "string",
- "chargeCode": "string",
- "currency": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "overrideAmount": 0,
- "overrideGlPurpose": "string",
- "overrideRate": 0,
- "overrideTaxClass": "string",
- "priority": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "transactionCode": "string"
}
]Creates a new applicability rule that links a charge definition to a target scope (product type, transaction type, or segment). Requires pricing:manage authority. Returns the generated rule id. Not idempotent — submitting the same payload twice creates two rules.
| amountFrom | number |
| amountTo | number |
| bearerOverride | string |
| channel | string |
| chargeCode required | string non-empty |
| currency | string |
| overrideAmount | number |
| overrideGlPurpose | string |
| overrideRate | number |
| overrideTaxClass | string |
| priority | integer <int32> |
| productId | string <uuid> |
| transactionCode required | string non-empty |
{- "amountFrom": 0,
- "amountTo": 0,
- "bearerOverride": "string",
- "channel": "string",
- "chargeCode": "string",
- "currency": "string",
- "overrideAmount": 0,
- "overrideGlPurpose": "string",
- "overrideRate": 0,
- "overrideTaxClass": "string",
- "priority": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "transactionCode": "string"
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Permanently removes the applicability rule with the given id. Once deleted, the associated charge will no longer be applied to the previously targeted scope. Requires pricing:manage authority. Returns 204 on success.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Fully replaces an existing applicability rule identified by id. All fields are overwritten from the request body. Requires pricing:manage authority. Returns 204 on success, 404 if the rule does not exist.
| id required | string <uuid> |
| amountFrom | number |
| amountTo | number |
| bearerOverride | string |
| channel | string |
| chargeCode required | string non-empty |
| currency | string |
| overrideAmount | number |
| overrideGlPurpose | string |
| overrideRate | number |
| overrideTaxClass | string |
| priority | integer <int32> |
| productId | string <uuid> |
| transactionCode required | string non-empty |
{- "amountFrom": 0,
- "amountTo": 0,
- "bearerOverride": "string",
- "channel": "string",
- "chargeCode": "string",
- "currency": "string",
- "overrideAmount": 0,
- "overrideGlPurpose": "string",
- "overrideRate": 0,
- "overrideTaxClass": "string",
- "priority": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "transactionCode": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Cash-desk operations: till lifecycle, cash deposits/withdrawals and vault funding (staff/teller). Movements at or below the configured auto-limit post immediately (200 OK with the updated till/vault). Movements above the limit are parked for maker-checker review (202 Accepted with an approvalId); the command is replayed from the approval payload when a checker approves. Reads and basic cash operations require teller:operate; till open/close requires teller:till; vault funding requires teller:vault.
Credits a customer's account and increases the till's cash balance by the deposited amount. If the amount is at or below the auto-approval limit, the deposit posts immediately and the updated till is returned (200 OK). If it exceeds the limit the command is parked for maker-checker review and 202 Accepted is returned with an approvalId — the deposit posts when a checker approves.
| accountId required | string <uuid> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryId | string <uuid> |
| narrative | string |
| tillId required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "narrative": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522"
}{ }Debits a customer's account and decreases the till's cash balance by the withdrawn amount. If the amount is at or below the auto-approval limit, the withdrawal posts immediately and the updated till is returned (200 OK). If it exceeds the limit the command is parked for maker-checker review and 202 Accepted is returned with an approvalId — the withdrawal posts when a checker approves.
| accountId required | string <uuid> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryId | string <uuid> |
| narrative | string |
| tillId required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "narrative": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522"
}{ }[- {
- "branchCode": "string",
- "cashBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "status": "string",
- "teller": "string",
- "tillCode": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522"
}
]Opens a new till for a teller session. The till starts with the opening float declared in the command and transitions to OPEN status. Returns the created till with 201 Created. Requires teller:till authority.
| branchCode required | string non-empty |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| teller required | string non-empty |
| tillCode required | string non-empty |
{- "branchCode": "string",
- "openingFloat": {
- "amount": 1200,
- "currency": "USD"
}, - "teller": "string",
- "tillCode": "string"
}{- "branchCode": "string",
- "cashBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "status": "string",
- "teller": "string",
- "tillCode": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522"
}Returns the till with its current balance, status and assigned teller, or 404 if not found.
| id required | string <uuid> |
{- "branchCode": "string",
- "cashBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "status": "string",
- "teller": "string",
- "tillCode": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522"
}Closes an OPEN till, finalising the teller session. The till transitions to CLOSED and its closing balance is recorded. Returns the updated till. Requires teller:till authority.
| id required | string <uuid> |
{- "branchCode": "string",
- "cashBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "status": "string",
- "teller": "string",
- "tillCode": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522"
}Returns all cash movements (deposits and withdrawals) recorded against the specified till, in chronological order.
| id required | string <uuid> |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "narrative": "string",
- "teller": "string",
- "tillId": "19818646-df1d-4c99-b178-4fe04bb8d522",
- "type": "string"
}
]Transfers cash into a vault (e.g. from a till or external source), increasing its balance. If the amount is at or below the auto-approval limit, the funding posts immediately and the updated vault list is returned (200 OK). If it exceeds the limit the command is parked for maker-checker review and 202 Accepted is returned with an approvalId — the funding posts when a checker approves. Requires teller:vault authority.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| branchCode required | string non-empty |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "branchCode": "string"
}{ }Revolving card-loan accounts — the billing facility that backs CREDIT cards. Each account carries a credit limit, a current balance, an accrued-interest ledger, and a statement cycle. Payments post immediately and reduce the outstanding balance. Statements are generated at cycle-end and drive minimum-payment obligations. Reads require card:read; all state-changing operations require card:operate.
Returns every revolving card-loan account with its credit limit, outstanding balance, status, and linked card reference.
[- {
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
]Creates a new revolving card-loan account with the supplied credit limit and billing-cycle parameters. The account starts in an OPEN/ACTIVE state and can immediately be linked to a CREDIT card via the card-issuing context. Returns 201 with the newly created account view.
| cardholderPartyId required | string <uuid> |
| cashAdvanceApr | number |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| cycleDay | integer <int32> |
| gracePeriodDays | integer <int32> |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| minDuePercent | number |
| penaltyApr | number |
| productId | string <uuid> |
| purchaseApr | number |
{- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceApr": 0,
- "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "cycleDay": 0,
- "gracePeriodDays": 0,
- "minDueFloor": {
- "amount": 1200,
- "currency": "USD"
}, - "minDuePercent": 0,
- "penaltyApr": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "purchaseApr": 0
}{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Returns one card-loan account, or 404 if no account has that id.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Suspends the account so the linked card declines all authorizations (lost/stolen/fraud/risk hold). The balance and statements remain intact; payments can still be received.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Permanently closes the card-loan account (terminal state). The outstanding balance must be settled separately; a closed account cannot be reopened. The linked card is also expected to be closed via the card-issuing context.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Replaces the credit limit on the card-loan account. If the new limit is lower than the current outstanding balance, the account becomes over-limit but no forced repayment is triggered — subsequent authorizations on the linked card will decline until the balance is brought within the new limit.
| id required | string <uuid> |
additional property | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
{- "property1": {
- "amount": 1200,
- "currency": "USD"
}, - "property2": {
- "amount": 1200,
- "currency": "USD"
}
}{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Applies a customer payment to the card-loan account, reducing the outstanding balance. The payment is posted immediately as a credit entry on the billing ledger. Overpayments are allowed and result in a credit balance. Partial payments reduce the balance without clearing the full amount due.
| id required | string <uuid> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| fromDepositAccountId required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "fromDepositAccountId": "1b7c4a5f-1f31-4b73-ad90-6fd138b5ea95"
}{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Returns all billing statements generated for the given card-loan account, ordered by statement date. Each statement captures the closing balance, minimum payment due, and due date for that cycle.
| id required | string <uuid> |
[- {
- "cardLoanAccountId": "1c19e2fc-3c89-49ce-b72c-6ca9c7249a6f",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "cycleFrom": "string",
- "cycleTo": "string",
- "generatedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "interestCharged": {
- "amount": 1200,
- "currency": "USD"
}, - "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "paymentDueDate": "string",
- "reference": "string"
}
]Lifts a block, returning the account to its prior active state so the linked card can authorize again.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Card issuing, lifecycle and read models (staff/operations). A card's funding type determines where its spend lands: DEBIT → a deposit account, CREDIT → a revolving card-loan line, PREPAID → a stored-value balance. The PAN is never stored — only a surrogate token + last4. Reads require card:read; mutations require card:operate.
Returns every issued card with its type, status, funding account and limits.
[- {
- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}
]Issues a card against a funding account and a limit set (single-transaction / daily / ATM caps). The funding account must be a deposit account for DEBIT, a card-loan account for CREDIT, or a prepaid stored-value account for PREPAID. The card starts ISSUED and must be activated before use.
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| cardholderPartyId required | string <uuid> |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| expiry | string <date> |
| fundingAccountId required | string <uuid> |
| last4 | string |
| network | string |
| productId | string <uuid> |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| type required | string |
{- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "2019-08-24",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "type": "string"
}{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Daily netted settlement batches produced by the EOD card-settlement step (scheme-clearing reclass).
[- {
- "currency": "string",
- "cycleDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "itemCount": 0,
- "netAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "scheme": "string",
- "settledAt": "string",
- "settledEntryId": "5925a7fa-1244-40be-88e7-6acab8cdfae9",
- "status": "string"
}
]All cleared card transactions (the posted side of captures), with their settlement batch once settled.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "authorizationId": "fd01ce3c-0799-43be-b4cd-b95dd107d4d8",
- "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "channel": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "merchant": "string",
- "presentmentDate": "string",
- "reference": "string",
- "settlementBatchId": "4d097f96-5c46-47b0-9fb6-a44a590557dd",
- "status": "string",
- "type": "string"
}
]Returns one card, or 404 if no card has that id.
| id required | string <uuid> Card id |
{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Moves an ISSUED card to ACTIVATED so it can authorize. Idempotent-safe on an already-active card.
| id required | string <uuid> |
{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Suspends an active card (lost/stolen/fraud/risk). Blocked cards decline all authorizations until unblocked.
| id required | string <uuid> |
{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Permanently closes a card (terminal state). A closed card cannot be reactivated.
| id required | string <uuid> |
{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Replaces the card's limit set — single-transaction cap, daily amount cap, and ATM daily cap — applied on the next authorization.
| id required | string <uuid> |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
{- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}
}{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Returns a BLOCKED card to ACTIVATED so it can authorize again.
| id required | string <uuid> |
{- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}Anti-Money Laundering (AML) case management — creation, investigation lifecycle and closure. Cases are raised against a party and linked to one or more alert identifiers. A case moves through OPEN → INVESTIGATING → CLOSED. Reads require aml:read; all state-mutating operations require aml:operate.
Returns every AML case regardless of status, ordered by creation time descending.
[- {
- "alertIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "caseId": "af51d69f-996a-4891-a745-aadfcdec225a",
- "createdAt": "string",
- "notes": "string",
- "outcome": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "reference": "string",
- "status": "string"
}
]Creates a new AML case in OPEN status for the given party, linked to the supplied alert ids. The partyId must reference an existing CIF party. At least one alertId is expected but not enforced at the API layer. Returns 201 with the newly created CaseView.
| property name* additional property | any |
{- "property1": null,
- "property2": null
}{- "alertIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "caseId": "af51d69f-996a-4891-a745-aadfcdec225a",
- "createdAt": "string",
- "notes": "string",
- "outcome": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "reference": "string",
- "status": "string"
}Returns one AML case with its linked alert ids and current status, or 404 if not found.
| id required | string <uuid> |
{- "alertIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "caseId": "af51d69f-996a-4891-a745-aadfcdec225a",
- "createdAt": "string",
- "notes": "string",
- "outcome": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "reference": "string",
- "status": "string"
}Closes an OPEN or INVESTIGATING case (terminal state). Requires an outcome (e.g. SAR_FILED, NO_ACTION, FALSE_POSITIVE) and optional closure notes. A closed case cannot be re-opened. Returns 204 No Content on success.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Transitions an OPEN case to INVESTIGATING status, recording optional investigator notes. The request body is optional; if supplied, the notes field is persisted against the case. Returns 204 No Content on success.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Cheque and payment-instrument clearing: outward items (bank presents to clearing house), inward items (clearing house delivers to bank), clearing sessions, net settlement positions, and clearing house registry. Covers the full item lifecycle — PENDING → CLEARED / RETURNED — plus end-of-day net settlement finalisation per house and business date. Reads require clearing:read; all state-changing operations require clearing:operate.
Returns the uncleared (float) balance for the given account — the total value of outward items that have been entered but not yet cleared or returned. Float represents funds not yet available for value-dating.
| accountId required | string <uuid> Deposit account whose uncleared float is being queried |
{- "property1": {
- "amount": 1200,
- "currency": "USD"
}, - "property2": {
- "amount": 1200,
- "currency": "USD"
}
}Returns all registered clearing houses (e.g. CTS, RTGS) with their scheme and float-day configuration.
[- {
- "active": true,
- "code": "string",
- "floatDays": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "scheme": "string"
}
]Upserts a clearing house record by code. If a house with that code already exists its name, scheme, and float-day configuration are updated; otherwise a new house is created. Body fields: code (required), name (required), scheme (default CTS), floatDays (default 2). Requires clearing:operate.
| property name* additional property | any |
{- "property1": null,
- "property2": null
}{- "active": true,
- "code": "string",
- "floatDays": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "scheme": "string"
}Returns every clearing item (outward and inward) regardless of status or session.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "customerAccountId": "d8c60791-7301-441c-98e8-5bea9a162d9b",
- "direction": "string",
- "drawerBank": "string",
- "holdId": "05363803-5510-4d71-8d1f-307021f9ad73",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "instrumentType": "string",
- "presentmentDate": "string",
- "reference": "string",
- "returnReasonCode": "string",
- "serial": "string",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "state": "string",
- "valueDate": "string"
}
]Records a new inward clearing item — an instrument received from the clearing house drawn on this bank's customer. The item starts in PENDING status awaiting a pay or return decision before the session closes. Requires clearing:operate.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| clearingHouseCode | string |
| customerAccountId required | string <uuid> |
| drawerBank | string |
| idempotencyKey | string |
| instrumentType | string |
| serial | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "clearingHouseCode": "string",
- "customerAccountId": "d8c60791-7301-441c-98e8-5bea9a162d9b",
- "drawerBank": "string",
- "idempotencyKey": "string",
- "instrumentType": "string",
- "serial": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "customerAccountId": "d8c60791-7301-441c-98e8-5bea9a162d9b",
- "direction": "string",
- "drawerBank": "string",
- "holdId": "05363803-5510-4d71-8d1f-307021f9ad73",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "instrumentType": "string",
- "presentmentDate": "string",
- "reference": "string",
- "returnReasonCode": "string",
- "serial": "string",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "state": "string",
- "valueDate": "string"
}Records a new outward clearing item — an instrument (e.g. cheque) presented by this bank to the clearing house for collection from a drawee bank. The item starts in PENDING status and is held as float against the presenting account until cleared or returned. Requires clearing:operate.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| clearingHouseCode | string |
| customerAccountId required | string <uuid> |
| drawerBank | string |
| idempotencyKey | string |
| instrumentType | string |
| serial | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "clearingHouseCode": "string",
- "customerAccountId": "d8c60791-7301-441c-98e8-5bea9a162d9b",
- "drawerBank": "string",
- "idempotencyKey": "string",
- "instrumentType": "string",
- "serial": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "customerAccountId": "d8c60791-7301-441c-98e8-5bea9a162d9b",
- "direction": "string",
- "drawerBank": "string",
- "holdId": "05363803-5510-4d71-8d1f-307021f9ad73",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "instrumentType": "string",
- "presentmentDate": "string",
- "reference": "string",
- "returnReasonCode": "string",
- "serial": "string",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "state": "string",
- "valueDate": "string"
}Returns a single clearing item, or 404 if no item exists with that id.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "customerAccountId": "d8c60791-7301-441c-98e8-5bea9a162d9b",
- "direction": "string",
- "drawerBank": "string",
- "holdId": "05363803-5510-4d71-8d1f-307021f9ad73",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "instrumentType": "string",
- "presentmentDate": "string",
- "reference": "string",
- "returnReasonCode": "string",
- "serial": "string",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "state": "string",
- "valueDate": "string"
}Marks an outward item as CLEARED — the drawee bank has honoured it. This transitions the item from float to a realised credit on the presenting account. Requires clearing:operate.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Approves and pays a pending inward item — debits the drawee's account and marks the item CLEARED. The debit posting is created as a side effect. Must be called before the clearing session closes. Requires clearing:operate.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Marks an outward item as RETURNED with a reason code (e.g. REFER_TO_DRAWER, ACCOUNT_CLOSED).
The float held against the presenting account is released without a credit.
Body: { "reasonCode": "" } — defaults to UNSPECIFIED if omitted.
Requires clearing:operate.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Dishonours a pending inward item and sends it back to the clearing house with a reason
code (e.g. INSUFFICIENT_FUNDS, SIGNATURE_IRREGULAR). No debit is posted; the item is
marked RETURNED.
Body: { "reasonCode": "" } — defaults to UNSPECIFIED if omitted.
Requires clearing:operate.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Returns all clearing sessions, each representing one exchange cycle with a clearing house.
[- {
- "businessDate": "string",
- "clearingHouseId": "b9e6a375-238f-4c53-a94d-2f9ceef3dcf0",
- "currency": "string",
- "direction": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "reference": "string",
- "sessionType": "string",
- "state": "string",
- "valueDate": "string"
}
]Runs end-of-day net settlement for the specified clearing house and business date. Aggregates all cleared items to produce a net position (debit or credit against the settlement account) and records a SettlementPosition. Should be called once per house per business day after all items are cleared or returned. Query params: house (clearing house code), businessDate (ISO-8601 date, e.g. 2026-06-30). Requires clearing:operate.
| house required | string Clearing house code (e.g. CTS, RTGS) |
| businessDate required | string ISO-8601 business date for which settlement is finalised (e.g. 2026-06-30) |
{- "currency": "string",
- "finality": "string",
- "grossCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "grossDebits": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "netAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "settledAt": "string",
- "settledEntryId": "5925a7fa-1244-40be-88e7-6acab8cdfae9"
}Returns the bank's net settlement positions across all clearing houses and business dates, covering both finalized and pending settlements.
[- {
- "currency": "string",
- "finality": "string",
- "grossCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "grossDebits": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "netAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "settledAt": "string",
- "settledEntryId": "5925a7fa-1244-40be-88e7-6acab8cdfae9"
}
]Commission and fee-structure catalogue used by the pricing engine when calculating charges on transactions, loans, and other products. Each commission is identified by a unique code and carries rate/amount rules that the pricing engine resolves at charge time. Reads are open to authenticated users; create, update, activate and deactivate require the pricing:manage authority.
Returns every commission definition in the catalogue, regardless of status.
[- {
- "active": true,
- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}
]Creates a new commission definition and returns it as ACTIVE. The commission code must be unique across the catalogue; submitting a duplicate code is a validation error. Requires pricing:manage authority.
| amount | number |
| base | string |
| beneficiaryType | string |
| category | string |
| commissionCode required | string non-empty |
| expenseGlCode required | string non-empty |
| maxAmount | number |
| method required | string non-empty |
| minAmount | number |
| name required | string non-empty |
| payableGlCode required | string non-empty |
| rate | number |
{- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}{- "active": true,
- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}Returns the commission definition identified by the given code, or 404 if no such commission exists.
| code required | string Unique commission code (e.g. TRANSFER_FEE) |
{- "active": true,
- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}Replaces all mutable fields of the commission identified by code (rate, amount rules, description, etc.). The code itself is immutable. Changes take effect on the next pricing-engine resolution; in-flight charges already computed are not retroactively affected. Returns the updated commission view. Requires pricing:manage authority.
| code required | string Unique commission code to update |
| amount | number |
| base | string |
| beneficiaryType | string |
| category | string |
| commissionCode required | string non-empty |
| expenseGlCode required | string non-empty |
| maxAmount | number |
| method required | string non-empty |
| minAmount | number |
| name required | string non-empty |
| payableGlCode required | string non-empty |
| rate | number |
{- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}{- "active": true,
- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}Returns an INACTIVE commission to ACTIVE status so it is again eligible for pricing-engine resolution. Idempotent-safe when the commission is already active. Requires pricing:manage authority.
| code required | string Unique commission code to activate |
{- "active": true,
- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}Transitions the commission to INACTIVE status. An inactive commission is excluded from pricing-engine resolution so new charges will not reference it. Already-posted charges that referenced this commission are unaffected. Requires pricing:manage authority.
| code required | string Unique commission code to deactivate |
{- "active": true,
- "amount": 0,
- "base": "string",
- "beneficiaryType": "string",
- "category": "string",
- "commissionCode": "string",
- "expenseGlCode": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "payableGlCode": "string",
- "rate": 0
}Branch master — bank-wide reference data identifying physical and virtual branches. Branches are referenced by parties, accounts, and loans but are not scoped to those entities; any authenticated staff member may read the directory (needed to resolve branch names for display). Creating, renaming, or deactivating a branch requires the reference:manage authority.
Returns every branch in the bank's directory (active and inactive), ordered by code. No pagination — the branch list is expected to be small.
[- {
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "code": "string",
- "name": "string",
- "status": "string"
}
]Creates a new branch with the supplied code and name. The branch id is server-assigned and returned in the 201 response body. Requires reference:manage. The code must be unique across the branch directory; duplicate codes will be rejected.
| code required | string non-empty |
| name required | string non-empty |
{- "code": "string",
- "name": "string"
}{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "code": "string",
- "name": "string",
- "status": "string"
}Returns a single branch by its UUID, or 404 if no branch with that id exists.
| id required | string <uuid> |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "code": "string",
- "name": "string",
- "status": "string"
}Updates the branch's code and/or display name without changing its id. Because all downstream references (parties, accounts, loans) store the branch id, renaming is safe and does not require cascading updates. Requires reference:manage.
| id required | string <uuid> |
| code required | string non-empty |
| name required | string non-empty |
{- "code": "string",
- "name": "string"
}{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "code": "string",
- "name": "string",
- "status": "string"
}Marks a branch as inactive so it no longer appears in active-branch lookups or can be assigned to new entities. Existing references to the branch id remain valid. The branch can be inspected but cannot be re-activated via this API. Requires reference:manage.
| id required | string <uuid> |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "code": "string",
- "name": "string",
- "status": "string"
}Notification dispatch, template management and per-party channel preferences. The engine sends transactional messages (email, SMS, push, in-app) triggered by domain events or direct API calls. Outbound messages queue in an outbox and are flushed by the dispatch job. Reads require notification:read; all mutations (send, template upsert, preference update, dispatch run) require notification:operate.
Returns the most recent inbound and outbound notifications across all parties and channels.
[- {
- "attempts": 0,
- "body": "string",
- "category": "string",
- "channel": "string",
- "correlationRef": "string",
- "createdAt": "string",
- "eventType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastError": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "recipient": "string",
- "sentAt": "string",
- "status": "string",
- "subject": "string"
}
]Enqueues one or more notifications for the channels specified in the command. Each notification is written to the outbox and will be delivered on the next dispatch run (or immediately if auto-dispatch is enabled). Returns the created notification views including their initial PENDING status.
| category required | string |
| correlationRef | string |
| eventType required | string |
object | |
| partyId required | string <uuid> |
{- "category": "string",
- "correlationRef": "string",
- "eventType": "string",
- "params": {
- "property1": "string",
- "property2": "string"
}, - "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}[- {
- "attempts": 0,
- "body": "string",
- "category": "string",
- "channel": "string",
- "correlationRef": "string",
- "createdAt": "string",
- "eventType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastError": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "recipient": "string",
- "sentAt": "string",
- "status": "string",
- "subject": "string"
}
]Triggers an immediate dispatch cycle that attempts to deliver all PENDING outbox notifications via their respective channel adapters (email relay, SMS gateway, push broker, etc.). Returns the number of delivery attempts made. Idempotent — safe to call even when the outbox is empty.
{- "property1": 0,
- "property2": 0
}Returns notifications that are pending dispatch — queued in the outbox but not yet delivered. Use this to inspect the delivery backlog before or after triggering a dispatch run.
[- {
- "attempts": 0,
- "body": "string",
- "category": "string",
- "channel": "string",
- "correlationRef": "string",
- "createdAt": "string",
- "eventType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastError": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "recipient": "string",
- "sentAt": "string",
- "status": "string",
- "subject": "string"
}
]Creates or replaces a single channel-preference entry for the party identified in the command body. A party's preference determines whether a given event category is delivered over a specific channel (opt-in / opt-out). Returns the full updated preference list for that party after the change is applied.
| category required | string |
| channel required | string |
| enabled | boolean |
| partyId required | string <uuid> |
{- "category": "string",
- "channel": "string",
- "enabled": true,
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}[- {
- "category": "string",
- "channel": "string",
- "enabled": true,
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}
]Returns all notification channel preferences registered for the given party — which channels (email, SMS, push) are opted in or out per event category.
| partyId required | string <uuid> Party (customer or staff member) whose preferences to retrieve |
[- {
- "category": "string",
- "channel": "string",
- "enabled": true,
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}
]Returns all registered notification templates across channels and event types.
[- {
- "active": true,
- "body": "string",
- "category": "string",
- "channel": "string",
- "code": "string",
- "eventType": "string",
- "locale": "string",
- "subject": "string"
}
]Upserts a notification template identified by its channel and event-type key. If a template with that key already exists it is overwritten; otherwise a new one is created. Templates define the subject and body (with variable placeholders) used when rendering outbound messages for matching events.
| active | boolean |
| body required | string non-empty |
| category required | string non-empty |
| channel required | string non-empty |
| code required | string non-empty |
| eventType required | string non-empty |
| locale | string |
| subject | string |
{- "active": true,
- "body": "string",
- "category": "string",
- "channel": "string",
- "code": "string",
- "eventType": "string",
- "locale": "string",
- "subject": "string"
}{- "active": true,
- "body": "string",
- "category": "string",
- "channel": "string",
- "code": "string",
- "eventType": "string",
- "locale": "string",
- "subject": "string"
}Financial reporting read models aggregated from the Ledger and Deposits contexts (staff/finance/compliance). All endpoints are read-only and require the reporting:read authority. Reports are single-currency by default (omitting the currency param uses the institution base currency); pass consolidated=true on endpoints that support it to translate every posting currency into the base via mid-market FX rates.
Returns the balance sheet (assets, liabilities, equity) for the requested currency. Pass consolidated=true to translate every currency's balances into the institution base at mid-market FX rates, with the FX translation difference recognized in equity; in consolidated mode the currency param is ignored. Omit currency (and consolidated=false) to default to the base currency. Read-only; no state transitions or side effects.
| currency | string ISO 4217 currency code; omit to use the institution base currency (ignored when consolidated=true) |
| consolidated | boolean Default: false |
{- "assets": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "code": "string",
- "name": "string"
}
], - "balanced": true,
- "equity": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "code": "string",
- "name": "string"
}
], - "liabilities": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "code": "string",
- "name": "string"
}
], - "totalAssets": {
- "amount": 1200,
- "currency": "USD"
}, - "totalEquity": {
- "amount": 1200,
- "currency": "USD"
}, - "totalLiabilities": {
- "amount": 1200,
- "currency": "USD"
}
}Returns the institution's base/reporting currency and the list of distinct currencies that have ledger postings, suitable for populating a reporting currency selector in the UI.
{- "property1": null,
- "property2": null
}Returns balances for all deposit accounts aggregated from the Deposits context. Figures are in each account's own currency; no cross-currency consolidation is applied. Read-only; no state transitions or side effects.
{- "currencies": [
- {
- "accountCount": 0,
- "currency": "string",
- "totalBalance": {
- "amount": 1200,
- "currency": "USD"
}
}
]
}Returns the income statement (revenue, expenses, net profit/loss) for the requested currency. Pass consolidated=true to translate every currency's P&L into the institution base at mid-market FX rates; in consolidated mode the currency param is ignored. Omit currency (and consolidated=false) to default to the base currency. Read-only; no state transitions or side effects.
| currency | string ISO 4217 currency code; omit to use the institution base currency (ignored when consolidated=true) |
| consolidated | boolean Default: false |
{- "expense": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "code": "string",
- "name": "string"
}
], - "income": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "code": "string",
- "name": "string"
}
], - "netProfit": {
- "amount": 1200,
- "currency": "USD"
}, - "totalExpense": {
- "amount": 1200,
- "currency": "USD"
}, - "totalIncome": {
- "amount": 1200,
- "currency": "USD"
}
}Returns the prudential / regulatory return in the base currency: capital adequacy ratios, liquidity metrics, and the largest single-counterparty exposure. Figures are always in the institution base currency regardless of multi-currency postings. Read-only; no state transitions or side effects.
{- "baseCurrency": "string",
- "capital": {
- "amount": 1200,
- "currency": "USD"
}, - "capitalAdequacyRatioPct": 0,
- "largestExposure": {
- "amount": 1200,
- "currency": "USD"
}, - "largestExposureRatioPct": 0,
- "liquidAssets": {
- "amount": 1200,
- "currency": "USD"
}, - "liquidityRatioPct": 0,
- "riskWeightedAssets": {
- "amount": 1200,
- "currency": "USD"
}, - "totalLiabilities": {
- "amount": 1200,
- "currency": "USD"
}
}Returns the trial balance (debit and credit totals per account) for the requested currency. Balances are never summed across currencies — omit currency to default to the institution base. Read-only; no state transitions or side effects.
| currency | string ISO 4217 currency code; omit to use the institution base currency |
{- "balanced": true,
- "lines": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "credits": {
- "amount": 1200,
- "currency": "USD"
}, - "debits": {
- "amount": 1200,
- "currency": "USD"
}, - "net": {
- "amount": 1200,
- "currency": "USD"
}
}
], - "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}Customer-facing BFF aggregating accounts, loans, cards, disputes, prepaid, payments and preferences for the authenticated retail customer. Every response is scoped to the session party — no customer can access another customer's data. The BFF delegates mutations to the owning domain use cases (which re-validate entitlements server-side); money-movement endpoints additionally require a valid SCA step-up token on the session.
Returns summary views of all deposit accounts for which the authenticated customer holds a mandate.
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}
]Returns the full account detail including mandates and balances. Throws 403 if the account is not owned by the session customer.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Returns a structured statement for the account between the given inclusive date range (ISO-8601 dates). Enforces ownership before querying. No side effects.
| id required | string <uuid> |
| from required | string Start date (inclusive), ISO-8601 format e.g. 2024-01-01 |
| to required | string End date (inclusive), ISO-8601 format e.g. 2024-01-31 |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "fromDate": "string",
- "lines": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "bookingDate": "string",
- "channel": "string",
- "currency": "string",
- "direction": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "journalEntryId": "72600ee4-b304-47f3-89cd-f685d2692490",
- "narrative": "string",
- "postedAt": "string",
- "runningBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "transactionCode": "string",
- "valueDate": "string"
}
], - "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "toDate": "string",
- "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}Returns all posted transactions for the account. Enforces ownership — throws 403 if the account does not belong to the session customer.
| id required | string <uuid> |
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "bookingDate": "string",
- "channel": "string",
- "currency": "string",
- "direction": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "journalEntryId": "72600ee4-b304-47f3-89cd-f685d2692490",
- "narrative": "string",
- "postedAt": "string",
- "runningBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "transactionCode": "string",
- "valueDate": "string"
}
]Returns all payment beneficiaries registered by the authenticated customer.
[- {
- "accountNumber": "string",
- "active": true,
- "bankCode": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "currency": "string",
- "internalAccountId": "e408f878-4fac-40bb-8bdc-8640840744e2",
- "name": "string",
- "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "rail": "string",
- "type": "string"
}
]Registers a new payment beneficiary owned by the session customer. The ownerPartyId is always forced to the session party regardless of any value supplied in the request body, preventing cross-customer beneficiary injection. The beneficiary can be an internal account or an external account reachable via a named payment rail.
| anchor | string |
| beneficiaryId required | string <uuid> |
| frequency | string |
| name | string |
| settlementAccountId required | string <uuid> |
| settlementDay | integer <int32> |
| whtTaxClass | string |
{- "anchor": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "frequency": "string",
- "name": "string",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementDay": 0,
- "whtTaxClass": "string"
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Returns all revolving card-loan (credit card) accounts for which the session customer is the cardholder.
[- {
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
]Applies a payment from one of the customer's own deposit accounts to a credit card account, reducing the outstanding balance. Both the card-loan account and the source deposit account must be owned by the session customer. The payment is processed by the card-billing domain which posts the debit to the deposit account and credits the card-loan balance.
| id required | string <uuid> |
| property name* additional property | any |
{- "property1": null,
- "property2": null
}{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "availableCredit": {
- "amount": 1200,
- "currency": "USD"
}, - "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "cashAdvanceBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "creditLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "currentBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "delinquencyBucket": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInFullLastCycle": true,
- "paymentDueDate": "string",
- "penaltyBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "purchaseBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": 0,
- "statementBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}Returns all billing cycle statements for the given card-loan account. Ownership is enforced — throws 403 if the account does not belong to the session customer.
| id required | string <uuid> |
[- {
- "cardLoanAccountId": "1c19e2fc-3c89-49ce-b72c-6ca9c7249a6f",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "cycleFrom": "string",
- "cycleTo": "string",
- "generatedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "interestCharged": {
- "amount": 1200,
- "currency": "USD"
}, - "minimumDue": {
- "amount": 1200,
- "currency": "USD"
}, - "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "paymentDueDate": "string",
- "reference": "string"
}
]Returns all cards (debit, credit, prepaid) for which the authenticated customer is the cardholder.
[- {
- "activatedAt": "string",
- "atmDailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardToken": "string",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "dailyAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "expiry": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "last4": "string",
- "network": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "singleTxnCap": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string",
- "type": "string"
}
]Returns all cleared card transactions across every card held by the session customer. Transactions are filtered to only those whose cardId belongs to one of the customer's own cards. Read-only.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "authorizationId": "fd01ce3c-0799-43be-b4cd-b95dd107d4d8",
- "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "channel": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "merchant": "string",
- "presentmentDate": "string",
- "reference": "string",
- "settlementBatchId": "4d097f96-5c46-47b0-9fb6-a44a590557dd",
- "status": "string",
- "type": "string"
}
]Returns an aggregated dashboard payload containing the customer's own deposit accounts with current balances and up to 10 recent notification alerts scoped to their party. This is a read-only aggregation — no state changes occur.
{- "property1": null,
- "property2": null
}Returns all disputes raised by the session customer, across all of their cards.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}
]Opens a dispute for a cleared card transaction. The transaction must belong to one of the session
customer's own cards — this entitlement is enforced before the dispute is submitted. The request
body must include 'cardTransactionId' (UUID string) and 'reasonCode'; an optional 'note' may be
supplied. The dispute is recorded in OPEN state and an audit actor of 'customer:
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Returns the catalogue of available dispute reason codes that can be referenced when raising a dispute.
[- {
- "category": "string",
- "code": "string",
- "description": "string",
- "filingWindowDays": 0,
- "provisionalCreditEligible": true,
- "representable": true,
- "representmentWindowDays": 0
}
]Returns all loan facilities for which the authenticated customer is the borrower. Read-only — no state changes.
[- {
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": "string",
- "status": "string"
}
]Returns the customer's current notification channel preferences (e.g. SMS/email per event category).
[- {
- "category": "string",
- "channel": "string",
- "enabled": true,
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}
]Updates a single notification preference (category + channel + enabled flag) for the session customer, then returns the full updated preference list. The body must include 'category' (string), 'channel' (string), and 'enabled' (boolean).
| property name* additional property | any |
{- "property1": null,
- "property2": null
}[- {
- "category": "string",
- "channel": "string",
- "enabled": true,
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}
]Initiates an outbound payment to an external beneficiary via the specified payment rail (e.g. RTGS, ZIPIT). The debtor account must be owned by the session customer. A valid SCA step-up token is required — the payment is rejected without one. The step-up token is consumed on success, preventing replay. Actual debit postings and rail submission are handled by the Payments hub. The idempotencyKey prevents duplicate submissions on client retries.
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| beneficiaryAccount | string |
| beneficiaryName | string |
| debtorAccountId | string <uuid> |
| idempotencyKey | string |
| narrative | string |
| rail | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "idempotencyKey": "string",
- "narrative": "string",
- "rail": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}Returns all prepaid (stored-value) accounts for which the session customer is the holder.
[- {
- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}
]Returns the load history (top-up events) for a prepaid account. Ownership is enforced before querying.
| id required | string <uuid> |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "reference": "string",
- "source": "string"
}
]Loads funds onto a prepaid stored-value account by debiting one of the customer's own deposit accounts. Both the prepaid account and the source deposit account must be owned by the session customer. The prepaid domain posts the debit to the deposit account and credits the prepaid balance. Returns the updated prepaid account view after the load.
| id required | string <uuid> |
| property name* additional property | any |
{- "property1": null,
- "property2": null
}{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Returns the full party detail record for the authenticated customer (name, contacts, KYC status, addresses).
{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Returns metadata for all archived (generated) statement documents for the given account. Ownership of the account is enforced before querying.
| accountId required | string <uuid> The deposit account whose statements to retrieve |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "deliveryStatus": "string",
- "format": "string",
- "generatedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lineCount": 0,
- "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "periodFrom": "string",
- "periodTo": "string",
- "reference": "string",
- "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}
]Streams the binary content of an archived statement document as an attachment. The account linked to the statement must be owned by the session customer; ownership is enforced before the download proceeds. Returns the file with appropriate Content-Disposition and Content-Type headers.
| id required | string <uuid> |
"string"Transfers funds between two internal accounts. The source account must be owned by the session customer. A valid SCA step-up token is required on the session (RetailSession.requireSca()) — the transfer is rejected if no step-up has been performed. The step-up token is consumed on success, preventing replay. The actual debit/credit postings are performed by the Payments hub; this endpoint forwards a typed INTERNAL_TRANSFER command. The idempotencyKey prevents duplicate submissions if the client retries.
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| beneficiaryName | string |
| fromAccountId | string <uuid> |
| idempotencyKey | string |
| narrative | string |
| toAccountId | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryName": "string",
- "fromAccountId": "bfc0ca59-4255-47db-ba7f-bed1e37954c5",
- "idempotencyKey": "string",
- "narrative": "string",
- "toAccountId": "a5e9f764-e2f6-4d69-81d7-69120b87b71e"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}Recurring inter-account transfer instructions that execute automatically on a defined schedule. Each standing order specifies a source account, destination account, amount, frequency, and optional end date. The scheduler picks up due orders and posts the underlying funds-transfer entries. Reads require transfer:read; creation, cancellation, and manual execution require transfer:operate.
Returns every standing order regardless of status (ACTIVE, CANCELLED, COMPLETED), including schedule, amount, and source/destination accounts.
[- {
- "active": true,
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "endDate": "string",
- "frequency": "string",
- "lastRunOn": "string",
- "narrative": "string",
- "nextRunDate": "string",
- "payeeId": "79417842-2e1e-4110-a361-89b9f39b36ed",
- "standingOrderId": "8e04f175-6952-4803-ac36-69c972a52222"
}
]Creates a new recurring transfer instruction. The order becomes ACTIVE immediately and will be picked up by the next scheduler run that falls on or after the first execution date. The response contains the generated standing-order id.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| debtorAccountId required | string <uuid> |
| endDate | string <date> |
| firstRunDate required | string <date> |
| frequency required | string |
| narrative | string |
| payeeId required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "endDate": "2019-08-24",
- "firstRunDate": "2019-08-24",
- "frequency": "string",
- "narrative": "string",
- "payeeId": "79417842-2e1e-4110-a361-89b9f39b36ed"
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Manually runs all standing orders whose next execution date is on or before the given date (defaulting to today). For each due order a funds-transfer is posted against the source and destination accounts. Returns the count of orders executed. Useful for end-of-day batch jobs or backfill after a scheduler outage.
| asOf | string <date> Execution date to evaluate due orders against (ISO-8601); defaults to today if omitted. |
{- "property1": 0,
- "property2": 0
}Permanently cancels an ACTIVE standing order so no further transfers are executed. In-flight executions that are already posting at the time of cancellation are not rolled back. Returns 204 No Content on success; 404 if the order does not exist.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}End-of-day FX revaluation: marks every open FX position to the closing mid-rate and books the resulting unrealised gain or loss. Reads (listing prior revaluation runs) require payment:read; triggering a revaluation run requires transfer:operate.
Returns all recorded EOD FX revaluation runs, each showing the value date, the number of positions revalued, and the net P&L posted.
[- {
- "currency": "string",
- "lastBaseValue": {
- "amount": 1200,
- "currency": "USD"
}, - "lastRate": 0,
- "revaluedOn": "string"
}
]Executes the FX revaluation batch for the given value date (defaults to today if omitted). For each open FX position the engine marks it to the closing mid-rate, computes the unrealised gain or loss, and books an accounting entry. Returns the count of positions revalued. Running the same date twice will overwrite the previous result — not idempotent.
| asOf | string <date> Value date for the revaluation (ISO-8601, e.g. 2026-06-30); defaults to today if omitted. |
{- "property1": 0,
- "property2": 0
}Customer Information File (CIF) — owns the full lifecycle of every party (natural person or legal entity) in the bank. Manages registration, KYC/CDD decisions, lifecycle state transitions (active / blocked / closed), profile data (personal/corporate details, financial profile), and party elements (identifications, addresses, contacts, inter-party relationships). Results are scoped to the caller's branch context. Reads require customer:read; mutations require customer:write; KYC decisions require customer:kyc-decide.
Returns all parties visible to the caller's branch. When name or status query parameters are provided, delegates to the search port for filtered results; otherwise returns the full list. All results are post-filtered by branch visibility.
| name | string Partial or full display name to filter by (case-insensitive match) |
| status | string Party lifecycle status to filter by (e.g. ACTIVE, BLOCKED, CLOSED, PENDING_KYC) |
[- {
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}
]Creates a new party (natural person or legal entity) in the CIF and assigns it to the caller's branch. The party is placed in PENDING_KYC state; it cannot transact until a KYC decision is recorded. Returns 201 with the created party summary view.
| branchId | string <uuid> |
| cddTier required | string non-empty |
| displayName required | string non-empty |
| type required | string non-empty |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "type": "string"
}{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Returns the summary view of a single party. Enforces branch-scope: if the party belongs to a branch the caller cannot see, the response is 404 (not 403) to avoid information leakage.
| id required | string <uuid> |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Attaches a postal or physical address to the party (residential, business, mailing, etc.). Multiple addresses of different types are allowed. Returns the updated full detail view.
| id required | string <uuid> |
| addressType required | string non-empty |
| city | string |
| country required | string non-empty |
| line1 | string |
| line2 | string |
| postalCode | string |
| primary | boolean |
| stateProvince | string |
{- "addressType": "string",
- "city": "string",
- "country": "string",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Removes a specific address from the party by its element id.
| id required | string <uuid> |
| addressId required | string <uuid> |
{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Suspends an ACTIVE party, preventing any further account transactions or loan disbursements. Typically used for fraud, AML flags, or court orders. The party can be unblocked later.
| id required | string <uuid> |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Upgrades or downgrades the party's Customer Due Diligence (CDD) tier. The tier determines which KYC elements are required and what transaction limits apply. Requires customer:kyc-decide authority.
| id required | string <uuid> |
| tier required | string Target CDD tier (e.g. SIMPLIFIED, STANDARD, ENHANCED) |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Permanently closes a party (terminal state). A closed party cannot be reactivated. Precondition: all linked accounts and facilities must be closed or settled before the CIF record can be closed.
| id required | string <uuid> |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Attaches a contact point (phone number, email address, etc.) to the party. Multiple contacts of different types are allowed. Returns the updated full detail view.
| id required | string <uuid> |
| consentToContact | boolean |
| contactType required | string non-empty |
| primary | boolean |
| value required | string non-empty |
{- "consentToContact": true,
- "contactType": "string",
- "primary": true,
- "value": "string"
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Removes a specific contact point from the party by its element id.
| id required | string <uuid> |
| contactId required | string <uuid> |
{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Returns the complete detail view of a party, including personal or corporate profile data, financial profile, all identifications, addresses, contacts, and inter-party relationships.
| id required | string <uuid> |
{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Stores or replaces the party's financial profile (income band, source of funds, employment status, etc.) used for credit scoring, AML risk assessment, and product eligibility checks.
| id required | string <uuid> |
| annualIncomeBand | string |
| employerName | string |
| employmentStatus | string |
| occupation | string |
| purposeOfAccount | string |
| sourceOfFunds | string |
| sourceOfWealth | string |
{- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Attaches an identification document (national ID, passport, driver's licence, etc.) to the party. Each document type/number combination must be unique within the party. Returns the updated full detail view.
| id required | string <uuid> |
| expiryDate | string <date> |
| idNumber required | string non-empty |
| idType required | string non-empty |
| issueDate | string <date> |
| issuingAuthority | string |
| issuingCountry | string |
| primary | boolean |
{- "expiryDate": "2019-08-24",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "2019-08-24",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Removes a specific identification document from the party by its element id.
| id required | string <uuid> |
| identificationId required | string <uuid> |
{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Records an approved or rejected KYC outcome against a party, stamped with the authenticated officer's username. An approved decision moves the party from PENDING_KYC to ACTIVE, enabling account opening and transactions. A rejected decision keeps the party non-transactional. Requires customer:kyc-decide authority.
| id required | string <uuid> |
| approved required | boolean true to approve KYC (transitions party to ACTIVE), false to reject |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Returns the KYC completeness view for a party relative to its current CDD tier: which identification types, address types, and other elements are required versus satisfied. Useful for driving onboarding checklists in the UI.
| id required | string <uuid> |
{- "cddTier": "string",
- "complete": true,
- "missing": [
- "string"
], - "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0"
}Replaces the corporate profile fields of a LEGAL_ENTITY party (registered name, registration number, incorporation date, country of incorporation, business sector, etc.).
| id required | string <uuid> |
| dateOfIncorporation | string <date> |
| industryIsic | string |
| legalForm | string |
| legalName | string |
| listed | boolean |
| numberOfEmployees | integer <int32> |
| registrationCountry | string |
| registrationNumber | string |
| regulatoryStatus | string |
| tradingName | string |
| website | string |
{- "dateOfIncorporation": "2019-08-24",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Replaces the demographic and personal profile fields of a NATURAL_PERSON party (date of birth, gender, nationality, marital status, etc.). Has no effect on linked accounts or KYC status.
| id required | string <uuid> |
| countryOfResidence | string |
| dateOfBirth | string <date> |
| dependentsCount | integer <int32> |
| firstName | string |
| gender | string |
| lastName | string |
| maidenName | string |
| maritalStatus | string |
| middleName | string |
| mothersMaidenName | string |
| nationality | string |
| placeOfBirth | string |
| salutation | string |
{- "countryOfResidence": "string",
- "dateOfBirth": "2019-08-24",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Records a directed relationship between this party and another party (e.g. DIRECTOR_OF, GUARANTOR_FOR, NEXT_OF_KIN, EMPLOYER). Used for group-customer structures, guarantee chains, and AML network analysis. Returns the updated full detail view.
| id required | string <uuid> |
| controlling | boolean |
| ownershipPercent | number |
| relatedName | string |
| relatedPartyId | string <uuid> |
| relationshipType required | string non-empty |
{- "controlling": true,
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Removes a specific inter-party relationship from the party by its element id.
| id required | string <uuid> |
| relationshipId required | string <uuid> |
{- "addresses": [
- {
- "addressType": "string",
- "city": "string",
- "country": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line1": "string",
- "line2": "string",
- "postalCode": "string",
- "primary": true,
- "stateProvince": "string"
}
], - "cddTier": "string",
- "contacts": [
- {
- "consentToContact": true,
- "contactType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "primary": true,
- "value": "string",
- "verified": true
}
], - "displayName": "string",
- "financialProfile": {
- "annualIncomeBand": "string",
- "employerName": "string",
- "employmentStatus": "string",
- "occupation": "string",
- "purposeOfAccount": "string",
- "sourceOfFunds": "string",
- "sourceOfWealth": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifications": [
- {
- "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052",
- "expiryDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "idNumber": "string",
- "idType": "string",
- "issueDate": "string",
- "issuingAuthority": "string",
- "issuingCountry": "string",
- "primary": true,
- "verified": true
}
], - "kycStatus": "string",
- "organization": {
- "dateOfIncorporation": "string",
- "industryIsic": "string",
- "legalForm": "string",
- "legalName": "string",
- "listed": true,
- "numberOfEmployees": 0,
- "registrationCountry": "string",
- "registrationNumber": "string",
- "regulatoryStatus": "string",
- "tradingName": "string",
- "website": "string"
}, - "partyNumber": "string",
- "pep": true,
- "person": {
- "countryOfResidence": "string",
- "dateOfBirth": "string",
- "dependentsCount": 0,
- "firstName": "string",
- "gender": "string",
- "lastName": "string",
- "maidenName": "string",
- "maritalStatus": "string",
- "middleName": "string",
- "mothersMaidenName": "string",
- "nationality": "string",
- "placeOfBirth": "string",
- "salutation": "string"
}, - "preferredCurrency": "string",
- "preferredLanguage": "string",
- "relationships": [
- {
- "controlling": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownershipPercent": 0,
- "relatedName": "string",
- "relatedPartyId": "fa79ba54-b814-40a7-afb4-54021a6104c6",
- "relationshipType": "string"
}
], - "riskRating": "string",
- "segment": "string",
- "status": "string",
- "type": "string"
}Returns a BLOCKED party to ACTIVE status, re-enabling transactions and product access.
| id required | string <uuid> |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "cddTier": "string",
- "displayName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycStatus": "string",
- "status": "string",
- "type": "string"
}Registry of commission beneficiaries (agents, introducers, or internal cost-centres) that receive earned commission payouts. Each beneficiary record stores the settlement account, sweep frequency, and withholding-tax (WHT) rate used when disbursing commissions. Reads are open to authenticated users; mutations (register, update, activate, deactivate) require the pricing:manage authority.
Returns every registered beneficiary with their settlement account, sweep frequency, WHT rate and current active/inactive status.
[- {
- "active": true,
- "anchor": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "frequency": "string",
- "lastSettledOn": "2019-08-24",
- "name": "string",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementDay": 0,
- "whtTaxClass": "string"
}
]Creates a new beneficiary entry in the commission registry. The supplied settlement account, sweep frequency and WHT rate are persisted and will be used for all future commission disbursements to this beneficiary. The beneficiary is created in an active state. Requires pricing:manage.
| anchor | string |
| beneficiaryId required | string <uuid> |
| frequency | string |
| name | string |
| settlementAccountId required | string <uuid> |
| settlementDay | integer <int32> |
| whtTaxClass | string |
{- "anchor": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "frequency": "string",
- "name": "string",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementDay": 0,
- "whtTaxClass": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Replaces the settlement account, sweep frequency and WHT rate for an existing beneficiary. The update takes effect on the next commission sweep cycle — in-flight disbursements already queued are not affected. Returns 204 on success. Requires pricing:manage.
| id required | string <uuid> |
| anchor | string |
| beneficiaryId required | string <uuid> |
| frequency | string |
| name | string |
| settlementAccountId required | string <uuid> |
| settlementDay | integer <int32> |
| whtTaxClass | string |
{- "anchor": "string",
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "frequency": "string",
- "name": "string",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementDay": 0,
- "whtTaxClass": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Restores an inactive beneficiary to active status, resuming commission accruals and enabling future sweep disbursements. Idempotent when called on an already-active beneficiary. Returns 204 on success. Requires pricing:manage.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Marks the beneficiary as inactive, suspending all future commission accruals and disbursements to them. Already-earned commissions remain in the ledger and can be paid out if the beneficiary is later reactivated. Returns 204 on success. Requires pricing:manage.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}User account management and authorization resolution for the Cortex access context. Staff reads (list/get) are available to any authenticated principal; all mutations (create, update, role assignment, password reset, enable/disable) and the authserver integration endpoints (authorization, credentials) require the admin:users authority.
Creates a new user account and persists their initial profile. Returns 201 with the fully populated UserView. The created account is enabled by default; roles can be assigned immediately via the roles endpoint. Requires admin:users.
| displayName required | string non-empty |
| homeBranch required | string non-empty |
| password required | string non-empty |
| roleCodes | Array of strings |
| username required | string non-empty |
{- "displayName": "string",
- "homeBranch": "string",
- "password": "string",
- "roleCodes": [
- "string"
], - "username": "string"
}{- "displayName": "string",
- "homeBranch": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "roles": [
- "string"
], - "status": "string",
- "username": "string"
}Returns one user, or 404 if no user has that id.
| id required | string <uuid> |
{- "displayName": "string",
- "homeBranch": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "roles": [
- "string"
], - "status": "string",
- "username": "string"
}Replaces the mutable profile fields (e.g. name, email) for the given user. Role assignments are managed separately via the roles endpoint. Returns the updated UserView, or 404 if the user does not exist. Requires admin:users.
| id required | string <uuid> |
| displayName required | string non-empty |
| homeBranch required | string non-empty |
{- "displayName": "string",
- "homeBranch": "string"
}{- "displayName": "string",
- "homeBranch": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "roles": [
- "string"
], - "status": "string",
- "username": "string"
}Marks the user account as disabled, preventing the principal from authenticating. Existing active sessions are not terminated immediately but will fail to refresh. Returns the updated UserView. Requires admin:users.
| id required | string <uuid> |
{- "displayName": "string",
- "homeBranch": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "roles": [
- "string"
], - "status": "string",
- "username": "string"
}Marks the user account as enabled so the principal can authenticate. No-op if the account is already enabled. Returns the updated UserView. Requires admin:users.
| id required | string <uuid> |
{- "displayName": "string",
- "homeBranch": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "roles": [
- "string"
], - "status": "string",
- "username": "string"
}Sets a new BCrypt-hashed password for the given user. The old password is not required (admin-side reset). Returns 204 No Content on success. The user must re-authenticate after a password reset. Requires admin:users.
| id required | string <uuid> |
| password required | string non-empty |
{- "password": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Replaces the full set of roles assigned to the user with the roles supplied in the command body. Effective permissions are recalculated immediately; any active tokens for the user will reflect the new role set on the next token refresh. Returns the updated UserView. Requires admin:users.
| id required | string <uuid> |
| roleCodes | Array of strings |
{- "roleCodes": [
- "string"
]
}{- "displayName": "string",
- "homeBranch": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "roles": [
- "string"
], - "status": "string",
- "username": "string"
}Returns the BCrypt password hash and enabled flag for the given username. Called by the dev authserver's UserDetailsService during login verification. Returns 404 if the username does not exist. Requires admin:users.
| username required | string Login username of the principal whose credentials are being fetched |
{- "enabled": true,
- "passwordHash": "string",
- "username": "string"
}Accounting period management and the fiscal-year close lifecycle (General Ledger). Each period carries a fiscal year, a period code, and a state machine: OPEN → CLOSED → LOCKED (with a REOPEN escape hatch back to OPEN). Postings are only accepted against OPEN periods. Reads require gl:read; all state-transition mutations require gl:manage.
Creates the full set of monthly accounting periods for the given fiscal year and places them in OPEN state. Fails if any period for that year already exists. This is typically run once at the start of each financial year before any postings are made.
| property name* additional property | integer <int32> |
{- "property1": 0,
- "property2": 0
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Transitions an OPEN period to CLOSED. Once closed, no new journal entries may be posted against it. A closed period can be locked (to prevent reopening) or reopened if an adjustment is needed. Returns 204 on success.
| code required | string Period code, e.g. 2025-01 |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Permanently locks a CLOSED period, preventing it from being reopened. Used after the external audit sign-off to protect the ledger balances from any retroactive adjustment. This transition is terminal — a locked period cannot be unlocked. Returns 204 on success.
| code required | string Period code, e.g. 2025-01 |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Returns a CLOSED period to OPEN so that correcting journal entries can be posted. Only CLOSED (not LOCKED) periods can be reopened. The period must be explicitly closed again once the correction is complete. Returns 204 on success.
| code required | string Period code, e.g. 2025-01 |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Authentication and session management for retail (self-service) customers. Handles credential-based login, session cookie issuance, logout, and SCA step-up (OTP) flows. No staff permission model applies — callers are end-customers identified by an HttpOnly session cookie set at login. The session cookie is scoped to /api/v1/retail and expires after 30 minutes of inactivity.
Validates the customer's credentials and, on success, issues an HttpOnly session cookie (30-minute max-age, SameSite=Lax, scoped to /api/v1/retail). The response body carries partyId, initial authLevel (AUTHENTICATED), and the cookie expiry timestamp. Returns 401 if the credentials are invalid or the account is locked.
| identifier required | string non-empty |
| secret required | string non-empty |
{- "identifier": "string",
- "secret": "string"
}{- "property1": null,
- "property2": null
}Invalidates the session identified by the session cookie (if present) and immediately clears the cookie by setting its max-age to 0. Safe to call even if no cookie is present (required=false) — the response is always 204 No Content. Idempotent.
| cortex_retail | string |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Triggers an OTP challenge for the authenticated session, elevating it toward SCA_VERIFIED status required for high-value or sensitive operations. The OTP is dispatched via the customer's registered out-of-band channel (e.g. SMS). Returns immediately with {status: "OTP_ISSUED"} — the OTP code must be submitted to /step-up/verify to complete step-up. Requires an active session cookie.
| cortex_retail required | string |
{- "property1": "string",
- "property2": "string"
}Validates the OTP code submitted in the request body against the pending step-up challenge for the current session. On success, the session's authLevel is promoted to SCA_VERIFIED and the response carries {verified: true, authLevel: "SCA_VERIFIED"}. On failure, {verified: false, authLevel: "AUTHENTICATED"} is returned without locking the session (rate-limiting and lockout are enforced by the use-case layer). Requires an active session cookie with a pending step-up challenge initiated via /step-up.
| cortex_retail required | string |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "property1": null,
- "property2": null
}Business calendars and public-holiday schedules used across the banking platform to determine business days, value dates, and settlement cutoffs. Reads are open to any authenticated staff member; creating, updating, activating/deactivating calendars, and managing holidays requires the reference:manage authority.
Creates a new business calendar. The calendar code must be unique across the system. The new calendar is created in an inactive state and must be explicitly activated before it influences business-day calculations. Requires reference:manage.
| calendarCode required | string non-empty |
| name required | string non-empty |
| weekendDays | Array of strings |
{- "calendarCode": "string",
- "name": "string",
- "weekendDays": [
- "string"
]
}{- "active": true,
- "calendarCode": "string",
- "name": "string",
- "weekendDays": [
- "string"
]
}Replaces the calendar's metadata (name, description, weekend days) identified by the given code. Does not affect holidays or the active/inactive status. Requires reference:manage.
| code required | string |
| calendarCode required | string non-empty |
| name required | string non-empty |
| weekendDays | Array of strings |
{- "calendarCode": "string",
- "name": "string",
- "weekendDays": [
- "string"
]
}{- "active": true,
- "calendarCode": "string",
- "name": "string",
- "weekendDays": [
- "string"
]
}Moves a calendar to ACTIVE status so it is used in business-day and value-date calculations. Activating an already-active calendar is safe (no-op). Requires reference:manage.
| code required | string |
{- "active": true,
- "calendarCode": "string",
- "name": "string",
- "weekendDays": [
- "string"
]
}Returns whether the given date is a business day according to the specified calendar, accounting for weekends and registered public holidays. Also surfaces the next and previous business days relative to the queried date.
| code required | string |
| date required | string <date> The date to evaluate, in ISO-8601 format (yyyy-MM-dd) |
{- "businessDay": true,
- "calendarCode": "string",
- "date": "2019-08-24",
- "holiday": true,
- "lastBusinessDayOfMonth": "2019-08-24"
}Moves a calendar to INACTIVE status, excluding it from business-day and value-date calculations. Existing holidays are preserved. Requires reference:manage.
| code required | string |
{- "active": true,
- "calendarCode": "string",
- "name": "string",
- "weekendDays": [
- "string"
]
}Returns all public holidays registered against the specified calendar, ordered by date.
| code required | string |
[- {
- "calendarCode": "string",
- "day": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "month": 0,
- "name": "string",
- "recurring": true,
- "year": 0
}
]Adds a public holiday to the specified calendar. The holiday date must not already exist on the calendar. Returns the generated holiday id. Requires reference:manage.
| code required | string |
| day | integer <int32> |
| month | integer <int32> |
| name required | string non-empty |
| year | integer <int32> |
{- "day": 0,
- "month": 0,
- "name": "string",
- "year": 0
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Deletes the specified holiday entry from the calendar. Once removed, that date will be treated as a regular weekday (or weekend, per the calendar's weekend configuration). Returns 204 No Content. Requires reference:manage.
| code required | string |
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Management of transaction monitoring rules used by the AML engine to detect suspicious activity. Rules are evaluated against transactions in real-time and can trigger alerts or blocks depending on their configuration. Reads require aml:read; rule mutations (create/update/activate/deactivate) require aml:operate.
Returns all AML monitoring rules with their current status, thresholds and configuration.
[- {
- "active": true,
- "ratio": 0,
- "ruleCode": "string",
- "ruleId": "70af3071-65d9-4ec3-b3cb-5283e8d55dac",
- "severity": "string",
- "threshold": 0,
- "txnCount": 0,
- "type": "string",
- "windowDays": 0
}
]Creates a new monitoring rule or updates an existing one if a rule with the same logical key already exists (upsert semantics). The rule is persisted in INACTIVE state after creation and must be explicitly activated before the AML engine evaluates it. Returns the saved rule with its assigned id.
| ratio | number |
| ruleCode required | string non-empty |
| severity | string |
| threshold | number |
| txnCount | integer <int32> |
| type required | string non-empty |
| windowDays | integer <int32> |
{- "ratio": 0,
- "ruleCode": "string",
- "severity": "string",
- "threshold": 0,
- "txnCount": 0,
- "type": "string",
- "windowDays": 0
}{- "active": true,
- "ratio": 0,
- "ruleCode": "string",
- "ruleId": "70af3071-65d9-4ec3-b3cb-5283e8d55dac",
- "severity": "string",
- "threshold": 0,
- "txnCount": 0,
- "type": "string",
- "windowDays": 0
}Moves the rule to ACTIVE state so the AML engine begins evaluating it against incoming transactions. Has no effect (idempotent) if the rule is already active. Returns 204 No Content on success.
| id required | string <uuid> Monitoring rule id |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Suspends the rule so the AML engine stops evaluating it without deleting it. In-flight evaluations already triggered by the rule are not rolled back. Has no effect (idempotent) if the rule is already inactive. Returns 204 No Content on success.
| id required | string <uuid> Monitoring rule id |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Account statement generation, retrieval, and binary download, plus statement-cycle configuration (staff/operations). A statement document captures a closing balance, period transaction list, and a rendered PDF/binary payload for a given account and cycle period. Statement cycles drive the periodic generation schedule per account. Reads require statement:read; generation and cycle mutations require statement:operate.
Returns all statement documents, or — when accountId is supplied — only those belonging to that account. Each document includes the period dates, closing balance, and metadata but not the binary payload (use the download endpoint for that).
| accountId | string <uuid> Filter results to a single account; omit to return all statements |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "deliveryStatus": "string",
- "format": "string",
- "generatedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lineCount": 0,
- "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "periodFrom": "string",
- "periodTo": "string",
- "reference": "string",
- "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}
]Returns all statement cycle configurations — one per account that has a cycle defined — with their cut-off day and frequency settings.
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "active": true,
- "deliveryChannel": "string",
- "format": "string",
- "frequency": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "nextRunDate": "string"
}
]Creates a new statement cycle or replaces an existing one for the account identified in the command body (upsert semantics). The cycle defines the cut-off day-of-month and generation frequency that the batch job uses to trigger periodic statement production. Requires statement:operate.
| accountId required | string <uuid> |
| active | boolean |
| deliveryChannel | string |
| firstRunDate | string <date> |
| format | string |
| frequency required | string |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "active": true,
- "deliveryChannel": "string",
- "firstRunDate": "2019-08-24",
- "format": "string",
- "frequency": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "active": true,
- "deliveryChannel": "string",
- "format": "string",
- "frequency": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "nextRunDate": "string"
}Returns the statement cycle configured for the given account, or 404 if no cycle has been set up for that account.
| accountId required | string <uuid> Account id whose statement cycle is requested |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "active": true,
- "deliveryChannel": "string",
- "format": "string",
- "frequency": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "nextRunDate": "string"
}Generates and persists a new statement document for the specified account and period. The use case computes the closing balance, collects the period transaction list, renders the binary payload, and stores the result. Returns 201 with the new document on success. Requires statement:operate.
| accountId required | string <uuid> |
| format | string |
| fromDate required | string <date> |
| toDate required | string <date> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "format": "string",
- "fromDate": "2019-08-24",
- "toDate": "2019-08-24"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "deliveryStatus": "string",
- "format": "string",
- "generatedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lineCount": 0,
- "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "periodFrom": "string",
- "periodTo": "string",
- "reference": "string",
- "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}Returns one statement document with its metadata, or 404 if no statement has that id.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "deliveryStatus": "string",
- "format": "string",
- "generatedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lineCount": 0,
- "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "periodFrom": "string",
- "periodTo": "string",
- "reference": "string",
- "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}Streams the rendered binary content (typically PDF) of a statement as an attachment. The response Content-Disposition header carries the original filename and the Content-Type mirrors the stored media type. Returns 404 if the statement or its binary payload is absent.
| id required | string <uuid> |
"string"FX quoting and deal booking (teller / payments / treasury). Provides indicative rate quotes with no side effects, and deal execution which posts the debit/credit pair across the two nominated accounts. Reads (quote, deals list) require payment:read; deal booking (convert) requires transfer:operate.
Books an FX deal: debits the source account in the from-currency and credits the target account in the to-currency at the prevailing rate. Posts both legs immediately — the deal is not reversible through this endpoint. Requires transfer:operate. Returns 201 with the booked FxDealView on success.
| creditorAccountId required | string <uuid> |
| debtorAccountId required | string <uuid> |
| idempotencyKey | string |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
{- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "idempotencyKey": "string",
- "sellAmount": {
- "amount": 1200,
- "currency": "USD"
}
}{- "createdAt": "string",
- "createdBy": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "crossedVia": "string",
- "dealId": "f480fdfe-5c44-458b-b537-f3d9f40f9678",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "fromAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "rate": 0,
- "rateAsOf": "string",
- "reference": "string",
- "toAmount": {
- "amount": 1200,
- "currency": "USD"
}
}Returns all booked FX deals (executed conversions) in the system, ordered by booking time descending.
[- {
- "createdAt": "string",
- "createdBy": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "crossedVia": "string",
- "dealId": "f480fdfe-5c44-458b-b537-f3d9f40f9678",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "fromAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "rate": 0,
- "rateAsOf": "string",
- "reference": "string",
- "toAmount": {
- "amount": 1200,
- "currency": "USD"
}
}
]Returns an indicative FX quote (rate, converted amount, spread) for the given source amount and target currency. Pure read — no posting, no hold, and no deal is booked. Callers (funds-transfer, teller, payments) use this to price a conversion before committing.
| amount required | number Amount in the source currency to convert |
| from required | string ISO 4217 source currency code (e.g. USD) |
| to required | string ISO 4217 target currency code (e.g. ZWG) |
{- "crossedVia": "string",
- "from": {
- "amount": 1200,
- "currency": "USD"
}, - "rate": 0,
- "rateAsOf": "string",
- "to": {
- "amount": 1200,
- "currency": "USD"
}
}Exchange-rate catalog used system-wide for currency conversion (payments, FX trades, reporting). Rates are keyed by currency pair and are point-in-time snapshots — each upsert replaces the active rate for that pair. Reads require payment:read; creating/updating/deactivating rates requires reference:manage.
Returns all currently active exchange rates in the catalog, keyed by currency pair.
[- {
- "active": true,
- "asOf": "string",
- "ask": 0,
- "base": "string",
- "bid": 0,
- "mid": 0,
- "quote": "string",
- "rateId": "dc6263b0-e8fb-4144-a111-53fde6c86836",
- "source": "string"
}
]Upserts the exchange rate for a currency pair: inserts a new rate if none exists for the pair, or replaces the existing active rate with the supplied bid/ask/mid values. The prior rate record is superseded (not deleted). Returns the resulting active rate. Requires reference:manage.
| ask required | number |
| base required | string non-empty |
| bid required | number |
| mid required | number |
| quote required | string non-empty |
| source | string |
{- "ask": 0,
- "base": "string",
- "bid": 0,
- "mid": 0,
- "quote": "string",
- "source": "string"
}{- "active": true,
- "asOf": "string",
- "ask": 0,
- "base": "string",
- "bid": 0,
- "mid": 0,
- "quote": "string",
- "rateId": "dc6263b0-e8fb-4144-a111-53fde6c86836",
- "source": "string"
}Marks the specified exchange rate as inactive so it is no longer returned by list queries or used for conversions. This is a soft-delete / tombstone — the rate record is retained for audit. Returns 204 No Content on success. Requires reference:manage.
| rateId required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}The simulated card-acceptance edge — stands in for the ISO 8583 messages an acquirer/scheme would send. Drives the hold-then-post discipline: authorize places a memo hold against the card's funding source (deposit balance, credit line, or prepaid stored value) WITHOUT posting; clearing releases the hold and posts the customer debit. Decline/reversal/expiry release the hold. Real switch integration replaces this behind the AuthorizationConnector SPI.
Settlement presentment: releases the memo hold and posts the actual customer debit through the funding source (deposit withdrawal, credit-line draw, or prepaid spend), producing a cleared CardTransaction. Omit the amount to capture the full authorized amount, or pass a smaller amount for a partial capture.
| authId required | string <uuid> |
additional property | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
{- "property1": {
- "amount": 1200,
- "currency": "USD"
}, - "property2": {
- "amount": 1200,
- "currency": "USD"
}
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "authorizationId": "fd01ce3c-0799-43be-b4cd-b95dd107d4d8",
- "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "channel": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "merchant": "string",
- "presentmentDate": "string",
- "reference": "string",
- "settlementBatchId": "4d097f96-5c46-47b0-9fb6-a44a590557dd",
- "status": "string",
- "type": "string"
}Raises the held amount on a still-PENDING authorization (e.g. a tip or fuel top-up), placing an additional hold on the funding source.
| authId required | string <uuid> |
additional property | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
{- "property1": {
- "amount": 1200,
- "currency": "USD"
}, - "property2": {
- "amount": 1200,
- "currency": "USD"
}
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "capturedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "channel": "string",
- "createdAt": "string",
- "declineReason": "string",
- "expiresAt": "string",
- "holdId": "05363803-5510-4d71-8d1f-307021f9ad73",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mcc": "string",
- "merchant": "string",
- "messageType": "string",
- "networkRef": "string",
- "reference": "string",
- "status": "string"
}Voids a still-open authorization and releases its memo hold (e.g. a cancelled sale). No posting ever occurred, so nothing is reversed on the ledger.
| authId required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "capturedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "channel": "string",
- "createdAt": "string",
- "declineReason": "string",
- "expiresAt": "string",
- "holdId": "05363803-5510-4d71-8d1f-307021f9ad73",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mcc": "string",
- "merchant": "string",
- "messageType": "string",
- "networkRef": "string",
- "reference": "string",
- "status": "string"
}Loan origination, lifecycle management, repayment and IFRS-9 provisioning (lending operations). Covers the full loan lifecycle: application → approval → disbursement → repayment → closure or write-off. Approval and write-off are maker-checker controlled — the submitting user (maker) receives a 202 with a pending approval id, and a different user with loan:approve rights must confirm before the action executes. Reads require loan:read; origination requires loan:originate; state transitions require loan:approve or loan:repay; write-offs require loan:writeoff. Branch visibility is enforced on all read paths.
Returns a summary list of all loans visible to the caller's branch context. Loans belonging to branches the caller cannot see are silently excluded. Includes status, outstanding principal, and next-due amounts for each loan.
[- {
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "stage": "string",
- "status": "string"
}
]Creates a new loan for the given borrower party against the specified disbursement account, using the configured loan product to derive the repayment schedule. The loan is stamped with the caller's branch context and starts in PENDING state awaiting approval. Returns 201 with the full loan view including the generated amortisation schedule. Requires loan:originate.
| annualRate | number >= 0 |
| borrowerPartyId required | string <uuid> |
| branchId | string <uuid> |
| disbursementAccountId required | string <uuid> |
| frequency required | string non-empty |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| productId | string <uuid> |
| termMonths | integer <int32> |
{- "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "termMonths": 0
}{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "disbursedOn": "string",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "interestMethod": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "penaltyAccrued": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "rejectionReason": "string",
- "repaymentMethod": "string",
- "schedule": [
- {
- "dueDate": "string",
- "interest": {
- "amount": 1200,
- "currency": "USD"
}, - "number": 0,
- "outstanding": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "paidPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
], - "stage": "string",
- "status": "string",
- "termMonths": 0,
- "totalOutstanding": {
- "amount": 1200,
- "currency": "USD"
}
}Returns the full loan view — schedule, repayment history, outstanding balances and IFRS-9 provision data — for the specified loan. Returns 404 if no loan exists with that id or if the loan belongs to a branch the caller cannot see.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "disbursedOn": "string",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "interestMethod": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "penaltyAccrued": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "rejectionReason": "string",
- "repaymentMethod": "string",
- "schedule": [
- {
- "dueDate": "string",
- "interest": {
- "amount": 1200,
- "currency": "USD"
}, - "number": 0,
- "outstanding": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "paidPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
], - "stage": "string",
- "status": "string",
- "termMonths": 0,
- "totalOutstanding": {
- "amount": 1200,
- "currency": "USD"
}
}Submits a PENDING loan through the maker-checker approval workflow. If policy permits same-user execution (e.g. auto-approve below a threshold), the loan moves to APPROVED and 200 is returned with the updated loan view. Otherwise the operation is parked and 202 Accepted is returned with status PENDING_APPROVAL and the approvalId; a different user with loan:approve must then confirm via the approvals API. Requires loan:approve.
| id required | string <uuid> |
{ }Runs the product-configured IFRS-9 Expected Credit Loss (ECL) provisioning model for the specified loan, calculating the Stage (1/2/3), Probability of Default, Loss Given Default, and the resulting provision amount. The computed provision is persisted against the loan and the corresponding provision accounting entry is posted. Returns the updated loan view with the refreshed provision data. Requires loan:approve.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "disbursedOn": "string",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "interestMethod": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "penaltyAccrued": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "rejectionReason": "string",
- "repaymentMethod": "string",
- "schedule": [
- {
- "dueDate": "string",
- "interest": {
- "amount": 1200,
- "currency": "USD"
}, - "number": 0,
- "outstanding": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "paidPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
], - "stage": "string",
- "status": "string",
- "termMonths": 0,
- "totalOutstanding": {
- "amount": 1200,
- "currency": "USD"
}
}Moves an APPROVED loan to ACTIVE and triggers the disbursement posting to the borrower's nominated account. The principal is posted as a debit to the loan asset account and a credit to the disbursement account. The repayment schedule becomes effective from this point. Requires loan:approve.
| id required | string <uuid> |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "disbursedOn": "string",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "interestMethod": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "penaltyAccrued": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "rejectionReason": "string",
- "repaymentMethod": "string",
- "schedule": [
- {
- "dueDate": "string",
- "interest": {
- "amount": 1200,
- "currency": "USD"
}, - "number": 0,
- "outstanding": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "paidPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
], - "stage": "string",
- "status": "string",
- "termMonths": 0,
- "totalOutstanding": {
- "amount": 1200,
- "currency": "USD"
}
}Moves a PENDING loan to REJECTED, recording an optional decline reason. A rejected loan cannot be reactivated. Returns the updated loan view. Requires loan:approve.
| id required | string <uuid> |
| reason | string Optional decline reason to record against the loan |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "disbursedOn": "string",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "interestMethod": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "penaltyAccrued": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "rejectionReason": "string",
- "repaymentMethod": "string",
- "schedule": [
- {
- "dueDate": "string",
- "interest": {
- "amount": 1200,
- "currency": "USD"
}, - "number": 0,
- "outstanding": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "paidPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
], - "stage": "string",
- "status": "string",
- "termMonths": 0,
- "totalOutstanding": {
- "amount": 1200,
- "currency": "USD"
}
}Applies a repayment amount against the loan, allocating first to accrued interest then to outstanding principal per the amortisation schedule. Posts the corresponding accounting entries (debit cash/settlement account, credit loan asset and interest income). Returns the updated loan view reflecting the new outstanding balance and schedule position. The loan moves to CLOSED automatically when outstanding principal reaches zero. Requires loan:repay.
| id required | string <uuid> |
| amount required | number Repayment amount (must be positive) |
| currency required | string ISO-4217 currency code, e.g. USD or ZWG |
{- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "annualRate": 0,
- "borrowerPartyId": "56224224-2e3f-481a-8833-e1de3e42077e",
- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "disbursedOn": "string",
- "disbursementAccountId": "a7910dc9-e839-4ef1-ad85-fab54d0e931e",
- "frequency": "string",
- "interestMethod": "string",
- "loanId": "7f89c4c5-c1d0-4b4b-ae8c-fb112b2c21a4",
- "outstandingPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "penaltyAccrued": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionAllowance": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "rejectionReason": "string",
- "repaymentMethod": "string",
- "schedule": [
- {
- "dueDate": "string",
- "interest": {
- "amount": 1200,
- "currency": "USD"
}, - "number": 0,
- "outstanding": {
- "amount": 1200,
- "currency": "USD"
}, - "paidInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "paidPrincipal": {
- "amount": 1200,
- "currency": "USD"
}, - "principal": {
- "amount": 1200,
- "currency": "USD"
}, - "status": "string"
}
], - "stage": "string",
- "status": "string",
- "termMonths": 0,
- "totalOutstanding": {
- "amount": 1200,
- "currency": "USD"
}
}Submits a write-off of the outstanding principal through the maker-checker approval workflow. If policy permits direct execution the loan is written off immediately and 200 is returned with the updated loan view (outstanding principal = 0, status WRITTEN_OFF). Otherwise the operation is parked and 202 Accepted is returned with status PENDING_APPROVAL and the approvalId; a different user with loan:writeoff rights must confirm. Write-off posts the corresponding credit-loss accounting entries on execution. Requires loan:writeoff.
| id required | string <uuid> |
{ }Role catalog management. Roles are named permission bundles assigned to users within the IAM context. Any authenticated staff member may read the catalog; creating, updating, or deactivating roles requires the admin:users authority. A deactivated role remains in the catalog but can no longer be assigned to new users.
Returns every role in the catalog, including inactive ones, with their code, display name, and permission set.
[- {
- "branchBound": true,
- "code": "string",
- "displayName": "string",
- "permissions": [
- "string"
], - "status": "string",
- "tier": "string"
}
]Creates a new role in the catalog with a unique code, display name, and an initial permission set. The code must be unique across all roles. Returns 201 with the newly created role on success. Requires the admin:users authority.
| branchBound | boolean |
| code required | string non-empty |
| displayName required | string non-empty |
| permissions | Array of strings |
| tier | string |
{- "branchBound": true,
- "code": "string",
- "displayName": "string",
- "permissions": [
- "string"
], - "tier": "string"
}{- "branchBound": true,
- "code": "string",
- "displayName": "string",
- "permissions": [
- "string"
], - "status": "string",
- "tier": "string"
}Returns one role identified by its unique code. Returns 404 if no role with that code exists.
| code required | string Unique role code (e.g. TELLER, BRANCH_MANAGER) |
{- "branchBound": true,
- "code": "string",
- "displayName": "string",
- "permissions": [
- "string"
], - "status": "string",
- "tier": "string"
}Fully replaces a role's display name and permission set. The role code itself is immutable. Returns the updated role view. Returns 404 if the role does not exist. Requires the admin:users authority.
| code required | string Unique role code identifying the role to update |
| branchBound | boolean |
| displayName required | string non-empty |
| permissions | Array of strings |
| tier | string |
{- "branchBound": true,
- "displayName": "string",
- "permissions": [
- "string"
], - "tier": "string"
}{- "branchBound": true,
- "code": "string",
- "displayName": "string",
- "permissions": [
- "string"
], - "status": "string",
- "tier": "string"
}Marks a role as inactive so it can no longer be assigned to users. Existing user-role assignments are not removed, but the role will not grant permissions once deactivated (enforcement depends on the IAM evaluation policy). Returns the updated role view with its inactive status. Requires the admin:users authority.
| code required | string Unique role code identifying the role to deactivate |
{- "branchBound": true,
- "code": "string",
- "displayName": "string",
- "permissions": [
- "string"
], - "status": "string",
- "tier": "string"
}AML transaction-monitoring alerts raised by the rule engine and their disposition workflow. Reads (list, get) require aml:read. Alert disposition actions (review, clear, escalate) require aml:operate and record the acting analyst's identity for audit trail.
Returns all AML alerts, optionally filtered to a single status value (e.g. OPEN, UNDER_REVIEW, CLEARED, ESCALATED). Pass no status parameter to retrieve alerts in every state.
| status | string Filter by alert status (e.g. OPEN, UNDER_REVIEW, CLEARED, ESCALATED). Omit to return all alerts. |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "alertId": "a9367074-b5c3-42c4-9be4-be129f43577e",
- "businessDate": "string",
- "disposedBy": "string",
- "disposition": "string",
- "narrative": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "raisedAt": "string",
- "ruleCode": "string",
- "ruleType": "string",
- "severity": "string",
- "status": "string",
- "triggeringTxnIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]Returns a single AML alert by its id, or 404 if no alert has that id.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "alertId": "a9367074-b5c3-42c4-9be4-be129f43577e",
- "businessDate": "string",
- "disposedBy": "string",
- "disposition": "string",
- "narrative": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "raisedAt": "string",
- "ruleCode": "string",
- "ruleType": "string",
- "severity": "string",
- "status": "string",
- "triggeringTxnIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}Resolves the alert as a false positive or no-action, transitioning it to CLEARED. An optional reason may be supplied in the request body as { "reason": "..." } and is persisted to the audit trail alongside the clearing analyst's identity. Requires aml:operate.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Escalates the alert (e.g. for STR filing or senior review), transitioning it to ESCALATED. An optional reason may be supplied in the request body as { "reason": "..." } and is persisted to the audit trail alongside the escalating analyst's identity. Requires aml:operate.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Transitions the alert to UNDER_REVIEW, indicating that an analyst has taken ownership of it. The acting user's identity (from the JWT/session) is recorded for the audit trail. Requires aml:operate.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Customer onboarding lifecycle — prospect registration, KYC document collection, sanctions/PEP screening, and final activation. Orchestrates the Party, Document, and Risk contexts behind a single process facade. All endpoints require the onboarding:process authority.
Registers a new prospect party and opens the onboarding process. Returns 201 with the initial consolidated status view (identity details + document checklist + screening state + readiness flags). The returned partyId must be used for all subsequent onboarding steps. Not idempotent — each call creates a distinct party record.
| cddTier required | string non-empty |
| displayName required | string non-empty |
| type required | string non-empty |
{- "cddTier": "string",
- "displayName": "string",
- "type": "string"
}{- "blockers": [
- "string"
], - "cddTier": "string",
- "checklist": [
- {
- "documentType": "string",
- "present": true,
- "verified": true
}
], - "checklistComplete": true,
- "displayName": "string",
- "kycStatus": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "partyStatus": "string",
- "readyToActivate": true,
- "screeningPassed": true,
- "screeningStatus": "string"
}Returns the current consolidated onboarding state for the given party: identity data, document checklist progress, screening outcome, and overall readiness to complete. Safe/idempotent read — no state transitions are triggered.
| partyId required | string <uuid> |
{- "blockers": [
- "string"
], - "cddTier": "string",
- "checklist": [
- {
- "documentType": "string",
- "present": true,
- "verified": true
}
], - "checklistComplete": true,
- "displayName": "string",
- "kycStatus": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "partyStatus": "string",
- "readyToActivate": true,
- "screeningPassed": true,
- "screeningStatus": "string"
}Activates the prospect party once all onboarding prerequisites are met (documents verified, screening passed, checklist complete). Records the operator or system identity that authorised activation via the 'by' parameter. Throws OnboardingBlockedException (400/422) if any prerequisite is unmet. Returns the final status view with the party in ACTIVE state.
| partyId required | string <uuid> |
| by required | string Username or system identifier of the officer completing onboarding |
{- "blockers": [
- "string"
], - "cddTier": "string",
- "checklist": [
- {
- "documentType": "string",
- "present": true,
- "verified": true
}
], - "checklistComplete": true,
- "displayName": "string",
- "kycStatus": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "partyStatus": "string",
- "readyToActivate": true,
- "screeningPassed": true,
- "screeningStatus": "string"
}Triggers a synchronous sanctions and politically-exposed-person (PEP) check against the party's identity data. Updates the party's screening record and returns the refreshed status view with the new screening outcome. Repeatable — a subsequent call re-runs the check and overwrites the previous result.
| partyId required | string <uuid> |
{- "blockers": [
- "string"
], - "cddTier": "string",
- "checklist": [
- {
- "documentType": "string",
- "present": true,
- "verified": true
}
], - "checklistComplete": true,
- "displayName": "string",
- "kycStatus": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "partyStatus": "string",
- "readyToActivate": true,
- "screeningPassed": true,
- "screeningStatus": "string"
}Stateless interest and fee calculation engine — returns preview quotes without creating any ledger entries or persisting state. Intended for admin/staff product configuration previews, loan origination worksheets, and EOD batch drivers that need a rate quote before posting. All endpoints require product:read.
Calculates a fee amount given a fee type, applicable base amount and product configuration without persisting anything or posting to the ledger. Returns the computed fee and its breakdown so callers can present the charge to the customer or route it into a fee-posting use-case. Idempotent — repeated calls with identical input return identical output.
| baseAmount | number |
| feeType | string |
| fixedAmount | number |
| maxAmount | number |
| minAmount | number |
| rate | number |
{- "baseAmount": 0,
- "feeType": "string",
- "fixedAmount": 0,
- "maxAmount": 0,
- "minAmount": 0,
- "rate": 0
}{- "fee": 0
}Calculates an interest amount for the supplied principal, rate, day-count basis and term without persisting anything or posting to the ledger. The result is a stateless preview that callers (loan origination, deposit accrual preview, admin UI) can display or pass downstream to a posting use-case. Idempotent — repeated calls with identical input return identical output.
| annualRate | number |
| balance | number |
| dayCountBasis | string |
| days | integer <int32> |
| tiered | boolean |
Array of objects (Band) |
{- "annualRate": 0,
- "balance": 0,
- "dayCountBasis": "string",
- "days": 0,
- "tiered": true,
- "tiers": [
- {
- "from": 0,
- "rate": 0,
- "to": 0
}
]
}{- "accruedInterest": 0,
- "dayCountBasis": "string",
- "days": 0
}Manages code-list dictionaries (e.g. GENDER, COUNTRY, ID_TYPE, MARITAL_STATUS) used to populate dropdowns and validate enumerated fields across all staff forms. Code lists are low-sensitivity reference data: reads are open to any authenticated user; adding or deactivating values requires the reference:manage authority.
Returns all values in the specified code list. By default only active values are returned, suitable for populating form dropdowns. Pass includeInactive=true to retrieve the full catalogue including deactivated entries (e.g. for auditing or migration purposes).
| codeType required | string Code list identifier (e.g. GENDER, COUNTRY, ID_TYPE) |
| includeInactive | boolean Default: false When true, deactivated values are included in the response alongside active ones |
[- {
- "active": true,
- "code": "string",
- "codeType": "string",
- "name": "string",
- "parentCode": "string",
- "sortOrder": 0
}
]Adds a new active value to the specified code list (e.g. adding a new country or ID-document type). The value is immediately visible to list callers. Requires reference:manage authority. Returns 201 Created with the persisted CodeValueView.
| codeType required | string Code list identifier (e.g. GENDER, COUNTRY, ID_TYPE) |
| code required | string non-empty |
| name required | string non-empty |
| parentCode | string |
| sortOrder | integer <int32> |
{- "code": "string",
- "name": "string",
- "parentCode": "string",
- "sortOrder": 0
}{- "active": true,
- "code": "string",
- "codeType": "string",
- "name": "string",
- "parentCode": "string",
- "sortOrder": 0
}Soft-deletes a specific value within a code list, hiding it from active dropdown queries without permanently removing it. Existing records that already reference the code are unaffected. The value can be re-examined via includeInactive=true on the list endpoint. Requires reference:manage authority. Returns 204 No Content on success.
| codeType required | string |
| code required | string |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Document storage, KYC checklist, verification, and lifecycle management (staff/compliance/operations). Supports upload, retrieval, streaming, and state transitions (verify, archive, legal-hold, soft-delete, purge) for any document attached to a CIF party or credit/account entity. Reads require document:read; all mutations (upload, lifecycle, verify) require document:write or document:verify as indicated.
Returns all documents associated with the given owner reference (party UUID or external ref), across all document types and statuses. Useful for presenting the full document history for a CIF party, account, or credit application.
| ownerRef required | string Party or owner reference whose documents are to be listed |
[- {
- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}
]Persists a new document (metadata + content) and returns the created DocumentView with status PENDING. The document is not yet verified; call POST /{id}/verify to approve or reject it. Requires document:write. Returns 201 Created.
| contentBase64 required | string non-empty |
| contentType required | string non-empty |
| documentNumber | string |
| documentType required | string non-empty |
| expiryDate | string <date> |
| fileName required | string non-empty |
| issueDate | string <date> |
| issuingCountry | string |
| ownerRef required | string non-empty |
| retainUntil | string <date> |
{- "contentBase64": "string",
- "contentType": "string",
- "documentNumber": "string",
- "documentType": "string",
- "expiryDate": "2019-08-24",
- "fileName": "string",
- "issueDate": "2019-08-24",
- "issuingCountry": "string",
- "ownerRef": "string",
- "retainUntil": "2019-08-24"
}{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Returns the required-document checklist for an owner (party reference) at a given Customer Due Diligence tier (e.g. BASIC, ENHANCED). Each checklist item shows the document type, whether it has been supplied, and whether a supplied copy has been verified. Used by onboarding and compliance workflows to determine documentation gaps.
| ownerRef required | string Party or owner reference (e.g. CIF party UUID or external ref) |
| cddTier required | string CDD tier level, e.g. BASIC or ENHANCED |
{- "cddTier": "string",
- "complete": true,
- "items": [
- {
- "documentType": "string",
- "present": true,
- "required": true,
- "verified": true
}
], - "ownerRef": "string"
}Physically removes the document record and its stored content bytes from all stores. This is irreversible. The operation is refused (throws) if the document is currently on legal hold or if the regulatory retention period has not yet elapsed. Returns 204 No Content on success. Requires document:write.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Returns the DocumentView for the given id, or 404 if not found.
| id required | string <uuid> |
{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Moves a document to the ARCHIVED state, indicating it is no longer active but must be retained for the regulatory retention period. Archived documents are read-only; they can still be downloaded and their content is preserved. Requires document:write.
| id required | string <uuid> |
{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Streams the raw document bytes from the configured content store (filesystem, S3, or DB BLOB). The response Content-Type mirrors the stored MIME type and the Content-Disposition header is set to attachment with the original file name, so browsers prompt a download. The document must not be purged.
| id required | string <uuid> |
"string"Marks the document as deleted (logical deletion) and records the identity of the actor in 'by'. The document record and content are retained in storage for the retention period but are excluded from normal queries. A soft-deleted document cannot be further modified. Requires document:write.
| id required | string <uuid> |
| by required | string Username or staff ID of the person requesting deletion |
{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Applies a legal hold flag to the document, preventing archival, soft-deletion, and purge until the hold is released. Typically triggered by a litigation or regulatory preservation notice. Requires document:write.
| id required | string <uuid> |
{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Removes the legal hold flag, allowing the document to proceed through normal lifecycle transitions (archive, soft-delete, purge) again. Requires document:write.
| id required | string <uuid> |
{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Records an approval or rejection decision on a PENDING document. When approved=true the document transitions to VERIFIED; when false it transitions to REJECTED. The verifier identity is captured via the 'by' parameter for audit. Returns the updated DocumentView. Requires document:verify.
| id required | string <uuid> |
| approved required | boolean true to approve, false to reject |
| by required | string Username or staff ID of the person performing verification |
{- "capturedAt": "string",
- "contentHash": "string",
- "contentType": "string",
- "deleted": true,
- "documentNumber": "string",
- "documentType": "string",
- "expired": true,
- "expiryDate": "string",
- "fileName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "issueDate": "string",
- "issuingCountry": "string",
- "legalHold": true,
- "ownerRef": "string",
- "retainUntil": "string",
- "scanStatus": "string",
- "sizeBytes": 0,
- "status": "string",
- "supersedesId": "688cf67a-2e6c-4e49-8750-5bc8809fcd6f",
- "verifiedAt": "string",
- "verifiedBy": "string",
- "versionNo": 0
}Regulatory reporting surfaces for Anti-Money-Laundering compliance. Exposes read-only report views consumed by compliance officers and automated regulatory-submission pipelines. All endpoints require the aml:report authority; no write operations are exposed here — alerts and cases are managed through the AML case-management context.
Returns all Currency Transaction Report (CTR) records whose transaction date falls within the inclusive [from, to] date range. CTRs cover cash transactions that meet or exceed the regulatory reporting threshold (typically USD 10 000 equivalent). The list is used by compliance officers to prepare submissions to the Financial Intelligence Unit (FIU). Read-only; no side effects.
| from required | string <date> Inclusive start date (ISO-8601, e.g. 2024-01-01) |
| to required | string <date> Inclusive end date (ISO-8601, e.g. 2024-01-31) |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "baseAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "businessDate": "string",
- "channel": "string",
- "direction": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "txnId": "91d8f63c-f43b-4c39-9a13-1ef8d3aaa614"
}
]Returns the full Suspicious Transaction Report (STR) associated with a given AML case id. An STR is generated when an AML case is escalated and filed with the regulator. Returns 404 if no case with that id exists or no STR has been filed yet for that case. Read-only; no side effects.
| caseId required | string <uuid> |
{- "alerts": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "alertId": "a9367074-b5c3-42c4-9be4-be129f43577e",
- "businessDate": "string",
- "disposedBy": "string",
- "disposition": "string",
- "narrative": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "raisedAt": "string",
- "ruleCode": "string",
- "ruleType": "string",
- "severity": "string",
- "status": "string",
- "triggeringTxnIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "caseId": "af51d69f-996a-4891-a745-aadfcdec225a",
- "generatedAt": "string",
- "narrative": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "reference": "string"
}Tax-rate registry and real-time tax computation. Maintains named tax rates (e.g. VAT, WHT) that are versioned by their short code; each rate can be activated or deactivated independently so that rate changes are auditable and reversible. The compute endpoint is used by other contexts (lending, fees, payments) to apply the correct effective rates to a monetary amount at transaction time. Reads require tax:read; create/activate/deactivate require tax:manage.
Applies one or more active tax rates to the monetary amount supplied in the command and returns a breakdown of each rate's contribution plus the aggregate tax total. This is a pure calculation — no postings or state changes occur. Used by lending, payments, and fee contexts at transaction time. Requires tax:read.
| baseAmount | number |
| taxCode | string |
{- "baseAmount": 0,
- "taxCode": "string"
}{- "base": 0,
- "grossAmount": 0,
- "inclusive": true,
- "netAmount": 0,
- "rate": 0,
- "taxAmount": 0,
- "taxCode": "string",
- "taxType": "string"
}Returns the full registry of tax rates (active and inactive) with their codes, percentages, and current status.
[- {
- "active": true,
- "code": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "inclusive": true,
- "name": "string",
- "rate": 0,
- "taxType": "string"
}
]Registers a new named tax rate in the system. The rate starts INACTIVE; call the activate endpoint to make it effective for computation. Returns 201 with the persisted rate view. Requires tax:manage.
| code required | string non-empty |
| inclusive | boolean |
| name required | string non-empty |
| rate required | number |
| taxType required | string non-empty |
{- "code": "string",
- "inclusive": true,
- "name": "string",
- "rate": 0,
- "taxType": "string"
}{- "active": true,
- "code": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "inclusive": true,
- "name": "string",
- "rate": 0,
- "taxType": "string"
}Returns a single tax rate identified by its short code (e.g. VAT, WHT15), or 404 if no rate with that code exists.
| code required | string Short alphanumeric tax rate code, e.g. VAT or WHT15 |
{- "active": true,
- "code": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "inclusive": true,
- "name": "string",
- "rate": 0,
- "taxType": "string"
}Transitions a tax rate to ACTIVE status so that it is applied by the compute endpoint. Activating an already-active rate is a no-op. Returns the updated rate view. Requires tax:manage.
| code required | string Short alphanumeric tax rate code to activate |
{- "active": true,
- "code": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "inclusive": true,
- "name": "string",
- "rate": 0,
- "taxType": "string"
}Transitions a tax rate to INACTIVE status so that it is excluded from future computations. In-flight transactions already computed at this rate are unaffected. Deactivating an already-inactive rate is a no-op. Returns the updated rate view. Requires tax:manage.
| code required | string Short alphanumeric tax rate code to deactivate |
{- "active": true,
- "code": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "inclusive": true,
- "name": "string",
- "rate": 0,
- "taxType": "string"
}EOD batch orchestration and audit. This API triggers the nightly close pipeline, which sequences accruals, provisioning, card settlement, fee posting, and business-date advance. It also exposes read access to past run records and the current business date. Reads require reporting:read; triggering a run requires eod:run.
Executes the full end-of-day pipeline for the given business date (or the current business date when omitted). The pipeline sequences: interest accrual, IFRS-9 provisioning, card-settlement reclass, fee posting, and business-date advance. The call is synchronous and returns only after all steps complete. Re-triggering for a date that already has a successful run is rejected by the domain. Requires eod:run authority.
| businessDate | string <date> Business date to close (ISO-8601, e.g. 2025-12-31). Omit to close the current business date. |
{- "businessDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "string",
- "steps": [
- {
- "message": "string",
- "name": "string",
- "processedCount": 0,
- "status": "string"
}
]
}Returns the audit history of every EOD run in reverse-chronological order, including status, business date, and step timings.
[- {
- "businessDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "string",
- "steps": [
- {
- "message": "string",
- "name": "string",
- "processedCount": 0,
- "status": "string"
}
]
}
]Returns the full detail of one EOD run record, or 404 if the id is not found.
| id required | string <uuid> |
{- "businessDate": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "string",
- "steps": [
- {
- "message": "string",
- "name": "string",
- "processedCount": 0,
- "status": "string"
}
]
}General ledger: double-entry journal posting, batch posting, reversals, and account balance queries. All writes that originate from a human operator are subject to maker-checker four-eyes control when the approvals gateway is present (monolith deployment) — they return 202 Accepted and only hit the GL on a checker's approval. System-generated postings from deposits or lending call the use cases in-process and bypass this gate. Reads require journal:read; posting requires journal:post; reversals require journal:reverse.
Returns the current ledger balance for the given account in the requested currency, including available balance, book balance, and any hold amounts. The balance is computed from posted journal entries; pending maker-checker items are not reflected. Requires journal:read authority.
| accountId required | string <uuid> |
| currency required | string ISO 4217 currency code (e.g. USD, ZWG) for the balance to retrieve |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "baseNet": {
- "amount": 1200,
- "currency": "USD"
}, - "credits": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "debits": {
- "amount": 1200,
- "currency": "USD"
}, - "net": {
- "amount": 1200,
- "currency": "USD"
}
}Returns the most recent posted journal entries in descending chronological order, capped to the requested limit (min 1, max 500, default 100). Only entries already committed to the GL are returned — pending maker-checker approvals are not visible here.
| limit | integer <int32> Default: 100 Maximum number of entries to return (1–500, default 100) |
[- {
- "businessDate": "2019-08-24",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "direction": "DEBIT"
}
], - "postedAt": "2019-08-24T14:15:22Z",
- "reference": "string",
- "reversalOf": "e31188c1-91d1-4ccc-981a-2c729bd751bc",
- "sequenceNo": 0,
- "status": "string",
- "valueDate": "2019-08-24"
}
]Captures a balanced double-entry journal. When the maker-checker approvals gateway is present (monolith deployment) the entry is parked for checker authorization and 202 Accepted is returned with an approvalId; the GL is only updated when a checker approves the request via the approvals context. In a standalone ledger deployment (no gateway) the entry is posted immediately and 201 Created is returned with the new entryId. The request body must contain balanced debit and credit lines. Requires journal:post authority.
| businessDate | string <date> |
| idempotencyKey | string |
required | Array of objects (PostingCommand) non-empty |
| reference | string |
| valueDate | string <date> |
{- "businessDate": "2019-08-24",
- "idempotencyKey": "string",
- "lines": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "direction": "DEBIT"
}
], - "reference": "string",
- "valueDate": "2019-08-24"
}{ }Captures multiple balanced journal entries in a single atomic transaction. The same maker-checker gate applies as for a single entry: when the approvals gateway is present all entries in the batch are parked together under one approvalId (202 Accepted); on approval they are all posted atomically. Without the gateway they are committed immediately and 201 Created is returned with the list of new entryIds. The batch must contain at least one entry and every entry must be individually balanced. Requires journal:post authority.
required | Array of objects (PostJournalEntryCommand) non-empty |
{- "entries": [
- {
- "businessDate": "2019-08-24",
- "idempotencyKey": "string",
- "lines": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "direction": "DEBIT"
}
], - "reference": "string",
- "valueDate": "2019-08-24"
}
]
}{ }Returns a single posted journal entry with all its posting lines. Returns 404 if no entry with the given id exists.
| id required | string <uuid> |
{- "businessDate": "2019-08-24",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "direction": "DEBIT"
}
], - "postedAt": "2019-08-24T14:15:22Z",
- "reference": "string",
- "reversalOf": "e31188c1-91d1-4ccc-981a-2c729bd751bc",
- "sequenceNo": 0,
- "status": "string",
- "valueDate": "2019-08-24"
}Creates a mirror-image reversal of the identified journal entry (each debit leg becomes a credit and vice versa), effectively cancelling it from the GL. This is a privileged correction operation. When the approvals gateway is present the reversal is submitted for four-eyes authorization (202 Accepted with an approvalId) and only executed by LedgerJournalExecutor on checker approval. In a standalone deployment it posts immediately and returns 201 Created with the new reversalEntryId. An optional free-text reason should be supplied for audit trail purposes. Requires journal:reverse authority.
| id required | string <uuid> |
| reason | string Free-text reason for the reversal, recorded on the audit trail |
{ }Deposit account lifecycle, money movement, holds, mandates, interest and fee management (staff/operations). Accounts can be CURRENT, SAVINGS, or any other product-configured type. Balance mutations (deposit, withdraw, transfer, holds, fees, interest capitalization) each generate a double-entry ledger posting. Reads require account:read; state transitions and balance mutations require account:maintain; opening requires account:open; closing requires account:close. All reads are branch-scoped — callers only see accounts belonging to their branch.
Returns summary views of all deposit accounts visible to the caller's branch. Accounts belonging to other branches are silently filtered out by BranchContext.
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}
]Creates a new deposit account for the given party under the specified product and currency. The account is stamped with the caller's branch via BranchContext and starts in a pending/inactive state until explicitly activated. Returns 201 Created with the full account detail view.
| branchId | string <uuid> |
| currency required | string non-empty |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| ownerPartyId required | string <uuid> |
| productId required | string <uuid> |
| title required | string non-empty |
{- "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "title": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Atomically debits the source account and credits the destination account for the specified amount. Both accounts must be ACTIVE. Posts a matched DEBIT/CREDIT pair to the ledger. Returns 204 No Content on success. Not idempotent — duplicate calls will post duplicate entries.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryId | string <uuid> |
| fromAccountId required | string <uuid> |
| idempotencyKey | string |
| narrative | string |
| toAccountId required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "fromAccountId": "bfc0ca59-4255-47db-ba7f-bed1e37954c5",
- "idempotencyKey": "string",
- "narrative": "string",
- "toAccountId": "a5e9f764-e2f6-4d69-81d7-69120b87b71e"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Returns the full detail view of a single deposit account including balances, status, product, mandates and active holds. Returns 404 if the account does not exist or belongs to a branch the caller cannot see.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Runs interest accrual for the account over the specified number of days using the product's configured interest rate. Accrued interest is held in an accrual bucket and does not affect available balance until capitalized. Returns the updated account detail view.
| id required | string <uuid> |
| days | integer <int32> Default: 1 Number of days to accrue interest for (default 1) |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Transitions the account from its initial/pending state to ACTIVE, enabling deposits, withdrawals and transfers. Returns the updated account detail view.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Suspends the account (e.g. due to fraud, AML freeze or customer request), preventing all debit and credit movements until unblocked. Returns the updated account detail view.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Posts the accumulated accrued interest to the account's ledger balance as a CREDIT entry, resetting the accrual bucket to zero. Typically run at month-end or quarter-end as part of EOD processing. Returns the updated account detail view.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Debits a fee from the account and posts a DEBIT ledger entry under the fee income GL. The fee type and amount are specified in the request body. The account must be ACTIVE. Returns the updated account detail view.
| id required | string <uuid> |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| feeCode required | string non-empty |
{- "base": {
- "amount": 1200,
- "currency": "USD"
}, - "feeCode": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Permanently closes the account (terminal state). The account must have a zero balance before closing; any active holds must be released first. A closed account cannot be reopened. Requires account:close authority. Returns the updated account detail view.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Credits the specified amount to the account's available balance and posts a CREDIT ledger entry. The account must be in ACTIVE status. Returns the updated account detail view.
| id required | string <uuid> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryId | string <uuid> |
| channel | string |
| chargeTransactionCode | string |
| idempotencyKey | string |
| narrative | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "channel": "string",
- "chargeTransactionCode": "string",
- "idempotencyKey": "string",
- "narrative": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Places the account in a FROZEN state — a stricter restriction than BLOCKED that typically reflects a court order or regulatory directive. Frozen accounts reject all credits and debits. Returns the updated account detail view.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Earmarks (ring-fences) a portion of the account's available balance for a specific purpose, such as a pending payment, guarantee, or collateral. The held amount reduces available balance but does not yet post a ledger entry. Returns the updated account detail view including the new hold.
| id required | string <uuid> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| placedBy | string |
| reason required | string non-empty |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "placedBy": "string",
- "reason": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Removes an active balance hold, returning the earmarked amount to available balance. Returns the updated account detail view.
| id required | string <uuid> |
| holdId required | string <uuid> ID of the hold to release |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Adds a new mandate (authorized signatory or instruction) to the account. Mandates govern who may instruct debits or other account operations outside of direct teller/staff channels. Returns the updated account detail view with the new mandate included.
| id required | string <uuid> |
| partyId required | string <uuid> |
| role required | string non-empty |
{- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Returns a formal account statement covering the inclusive date range [from, to]. Includes opening balance, all posted transactions within the period, and closing balance. Both dates are ISO-8601 (yyyy-MM-dd).
| id required | string <uuid> |
| from required | string <date> Statement start date (inclusive), ISO-8601 yyyy-MM-dd |
| to required | string <date> Statement end date (inclusive), ISO-8601 yyyy-MM-dd |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "closingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "fromDate": "string",
- "lines": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "bookingDate": "string",
- "channel": "string",
- "currency": "string",
- "direction": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "journalEntryId": "72600ee4-b304-47f3-89cd-f685d2692490",
- "narrative": "string",
- "postedAt": "string",
- "runningBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "transactionCode": "string",
- "valueDate": "string"
}
], - "openingBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "toDate": "string",
- "totalCredits": {
- "amount": 1200,
- "currency": "USD"
}, - "totalDebits": {
- "amount": 1200,
- "currency": "USD"
}
}Returns all posted ledger transactions for the account in chronological order, including deposits, withdrawals, transfers, fees and interest entries.
| id required | string <uuid> |
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "bookingDate": "string",
- "channel": "string",
- "currency": "string",
- "direction": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "journalEntryId": "72600ee4-b304-47f3-89cd-f685d2692490",
- "narrative": "string",
- "postedAt": "string",
- "runningBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "transactionCode": "string",
- "valueDate": "string"
}
]Returns a BLOCKED account to ACTIVE status, re-enabling money movement. Returns the updated account detail view.
| id required | string <uuid> |
{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Debits the specified amount from the account's available balance and posts a DEBIT ledger entry. The account must be ACTIVE and have sufficient available balance (considering any active holds). Overdraft up to the configured limit is allowed where the product permits. Returns the updated account detail view.
| id required | string <uuid> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryId | string <uuid> |
| channel | string |
| chargeTransactionCode | string |
| idempotencyKey | string |
| narrative | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "channel": "string",
- "chargeTransactionCode": "string",
- "idempotencyKey": "string",
- "narrative": "string"
}{- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "accountNumber": "string",
- "accruedInterest": {
- "amount": 1200,
- "currency": "USD"
}, - "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "branchId": "712f308d-801e-48bc-b072-9c404734ceb7",
- "currency": "string",
- "holdTotal": {
- "amount": 1200,
- "currency": "USD"
}, - "holds": [
- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "placedBy": "string",
- "reason": "string",
- "status": "string"
}
], - "mandates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "role": "string"
}
], - "overdraftLimit": {
- "amount": 1200,
- "currency": "USD"
}, - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string",
- "title": "string"
}Charge catalog management (pricing / fee schedule). Each charge is identified by a short alphanumeric code and carries its amount, currency, charge type, and active/inactive status. Charges in the catalog are referenced by other contexts (loans, transactions, cards) when pricing events are applied. Reads are open to any authenticated staff member; creating, updating, and toggling active status require the pricing:manage authority.
Returns the full charge catalog — both active and inactive entries — ordered by charge code.
[- {
- "active": true,
- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}
]Adds a new charge to the catalog. The charge code must be unique; a conflict will be rejected. The new charge starts in ACTIVE status and is immediately available for referencing by other contexts. Requires pricing:manage authority.
| amount | number |
| bearerDefault | string |
| category | string |
| chargeCode required | string non-empty |
| glPurpose | string |
| maxAmount | number |
| method required | string non-empty |
| minAmount | number |
| name required | string non-empty |
| rate | number |
| reversible | boolean |
| taxClass | string |
| waivable | boolean |
{- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}{- "active": true,
- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}Returns a single charge identified by its unique charge code. Returns 404 if no charge with that code exists in the catalog.
| code required | string Unique alphanumeric charge code (e.g. TXN_FEE_USD) |
{- "active": true,
- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}Replaces the mutable fields (amount, currency, description, charge type) of an existing charge. The charge code itself is immutable and taken from the path. Returns 404 if the code does not exist. Active/inactive state is not affected — use the dedicated activate/deactivate endpoints for that. Requires pricing:manage authority.
| code required | string Unique alphanumeric charge code identifying the charge to update |
| amount | number |
| bearerDefault | string |
| category | string |
| chargeCode required | string non-empty |
| glPurpose | string |
| maxAmount | number |
| method required | string non-empty |
| minAmount | number |
| name required | string non-empty |
| rate | number |
| reversible | boolean |
| taxClass | string |
| waivable | boolean |
{- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}{- "active": true,
- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}Moves an INACTIVE charge back to ACTIVE status, making it available again for new pricing events. Idempotent-safe if the charge is already active. Returns the updated charge view. Requires pricing:manage authority.
| code required | string |
{- "active": true,
- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}Moves a charge to INACTIVE status. Inactive charges are excluded from new pricing events but remain in the catalog for historical reference. Returns the updated charge view. Requires pricing:manage authority.
| code required | string |
{- "active": true,
- "amount": 0,
- "bearerDefault": "string",
- "category": "string",
- "chargeCode": "string",
- "glPurpose": "string",
- "maxAmount": 0,
- "method": "string",
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "reversible": true,
- "taxClass": "string",
- "waivable": true
}Reference catalog of payment rails (schemes) supported by the platform — e.g. RTGS, SWIFT, ZIPIT, VISA, Mastercard. Adding a new rail is a data operation on this resource, not a code change. Reads are available to any principal with payment:read; creating/updating and toggling active state require reference:manage.
Returns the full catalog of registered payment rails, both active and inactive.
[- {
- "active": true,
- "allowedCurrencies": [
- "string"
], - "connectorKey": "string",
- "name": "string",
- "requiredBeneficiaryFields": [
- "string"
], - "schemeCode": "string",
- "scope": "string",
- "screeningRequired": true,
- "settlement": "string",
- "supportsInbound": true,
- "supportsOutbound": true,
- "transactionCodeIn": "string",
- "transactionCodeOut": "string"
}
]Upserts a payment scheme: inserts it when the code does not yet exist, otherwise replaces its metadata (name, description, limits, fee rules, etc.). The scheme is created in an inactive state if new; existing state is preserved on update. Responds 201 Created in both cases.
| allowedCurrencies | Array of strings |
| connectorKey | string |
| name required | string non-empty |
| requiredBeneficiaryFields | Array of strings |
| schemeCode required | string non-empty |
| scope required | string non-empty |
| screeningRequired | boolean |
| settlement required | string non-empty |
| supportsInbound | boolean |
| supportsOutbound | boolean |
| transactionCodeIn | string |
| transactionCodeOut | string |
{- "allowedCurrencies": [
- "string"
], - "connectorKey": "string",
- "name": "string",
- "requiredBeneficiaryFields": [
- "string"
], - "schemeCode": "string",
- "scope": "string",
- "screeningRequired": true,
- "settlement": "string",
- "supportsInbound": true,
- "supportsOutbound": true,
- "transactionCodeIn": "string",
- "transactionCodeOut": "string"
}{- "active": true,
- "allowedCurrencies": [
- "string"
], - "connectorKey": "string",
- "name": "string",
- "requiredBeneficiaryFields": [
- "string"
], - "schemeCode": "string",
- "scope": "string",
- "screeningRequired": true,
- "settlement": "string",
- "supportsInbound": true,
- "supportsOutbound": true,
- "transactionCodeIn": "string",
- "transactionCodeOut": "string"
}Returns a single payment scheme identified by its short code (e.g. "RTGS", "SWIFT"). Returns 404 if no scheme is registered under that code.
| code required | string Short mnemonic code that uniquely identifies the payment rail (e.g. RTGS, SWIFT, ZIPIT). |
{- "active": true,
- "allowedCurrencies": [
- "string"
], - "connectorKey": "string",
- "name": "string",
- "requiredBeneficiaryFields": [
- "string"
], - "schemeCode": "string",
- "scope": "string",
- "screeningRequired": true,
- "settlement": "string",
- "supportsInbound": true,
- "supportsOutbound": true,
- "transactionCodeIn": "string",
- "transactionCodeOut": "string"
}Marks the scheme as active so that payment orders may be routed over it. Only active schemes are selectable at payment-order origination. Safe to call on an already-active scheme.
| code required | string Short mnemonic code of the scheme to activate. |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Marks the scheme as inactive so that no new payment orders can be routed over it. In-flight orders already assigned to the scheme are not affected. Safe to call on an already-inactive scheme.
| code required | string Short mnemonic code of the scheme to deactivate. |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Initiates and tracks money movements between accounts (internal book transfers, intra-bank, and outbound external transfers). Transfers below the configured approval threshold settle inline and return 201 with the completed transfer record. Transfers at or above the threshold are submitted to the maker-checker approval workflow and return 202 with an approvalId; the transfer is replayed automatically when the checker approves. Outbound transfers (to an external account number or a beneficiary of type EXTERNAL) additionally require the transfer:outbound authority. Read access requires transfer:read; initiating a transfer requires transfer:operate.
Returns all funds transfers visible to the caller — both settled inline transfers and those pending or completed via the approval workflow.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "channel": "string",
- "createdAt": "string",
- "createdBy": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "executionRef": "string",
- "failureReason": "string",
- "narrative": "string",
- "payeeId": "79417842-2e1e-4110-a361-89b9f39b36ed",
- "reference": "string",
- "status": "string",
- "transferId": "e240f72a-b0bc-4f57-ab86-5b78f1d8ea9b",
- "type": "string"
}
]Submits a funds transfer instruction. Two outcomes are possible depending on the transfer amount relative to the configured approval threshold: • Below threshold — the transfer settles inline: accounts are debited/credited immediately and the completed TransferView is returned with HTTP 201. • At or above threshold — the instruction is routed to the maker-checker approval workflow and HTTP 202 is returned with the approvalId; the actual debit/credit occurs when a checker approves the request. Outbound transfers (externalAccountNumber supplied, or payeeId resolving to an EXTERNAL beneficiary) additionally require the transfer:outbound authority; absence of that authority yields 403 before any amount check.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| channel | string |
| commissionBeneficiaryId | string <uuid> |
| creditorAccountId | string <uuid> |
| debtorAccountId required | string <uuid> |
| externalAccountNumber | string |
| externalBankCode | string |
| externalName | string |
| idempotencyKey | string |
| narrative | string |
| payeeId | string <uuid> |
| rail | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "channel": "string",
- "commissionBeneficiaryId": "685a0a60-e9f6-4d44-a20e-f99579bec930",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "externalAccountNumber": "string",
- "externalBankCode": "string",
- "externalName": "string",
- "idempotencyKey": "string",
- "narrative": "string",
- "payeeId": "79417842-2e1e-4110-a361-89b9f39b36ed",
- "rail": "string"
}{ }Returns the transfer record for the given id, or 404 if no transfer exists with that id.
| id required | string <uuid> Transfer id |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "channel": "string",
- "createdAt": "string",
- "createdBy": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "executionRef": "string",
- "failureReason": "string",
- "narrative": "string",
- "payeeId": "79417842-2e1e-4110-a361-89b9f39b36ed",
- "reference": "string",
- "status": "string",
- "transferId": "e240f72a-b0bc-4f57-ab86-5b78f1d8ea9b",
- "type": "string"
}Admin REST over the authorization matrix (maker-checker rules) that governs every dual-control operation in the system. Each rule maps an operation type to the number and role of approvers required before the operation is committed. Reads require approval:view; creating, replacing, or removing rules requires admin:users — changes take effect immediately and apply to all pending and future approval requests.
Returns the complete authorization matrix — every approval rule with its operation type, required approver count, and eligible approver roles.
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "minAmount": 0,
- "minTier": "string",
- "operation": "string",
- "requiredApprovals": 0
}
]Adds a new rule to the authorization matrix. The rule binds an operation type to the minimum number of approvers and the role(s) permitted to approve it. Once created the rule governs all subsequent maker-checker requests of that operation type. Returns the generated rule id.
| minAmount required | number |
| minTier required | string non-empty |
| operation required | string non-empty |
| requiredApprovals | integer <int32> >= 0 |
{- "minAmount": 0,
- "minTier": "string",
- "operation": "string",
- "requiredApprovals": 0
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Permanently removes an approval rule from the authorization matrix. After deletion, operations of that type are no longer subject to maker-checker control. In-flight approval requests linked to the deleted rule may be rejected or auto-approved depending on system configuration. Returns 204 No Content on success.
| id required | string <uuid> |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Fully replaces an existing approval rule (all fields from the command body overwrite the stored rule). The change applies immediately — any pending approval request governed by this rule continues under the previous quorum until re-evaluated. Returns 204 No Content on success.
| id required | string <uuid> |
| minAmount required | number |
| minTier required | string non-empty |
| operation required | string non-empty |
| requiredApprovals | integer <int32> >= 0 |
{- "minAmount": 0,
- "minTier": "string",
- "operation": "string",
- "requiredApprovals": 0
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Staff-facing digital-banking onboarding (channel enrolment). Enrolment provisions a party for self-service digital access (mobile/internet banking). All operations require the channel:manage authority and run on the staff JWT chain.
Returns every customer channel enrolment with its current status.
[- {
- "channel": "string",
- "failedAttempts": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifier": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "status": "string"
}
]Provisions a party for digital-channel access (mobile/internet banking). The command must reference a valid party in the CIF. On success the enrolment is created in a pending or active state depending on channel configuration. Returns 201 with the new enrolment view.
| channel | string |
| identifier required | string non-empty |
| partyId required | string <uuid> |
| secret required | string non-empty |
{- "channel": "string",
- "identifier": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "secret": "string"
}{- "channel": "string",
- "failedAttempts": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identifier": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "status": "string"
}Clears a lock on an enrolled customer's digital-channel access (e.g. after too many failed PIN/password attempts). The party must already have an enrolment record; if the enrolment is not locked the call is a no-op.
| partyId required | string <uuid> Party (customer) id whose channel access lock should be cleared |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Issues and verifies one-time passcodes used for channel step-up authentication (e.g. transaction confirmation, sensitive-action re-auth). Each OTP is scoped to a party + purpose pair and is delivered as a SECURITY-class notification over the requested channel (SMS, email, push). All operations require the notification:operate authority.
Generates a time-limited one-time passcode for the given party and purpose, persists the challenge, and dispatches it as a SECURITY notification over the requested channel (SMS / email / push). Returns an OtpChallengeView carrying the challenge id and channel metadata. Issuing a new OTP for the same party + purpose supersedes any prior pending challenge for that pair.
| channel | string |
| partyId required | string <uuid> |
| purpose required | string |
{- "channel": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "purpose": "string"
}{- "challengeId": "007cfdcc-a46d-4340-a4c6-216ec2e4009c",
- "channel": "string",
- "expiresAt": "string",
- "partyId": "950a3d1f-4657-4e7b-87db-3ff5fa95b5c0",
- "purpose": "string",
- "status": "string"
}Checks whether the submitted code matches the stored challenge for the given partyId and purpose. Returns {"verified": true} on success, {"verified": false} on mismatch or expiry. A successful verification consumes the challenge (single-use). The request body must contain partyId (UUID string), purpose, and code.
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "property1": true,
- "property2": true
}Commission accrual lifecycle — query, settle, batch-sweep, and reverse fee income earned on transactions. Commissions are accrued when fee-bearing transactions are processed and later settled (posted to income) either individually or via a bulk sweep. Reads are open to any authenticated user; all mutations (settle/sweep/reverse) require the pricing:manage authority.
Returns all commission accrual records, optionally filtered to a single beneficiary. When beneficiaryId is omitted every accrual across all beneficiaries is returned; when supplied only accruals belonging to that beneficiary are returned. Accruals include both unsettled (pending income) and already-settled entries.
| beneficiaryId | string <uuid> Restrict results to accruals for this beneficiary (agent, branch, or staff id); omit for all beneficiaries |
[- {
- "accruedOn": "2019-08-24",
- "amount": 0,
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "commissionCode": "string",
- "currency": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "settlementRef": "string",
- "status": "string",
- "transactionCode": "string",
- "transactionRef": "string"
}
]Reverses all commission accruals associated with the given originating transaction reference, unwinding any income postings that were made. Designed for use when the underlying transaction is reversed or voided. Returns a map with key "reversed" and the count of accrual records reversed. Requires pricing:manage authority.
| transactionRef required | string The originating transaction reference whose commissions should be reversed |
{- "property1": 0,
- "property2": 0
}Settles one or more individually specified commission accruals, posting the earned fee income to the appropriate income GL accounts. Each settled accrual transitions from PENDING to SETTLED and cannot be re-settled. Returns the list of settlement records created. Requires pricing:manage authority.
| beneficiaryId required | string <uuid> |
| settlementAccountId | string <uuid> |
{- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2"
}[- {
- "accrualsSettled": 0,
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "currency": "string",
- "netSettled": 0,
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementRef": "string",
- "tax": 0,
- "totalSettled": 0
}
]Bulk-settles every commission accrual that is due on or before the given asOf date (defaults to today when omitted). Each qualifying accrual is posted to income in a single batch run, transitioning from PENDING to SETTLED. Intended for the daily end-of-day commission-settlement job. Returns the full list of settlement records produced by the sweep. Requires pricing:manage authority.
| asOf | string <date> Cut-off date for the sweep; accruals due on or before this date are settled. Defaults to today. |
[- {
- "accrualsSettled": 0,
- "beneficiaryId": "410e5c37-9603-4e5b-81b1-7cb895f362e8",
- "currency": "string",
- "netSettled": 0,
- "settlementAccountId": "341894e0-9bf3-408a-9878-bf1204ed5fb2",
- "settlementRef": "string",
- "tax": 0,
- "totalSettled": 0
}
]Currency directory shared across all contexts (deposits, lending, cards, FX). Every currency picker in a money form resolves against this catalogue. Reads are open to any authenticated user; registering a new currency or designating the institution base/reporting currency requires the reference:manage authority.
Registers a new ISO 4217 currency in the catalogue. The currency code must be unique; attempting to register a duplicate code raises a domain exception. Returns 201 with the newly registered currency view. Requires reference:manage authority.
| code required | string non-empty |
| name required | string non-empty |
| scale | integer <int32> |
{- "code": "string",
- "name": "string",
- "scale": 0
}{- "base": true,
- "code": "string",
- "name": "string",
- "scale": 0,
- "status": "string"
}Returns the currency with the given ISO 4217 code, or 404 if it has not been registered.
| code required | string ISO 4217 currency code (e.g. USD, ZWG) |
{- "base": true,
- "code": "string",
- "name": "string",
- "scale": 0,
- "status": "string"
}Designates the given currency as the institution's base/reporting currency. Any previously designated base currency is cleared atomically. The base currency is used for all regulatory reporting, ledger consolidation and FX revaluation. Returns the updated currency view. Requires reference:manage authority.
| code required | string ISO 4217 code of the currency to designate as base |
{- "base": true,
- "code": "string",
- "name": "string",
- "scale": 0,
- "status": "string"
}Chart of accounts management and GL account lifecycle (finance / back-office operations). Each GL account is identified by a unique alphanumeric code and carries a type (ASSET, LIABILITY, EQUITY, INCOME, EXPENSE) that governs which side of the ledger it sits on. Reads (list, get) require gl:read; account creation and state transitions (activate, deactivate) require gl:manage.
Returns every account in the chart of accounts with its code, name, type, and active status.
[- {
- "active": true,
- "code": "string",
- "ledgerAccountId": "8fd783bf-c51a-434f-9698-99f6050085a9",
- "name": "string",
- "type": "string"
}
]Creates a new account in the chart of accounts. The account code must be unique across the chart. The account is created in an INACTIVE state and must be explicitly activated before postings can be made against it. Returns 201 with the newly created account view.
| code required | string non-empty |
| name required | string non-empty |
| type required | string non-empty |
{- "code": "string",
- "name": "string",
- "type": "string"
}{- "active": true,
- "code": "string",
- "ledgerAccountId": "8fd783bf-c51a-434f-9698-99f6050085a9",
- "name": "string",
- "type": "string"
}Returns a single GL account identified by its unique alphanumeric code, or 404 if no account with that code exists.
| code required | string Unique alphanumeric GL account code (e.g. 1001, CASH-USD) |
{- "active": true,
- "code": "string",
- "ledgerAccountId": "8fd783bf-c51a-434f-9698-99f6050085a9",
- "name": "string",
- "type": "string"
}Moves an INACTIVE GL account to ACTIVE, allowing journal postings to be made against it. Returns the updated account view. Has no effect (idempotent) if the account is already active.
| code required | string GL account code to activate |
{- "active": true,
- "code": "string",
- "ledgerAccountId": "8fd783bf-c51a-434f-9698-99f6050085a9",
- "name": "string",
- "type": "string"
}Moves an ACTIVE GL account to INACTIVE, preventing any further journal postings against it. Existing posted entries on the account are unaffected. Returns the updated account view.
| code required | string GL account code to deactivate |
{- "active": true,
- "code": "string",
- "ledgerAccountId": "8fd783bf-c51a-434f-9698-99f6050085a9",
- "name": "string",
- "type": "string"
}Master list of transaction codes used across the core-banking system to classify and label journal entries, ledger postings, and transaction records (e.g. CASH_DEP, WIRE_OUT, FEE_SERVICE). Downstream modules (payments, lending, deposits) resolve a code at posting time to derive GL category, narrative templates, and regulatory reporting buckets. All authenticated staff can read; creating, updating, or toggling active status requires the reference:manage authority.
Returns every transaction code in the reference master, including inactive ones. No pagination — the dataset is bounded and small.
[- {
- "active": true,
- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}
]Creates a new transaction code in the reference master. The code value must be unique; a conflict results in a 409. On success the newly created record is returned with HTTP 201. Requires the reference:manage authority.
| category | string |
| code required | string non-empty |
| name required | string non-empty |
| reversalCode | string |
| taxable | boolean |
{- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}{- "active": true,
- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}Returns the single transaction code matching the given short code string. Returns 404 if no code with that identifier exists.
| code required | string Short alphanumeric code that uniquely identifies the transaction code (e.g. CASH_DEP, WIRE_OUT). |
{- "active": true,
- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}Replaces the mutable fields (description, GL category, narrative template, etc.) of an existing transaction code. The code identifier itself is immutable. Returns the updated record. Returns 404 if the code does not exist. Requires the reference:manage authority.
| code required | string Short alphanumeric code identifying the transaction code to update. |
| category | string |
| name required | string non-empty |
| reversalCode | string |
| taxable | boolean |
{- "category": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}{- "active": true,
- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}Restores a previously deactivated transaction code to active status, making it selectable for new postings again. Safe to call on an already-active code (no-op on status). Returns the updated record. Returns 404 if the code does not exist. Requires the reference:manage authority.
| code required | string Short alphanumeric code identifying the transaction code to activate. |
{- "active": true,
- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}Marks the transaction code as inactive so it can no longer be selected for new postings. Existing historical records that reference the code are unaffected. Returns the updated record showing the inactive status. Returns 404 if the code does not exist. Requires the reference:manage authority.
| code required | string Short alphanumeric code identifying the transaction code to deactivate. |
{- "active": true,
- "category": "string",
- "code": "string",
- "name": "string",
- "reversalCode": "string",
- "taxable": true
}Card dispute lifecycle management (operations/back-office). Covers the full chargeback cycle: raising a dispute on a card transaction, issuing a provisional credit, filing a chargeback with the scheme, recording representment, escalating for arbitration, resolving with a ruling, and withdrawing a frivolous claim. Evidence attachments are tracked against the dispute record. Reads require dispute:read; all state transitions require dispute:operate. Operator identity is captured from the authenticated principal on every mutation.
Returns every dispute in the system regardless of status, ordered by creation date descending.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}
]Opens a new dispute against a card transaction. The command must reference an existing card transaction and include a valid reason code. The dispute is created in RAISED status and the operator principal is recorded as the initiating actor. Returns 201 with the created dispute view.
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| cardTransactionId required | string <uuid> |
| note | string |
| reasonCode required | string non-empty |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "note": "string",
- "reasonCode": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Returns the catalogue of allowed dispute reason codes (e.g. unauthorised transaction, merchant error, duplicate charge). Used to populate reason dropdowns when raising a dispute.
[- {
- "category": "string",
- "code": "string",
- "description": "string",
- "filingWindowDays": 0,
- "provisionalCreditEligible": true,
- "representable": true,
- "representmentWindowDays": 0
}
]Returns the full dispute view including current status, timeline events and evidence list, or 404 if no dispute has that id.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Formally files a chargeback with the card scheme on behalf of the cardholder. Transitions the dispute to CHARGEBACK_FILED and records the scheme submission. The merchant has a representment window to rebut the chargeback before a ruling is issued.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Escalates the dispute to scheme arbitration when the representment rebuttal is unsatisfactory. Transitions the dispute to ESCALATED. Typically used after representment has been received and the bank intends to pursue the claim further through the scheme's second-presentment or arbitration process.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Attaches a piece of supporting evidence (e.g. transaction receipt, merchant correspondence, fraud indicator) to the dispute record. Multiple evidence items may be added over the dispute's lifetime. Evidence is stored against the dispute and included in the dispute view.
| id required | string <uuid> |
| documentId required | string non-empty |
| kind required | string non-empty |
{- "documentId": "string",
- "kind": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Credits the cardholder's account with a provisional (conditional) amount while the dispute is under investigation. Transitions the dispute to PROVISIONAL_CREDIT_ISSUED. The credit posting is reversed if the dispute is subsequently resolved in the merchant's favour.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Records the merchant's representment response after a chargeback has been filed. An optional note (e.g. scheme reference or merchant remarks) may be supplied in the request body as {"note": "..."}, otherwise the body may be omitted. Transitions the dispute to REPRESENTMENT_RECEIVED.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Records the final ruling on the dispute and transitions it to RESOLVED. The command must specify the resolution outcome (e.g. CARDHOLDER_WON, MERCHANT_WON). If a provisional credit was previously issued and the outcome favours the merchant, the reversal posting is triggered automatically.
| id required | string <uuid> |
| note | string |
| outcome required | string non-empty |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| writeOff | boolean |
{- "note": "string",
- "outcome": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "writeOff": true
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Withdraws an open dispute at the cardholder's request before a ruling is issued. Transitions the dispute to WITHDRAWN. If a provisional credit was issued it is reversed on withdrawal.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",
- "cardTransactionId": "8918d1f2-5fb2-4486-a655-3c16bf91ce29",
- "cardholderPartyId": "1e61b784-773f-41b2-adfe-0a5d2a20fd48",
- "category": "string",
- "events": [
- {
- "action": "string",
- "actor": "string",
- "at": "string",
- "journalEntryId": "string",
- "note": "string",
- "stage": "string"
}
], - "evidence": [
- {
- "addedAt": "string",
- "documentId": "string",
- "kind": "string"
}
], - "filingDeadline": "string",
- "fundingAccountId": "2d58f397-b4d9-4f93-90cb-6efb6d145ec8",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "openedAt": "string",
- "outcome": "string",
- "provisionalCredit": "string",
- "reasonCode": "string",
- "reference": "string",
- "representmentDeadline": "string",
- "resolvedAmount": {
- "amount": 1200,
- "currency": "USD"
}, - "resolvedAt": "string",
- "stage": "string"
}Payments Hub — outbound initiation, inbound receipt, dispatch and settlement. Payments at or below the configured auto-approval limit settle immediately (201 Created). Payments above the limit are routed through maker-checker: the original command is serialised into an approval record and replayed on a checker's approval (202 Accepted). Reads require payment:read; initiation requires payment:initiate; settlement and dispatch operations require payment:settle.
Returns all payments (inbound and outbound) visible to the caller, including their current status, amount, rail, and accounting references.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}
]Initiates an outbound payment. If the amount is at or below the auto-approval limit the payment is submitted synchronously and the response is 201 Created with the settled PaymentView. If the amount exceeds the limit the command is serialised into the approval workflow: response is 202 Accepted with the approval status and approvalId — the payment is settled only after a checker approves. Requires payment:initiate authority.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryAccount | string |
| beneficiaryName required | string non-empty |
| creditorAccountId | string <uuid> |
| debtorAccountId required | string <uuid> |
| idempotencyKey | string |
| narrative | string |
| rail required | string non-empty |
| type required | string non-empty |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "idempotencyKey": "string",
- "narrative": "string",
- "rail": "string",
- "type": "string"
}{ }Triggers the payment dispatch batch: picks up all outbound instructions sitting in the outbox and dispatches them to their respective external rails. Returns a count of instructions dispatched in this run. Intended to be called by the scheduler or operations staff; safe to call manually for catch-up runs. Requires payment:settle authority.
{- "property1": 0,
- "property2": 0
}Records an inbound payment arriving from an external rail (RTGS, SWIFT, local ACH, etc.). Credits the beneficiary's account and creates a settled PaymentView. Returns 201 Created. The rail reference and sender details must be provided in the command. Requires payment:initiate authority.
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| beneficiaryAccount | string |
| creditorAccountId required | string <uuid> |
| idempotencyKey | string |
| narrative | string |
| rail required | string non-empty |
| senderName | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "idempotencyKey": "string",
- "narrative": "string",
- "rail": "string",
- "senderName": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}Returns all pending dispatch instructions (outbound payments queued for rail transmission but not yet dispatched). Used by operations to monitor the outbox queue ahead of or after a dispatch run.
[- {
- "attempts": 0,
- "connectorKey": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastError": "string",
- "networkRef": "string",
- "nextAttemptAt": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "schemeCode": "string",
- "state": "string"
}
]Returns a single payment by its UUID, or 404 if not found.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}Returns (reverses) a previously settled payment, debiting the beneficiary and crediting the original sender. An optional JSON body with a "reason" field (e.g. "unable to apply", "beneficiary deceased") may be supplied; if omitted the default reason "returned by rail" is used. Requires payment:settle authority.
| id required | string <uuid> |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}Explicitly settles a payment that was previously initiated but not yet settled (e.g. one that was approved via maker-checker). Triggers the accounting postings (debit sender, credit recipient) and transitions the payment to a settled state. Requires payment:settle authority.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "beneficiaryAccount": "string",
- "beneficiaryName": "string",
- "creditorAccountId": "0411bd28-c6c2-4498-8a47-b18d967449d7",
- "debtorAccountId": "d9695c4c-f4a8-4c4e-b1b1-0b2201504693",
- "failureReason": "string",
- "narrative": "string",
- "networkRef": "string",
- "paymentId": "472e651e-5a1e-424d-8098-23858bf03ad7",
- "rail": "string",
- "reference": "string",
- "screeningId": "c70fa460-d553-485e-9f44-b600a5be39b1",
- "status": "string",
- "type": "string"
}Product factory and configuration (admin/operations). Products are the reusable templates from which accounts and loans are originated — they carry interest plans, fee schedules, GL mappings and CDD-tier-based limits. A product moves through a lifecycle: DRAFT → ACTIVE → SUSPENDED → RETIRED; only ACTIVE products may be used for origination. Reads require product:read; all mutations (create, configure, lifecycle transitions) require product:manage.
Returns a summary list of every product regardless of lifecycle state, ordered by creation date descending.
[- {
- "baseCurrency": "string",
- "interestBearing": true,
- "name": "string",
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "status": "string"
}
]Creates a new product in DRAFT state. The caller supplies the product type, currency, and initial configuration. Returns the full product view (including the generated id) with HTTP 201. The product must be configured (interest plan, GL mapping, limits) and then activated before it can be used for origination. Requires product:manage.
| allowMultiCurrency | boolean |
| allowedCddTiers | Array of strings |
| allowedSegments | Array of strings |
| baseCurrency | string |
| collateralRequired | boolean |
| defaultOverdraftLimit | number |
| defaultTermMonths | integer <int32> |
| description | string |
| dormancyDays | integer <int32> |
| earlySettlementPenaltyRate | number |
| earlyWithdrawalPenaltyRate | number |
| interestBearing | boolean |
| maxBalance | number |
| maxLtvRatio | number |
| maxPrincipal | number |
| maxTermMonths | integer <int32> |
| minBalance | number |
| minOpeningBalance | number |
| minPrincipal | number |
| minTermMonths | integer <int32> |
| name required | string non-empty |
| overdraftAllowed | boolean |
| processingFeeRate | number |
| productClass required | string non-empty |
| productCode required | string non-empty |
| provisionStage1Rate | number |
| provisionStage2Days | integer <int32> |
| provisionStage2Rate | number |
| provisionStage3Days | integer <int32> |
| provisionStage3Rate | number |
| repaymentFrequency | string |
| repaymentMethod | string |
| rolloverPolicy | string |
| statementFrequency | string |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "interestBearing": true,
- "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string"
}{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Returns the full product view including interest plan, fee schedule, GL mappings and limit tiers, or 404 if the id is unknown.
| id required | string <uuid> |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Transitions the product from DRAFT or SUSPENDED to ACTIVE, making it available for account and loan origination. The product must have a complete configuration (GL mapping and at least one interest plan where applicable) before activation is permitted. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Appends a fee definition (type, name, amount/rate, trigger event) to the product's fee schedule. Fees are applied at origination or during servicing events (e.g. disbursement, late payment). Returns the updated product view with the full fee list. Requires product:manage.
| id required | string <uuid> |
| amount | number |
| chargeEvent | string |
| feeCode required | string non-empty |
| feeType required | string non-empty |
| maxAmount | number |
| minAmount | number |
| name required | string non-empty |
| rate | number |
| taxable | boolean |
| waivable | boolean |
{- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Deletes the fee identified by feeId from the product's fee schedule. The fee is removed immediately; accounts already originated retain their historical fee schedule. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
| feeId required | string <uuid> Id of the fee definition to remove |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Replaces the General Ledger account mapping for the product — principal GL, interest income GL, fee income GL, and penalty GL codes. The mapping is used by the posting engine when transactions are originated from this product. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
| glAccountCode required | string non-empty |
| purpose required | string non-empty |
{- "glAccountCode": "string",
- "purpose": "string"
}{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Replaces the deposit or savings interest plan on the product (rate, compounding frequency, payment day). Applies to DEPOSIT and SAVINGS product types. The change takes effect for any new accounts originated after this call; existing accounts are not retroactively repriced. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
| calcMethod | string |
| capitalizationFrequency | string |
| dayCountBasis | string |
| minBalanceToEarn | number |
| rate required | number |
| tiered | boolean |
Array of objects (Tier) |
{- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Upserts a transaction or balance limit for a specific Customer Due Diligence (CDD) tier on the product. Each tier (e.g. BASIC, STANDARD, ENHANCED) may carry distinct minimum/maximum balance and single-transaction caps. If a limit for the tier already exists it is replaced. Returns the updated product view with all tier limits. Requires product:manage.
| id required | string <uuid> |
| cddTier required | string non-empty |
| crossBorderAllowed | boolean |
| maxBalance | number |
| maxDailyDebit | number |
| maxMonthlyThroughput | number |
| maxPerTransaction | number |
{- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Deletes the limit entry for the given CDD tier from the product. After removal, accounts in that tier fall back to the product's default (uncapped) behaviour. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
| cddTier required | string CDD tier name whose limit should be removed (e.g. BASIC, STANDARD, ENHANCED) |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Replaces the loan interest plan on the product (nominal rate, effective rate, compounding method, penalty rate, and grace period). Applies to LOAN product types. The plan governs amortisation schedules generated for loans originated from this product after the update. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
| dayCountBasis | string |
| gracePeriodMonths | integer <int32> |
| interestMethod required | string |
| maxRate | number |
| minRate | number |
| penaltyRate | number |
| rate required | number |
| rateType | string |
{- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Permanently retires the product (terminal state). A RETIRED product cannot be reactivated or used for new originations. Existing accounts and loans on this product are unaffected. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Moves an ACTIVE product to SUSPENDED, preventing new originations. Existing accounts and loans already on this product continue to operate normally. The product can be reactivated. Returns the updated product view. Requires product:manage.
| id required | string <uuid> |
{- "allowMultiCurrency": true,
- "allowedCddTiers": [
- "string"
], - "allowedSegments": [
- "string"
], - "baseCurrency": "string",
- "collateralRequired": true,
- "defaultOverdraftLimit": 0,
- "defaultTermMonths": 0,
- "description": "string",
- "dormancyDays": 0,
- "earlySettlementPenaltyRate": 0,
- "earlyWithdrawalPenaltyRate": 0,
- "fees": [
- {
- "amount": 0,
- "chargeEvent": "string",
- "feeCode": "string",
- "feeType": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maxAmount": 0,
- "minAmount": 0,
- "name": "string",
- "rate": 0,
- "taxable": true,
- "waivable": true
}
], - "glMappings": [
- {
- "glAccountCode": "string",
- "purpose": "string"
}
], - "interestBearing": true,
- "interestPlan": {
- "calcMethod": "string",
- "capitalizationFrequency": "string",
- "dayCountBasis": "string",
- "minBalanceToEarn": 0,
- "rate": 0,
- "tiered": true,
- "tiers": [
- {
- "fromBalance": 0,
- "rate": 0,
- "toBalance": 0
}
]
}, - "limits": [
- {
- "cddTier": "string",
- "crossBorderAllowed": true,
- "maxBalance": 0,
- "maxDailyDebit": 0,
- "maxMonthlyThroughput": 0,
- "maxPerTransaction": 0
}
], - "loanInterestPlan": {
- "dayCountBasis": "string",
- "gracePeriodMonths": 0,
- "interestMethod": "string",
- "maxRate": 0,
- "minRate": 0,
- "penaltyRate": 0,
- "rate": 0,
- "rateType": "string"
}, - "maxBalance": 0,
- "maxLtvRatio": 0,
- "maxPrincipal": 0,
- "maxTermMonths": 0,
- "minBalance": 0,
- "minOpeningBalance": 0,
- "minPrincipal": 0,
- "minTermMonths": 0,
- "name": "string",
- "overdraftAllowed": true,
- "processingFeeRate": 0,
- "productClass": "string",
- "productCode": "string",
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "provisionStage1Rate": 0,
- "provisionStage2Days": 0,
- "provisionStage2Rate": 0,
- "provisionStage3Days": 0,
- "provisionStage3Rate": 0,
- "repaymentFrequency": "string",
- "repaymentMethod": "string",
- "rolloverPolicy": "string",
- "statementFrequency": "string",
- "status": "string",
- "version": 0
}Collateral registry — register, query, pledge, and release security assets tied to loans. Collateral items (property, vehicles, guarantees, etc.) are tracked as independent registry entries and associated with loan accounts via pledge/release lifecycle transitions. Read operations require collateral:read; state-mutating operations (register, pledge, release) require collateral:manage.
Returns every collateral item in the registry regardless of status or pledge state.
[- {
- "description": "string",
- "haircutBps": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "pledgedToLoanId": "ea71daea-445f-4753-be17-e314de546ebd",
- "realizableValue": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "status": "string",
- "type": "string"
}
]Creates a new collateral item in the registry (e.g. title deed, vehicle, guarantee). The item is registered in a free/unpledged state and can subsequently be pledged to a loan. Returns the persisted collateral view with its generated id. Requires collateral:manage.
| description | string |
| haircutBps | integer <int32> |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| ownerPartyId required | string <uuid> |
| type required | string non-empty |
{- "description": "string",
- "haircutBps": 0,
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "type": "string"
}{- "description": "string",
- "haircutBps": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "pledgedToLoanId": "ea71daea-445f-4753-be17-e314de546ebd",
- "realizableValue": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "status": "string",
- "type": "string"
}Returns all collateral items currently or previously associated with the given loan account. Useful for credit officers reviewing security coverage on a specific loan.
| loanId required | string <uuid> Loan account id whose pledged collateral items are to be listed |
[- {
- "description": "string",
- "haircutBps": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "pledgedToLoanId": "ea71daea-445f-4753-be17-e314de546ebd",
- "realizableValue": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "status": "string",
- "type": "string"
}
]Returns the collateral item with the given id, or 404 if no such item exists in the registry.
| id required | string <uuid> |
{- "description": "string",
- "haircutBps": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "pledgedToLoanId": "ea71daea-445f-4753-be17-e314de546ebd",
- "realizableValue": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "status": "string",
- "type": "string"
}Associates a free collateral item with the specified loan, transitioning it to a PLEDGED state. A pledged item cannot be pledged to another loan until released. Requires collateral:manage.
| id required | string <uuid> |
| loanId required | string <uuid> Loan account id to which this collateral item is being pledged |
{- "description": "string",
- "haircutBps": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "pledgedToLoanId": "ea71daea-445f-4753-be17-e314de546ebd",
- "realizableValue": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "status": "string",
- "type": "string"
}Removes the pledge association between this collateral item and its current loan, transitioning the item back to a free/unpledged state. Typically called at loan closure or early settlement. Requires collateral:manage.
| id required | string <uuid> |
{- "description": "string",
- "haircutBps": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "marketValue": {
- "amount": 1200,
- "currency": "USD"
}, - "ownerPartyId": "ed1b7cc4-458a-42b5-8fbd-7f0f4a9eba71",
- "pledgedToLoanId": "ea71daea-445f-4753-be17-e314de546ebd",
- "realizableValue": {
- "amount": 1200,
- "currency": "USD"
}, - "reference": "string",
- "status": "string",
- "type": "string"
}Maker-checker queue for dual-control operations. Any context that requires a second signatory parks its mutation as an ApprovalRequest here; a checker then approves (which executes the parked operation) or rejects it. Reads require approval:view (class-level); deciding requires approval:decide plus an amount-tier authority enforced by the service. A maker cannot be their own checker — the checker identity is always derived from the authenticated principal.
Returns every approval request regardless of status (PENDING, APPROVED, REJECTED). Useful for audit trails and full queue inspection.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "approvers": [
- "string"
], - "checker": "string",
- "decidedAt": "string",
- "decisionNote": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maker": "string",
- "operation": "string",
- "requestedAt": "string",
- "requiredApprovals": 0,
- "status": "string",
- "targetRef": "string"
}
]Returns only the approval requests that are still awaiting a checker decision. This is the primary view for the checker workflow — makers poll this to see their own parked operations, checkers poll it to see what requires their decision.
[- {
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "approvers": [
- "string"
], - "checker": "string",
- "decidedAt": "string",
- "decisionNote": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maker": "string",
- "operation": "string",
- "requestedAt": "string",
- "requiredApprovals": 0,
- "status": "string",
- "targetRef": "string"
}
]Returns the full detail of one approval request by its id, including the parked operation payload, maker identity, timestamps, and current status. Returns 404 if not found.
| id required | string <uuid> |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "approvers": [
- "string"
], - "checker": "string",
- "decidedAt": "string",
- "decisionNote": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maker": "string",
- "operation": "string",
- "requestedAt": "string",
- "requiredApprovals": 0,
- "status": "string",
- "targetRef": "string"
}Checker approves the parked request: the service validates that the authenticated principal is not the original maker, then checks that the principal holds a sufficient amount-tier authority for the operation's value. On success the parked operation is executed (its side effects — postings, state transitions, etc. — happen synchronously) and the approval record moves to APPROVED. An optional note can be attached. Non-idempotent: calling twice on an already-decided request will fail.
| id required | string <uuid> |
| note | string |
{- "note": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "approvers": [
- "string"
], - "checker": "string",
- "decidedAt": "string",
- "decisionNote": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maker": "string",
- "operation": "string",
- "requestedAt": "string",
- "requiredApprovals": 0,
- "status": "string",
- "targetRef": "string"
}Checker rejects the parked request. The parked operation is discarded without executing; the approval record moves to REJECTED and the maker is notified via domain events. An optional note capturing the rejection reason can be supplied. Non-idempotent: calling twice on an already-decided request will fail.
| id required | string <uuid> |
| note | string |
{- "note": "string"
}{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "approvers": [
- "string"
], - "checker": "string",
- "decidedAt": "string",
- "decisionNote": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "maker": "string",
- "operation": "string",
- "requestedAt": "string",
- "requiredApprovals": 0,
- "status": "string",
- "targetRef": "string"
}Prepaid / stored-value (e-money) account management. Each account holds a balance ring-fenced in a safeguarding pool; funds can be loaded externally (cash agent, bank transfer) or by internal cash-out from a linked deposit account. Tier levels govern maximum balance and daily spend limits under e-money regulations. Reads require prepaid:read; all mutations require prepaid:operate.
Returns every prepaid account with its current balance, tier, status, and holder reference.
[- {
- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}
]Creates a new prepaid stored-value account for a party. The account opens at the base tier with a zero balance. The safeguarding pool entry is created atomically. Returns the newly opened account view with status ACTIVE.
| currency required | string |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| expiresAt | string |
| holderPartyId | string <uuid> |
| kycTier | string |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). | |
| programType | string |
| reloadable | boolean |
{- "currency": "string",
- "dailyLoadCap": {
- "amount": 1200,
- "currency": "USD"
}, - "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "kycTier": "string",
- "loadCap": {
- "amount": 1200,
- "currency": "USD"
}, - "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reloadable": true
}{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Returns the aggregate safeguarding position — total float held across all active prepaid accounts versus the amount currently lodged in the designated safeguarding credit institution. Used for regulatory e-money reporting and daily reconciliation.
{- "lines": [
- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "credits": {
- "amount": 1200,
- "currency": "USD"
}, - "debits": {
- "amount": 1200,
- "currency": "USD"
}, - "net": {
- "amount": 1200,
- "currency": "USD"
}
}
]
}Returns one prepaid account, or 404 if no account has that id.
| id required | string <uuid> Prepaid account id |
{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Transfers an amount from the prepaid stored-value balance to the customer's linked deposit account. Debits the prepaid balance, credits the deposit account, and releases the corresponding safeguarding float. The request body must supply toDepositAccountId (UUID string) and amount (object with amount and currency fields).
| id required | string <uuid> Prepaid account id |
| property name* additional property | any |
{- "property1": null,
- "property2": null
}{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Permanently closes the account (terminal state). Any remaining balance must be zero or have been cashed out beforehand; the safeguarding entry is released. A closed account cannot be reopened.
| id required | string <uuid> Prepaid account id |
{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Debits a fee amount from the prepaid balance and credits it to the institution's fee income account. The request body must contain a "fee" key with a MonetaryAmount value. The account must be ACTIVE and have sufficient balance to cover the fee.
| id required | string <uuid> Prepaid account id |
additional property | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
{- "property1": {
- "amount": 1200,
- "currency": "USD"
}, - "property2": {
- "amount": 1200,
- "currency": "USD"
}
}{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Suspends an ACTIVE account — no loads or spend are permitted while frozen. Used for AML holds or customer-initiated blocks.
| id required | string <uuid> Prepaid account id |
{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Credits the prepaid balance with an external load (e.g. cash agent deposit or incoming bank transfer). Posts a corresponding debit to the safeguarding float. The account must be ACTIVE and the resulting balance must not exceed the tier's maximum-balance cap.
| id required | string <uuid> Prepaid account id |
required | object (MonetaryAmount) A monetary amount as serialised by Jackson (JSR-354). |
| source | string |
{- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "source": "string"
}{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Returns the chronological load history (credits posted to the stored-value balance) for the specified account.
| id required | string <uuid> Prepaid account id |
[- {
- "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
- "amount": {
- "amount": 1200,
- "currency": "USD"
}, - "at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "reference": "string",
- "source": "string"
}
]Restores a FROZEN account to ACTIVE, re-enabling loads and spend.
| id required | string <uuid> Prepaid account id |
{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Upgrades the account to the specified tier (e.g. BASIC → ENHANCED → FULL). Higher tiers allow a greater maximum stored balance and higher daily spend limits, subject to the customer having provided the required KYC documentary evidence. The request body must supply a "tier" string key.
| id required | string <uuid> Prepaid account id |
| property name* additional property | string |
{- "property1": "string",
- "property2": "string"
}{- "available": {
- "amount": 1200,
- "currency": "USD"
}, - "balance": {
- "amount": 1200,
- "currency": "USD"
}, - "currency": "string",
- "expiresAt": "string",
- "holderPartyId": "88171752-e02f-44db-8743-fff3061b2a46",
- "holds": {
- "amount": 1200,
- "currency": "USD"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kycTier": "string",
- "maxBalance": {
- "amount": 1200,
- "currency": "USD"
}, - "programType": "string",
- "reference": "string",
- "reloadable": true,
- "status": "string"
}Commission eligibility rules define which transactions attract a commission and at what rate or fixed amount. Each rule matches on commissionCode + productId + transactionCode and can further narrow scope by channel, currency, and amount band (amountFrom/amountTo). When multiple rules match, the lowest priority value wins. Rules may carry an overrideRate or overrideAmount to supersede the base schedule. Reads are open; mutations (create / update / delete) require the pricing:manage authority.
Returns all configured eligibility rules with their matching criteria (product, transaction code, channel, currency, amount band), priority, override rate/amount, and active flag.
[- {
- "active": true,
- "amountFrom": 0,
- "amountTo": 0,
- "channel": "string",
- "commissionCode": "string",
- "currency": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "overrideAmount": 0,
- "overrideRate": 0,
- "priority": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "transactionCode": "string"
}
]Creates a new eligibility rule that links a commissionCode to a product and transaction code, optionally narrowed by channel, currency, and amount band. Priority controls tie-breaking when several rules match the same transaction (lower value = higher precedence). An overrideRate or overrideAmount, when present, replaces the base commission schedule for matched transactions. Returns the generated rule id. Requires pricing:manage.
| amountFrom | number |
| amountTo | number |
| channel | string |
| commissionCode required | string non-empty |
| currency | string |
| overrideAmount | number |
| overrideRate | number |
| priority | integer <int32> |
| productId | string <uuid> |
| transactionCode required | string non-empty |
{- "amountFrom": 0,
- "amountTo": 0,
- "channel": "string",
- "commissionCode": "string",
- "currency": "string",
- "overrideAmount": 0,
- "overrideRate": 0,
- "priority": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "transactionCode": "string"
}{- "property1": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "property2": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Permanently removes the eligibility rule with the given id. Once deleted the rule no longer participates in commission matching. Returns 204 No Content. Requires pricing:manage.
| id required | string <uuid> Id of the eligibility rule to delete |
{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Fully replaces the eligibility rule identified by id with the supplied command payload. All fields (commissionCode, transactionCode, channel, currency, amount band, priority, overrideRate, overrideAmount) are overwritten. Returns 204 No Content on success. Requires pricing:manage.
| id required | string <uuid> Id of the eligibility rule to replace |
| amountFrom | number |
| amountTo | number |
| channel | string |
| commissionCode required | string non-empty |
| currency | string |
| overrideAmount | number |
| overrideRate | number |
| priority | integer <int32> |
| productId | string <uuid> |
| transactionCode required | string non-empty |
{- "amountFrom": 0,
- "amountTo": 0,
- "channel": "string",
- "commissionCode": "string",
- "currency": "string",
- "overrideAmount": 0,
- "overrideRate": 0,
- "priority": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "transactionCode": "string"
}{- "error": "string",
- "fieldErrors": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}Permission catalog management. Permissions are fine-grained authority strings (e.g. card:read, admin:users) that are assigned to roles and ultimately granted to users. The catalog acts as the authoritative registry of every permission that exists in the system. Reads are open to any authenticated staff member; creating new permissions requires the admin:users authority.
Registers a new permission string in the catalog. The permission is immediately available for assignment to roles. No side effects on existing role or user grants — callers must explicitly assign the new permission to roles after creation. Returns HTTP 201 with the updated full permission list. Requires the admin:users authority.
| code required | string non-empty |
| description | string |
{- "code": "string",
- "description": "string"
}[- {
- "code": "string",
- "description": "string",
- "domain": "string"
}
]