Download OpenAPI specification:
We are working towards documenting our APIs using the OpenAPI 3+ specification.
This documentation is BETA and subject to change.
Note: Older API documentation remains available from Legacy API Documentation for areas not covered in this OpenApi documentation.
Note: Usage of the API requires a user-specific api-key which can be requested via the Musoni Service Desk.
Musoni is a secure, multi-tenanted microfinance platform.
The goal of the Musoni API is to empower developers to build apps on top of the Musoni Platform.
The API is organized around REST and is designed to have:
JSON is returned in all responses from the API, including errors.
An API capability that allows applications to peform authentication with platform using username password credentials.
On success API will return details that support ability to call platform APIs using their supported security mechanism: HTTP Basic Authentication
Authenticates username password credentials.
If multi-factor authentication is enabled then a secondary security token will be requested once username, password are verified.
username | string Deprecated Example: username=johnsmith The username to authenticate with. |
password | string Deprecated Example: password=myfav0uritePassw0rd The password to use with |
username | string The |
password | string The |
{- "username": "johnsmith",
- "password": "myfav0uritePassw0rd"
}
{- "username": "johnsmith",
- "userId": 1,
- "base64EncodedAuthenticationKey": "vbnsdGVzdHVzZXItODIyaTN0OnRlc3R1cABC909877adfa=",
- "authenticated": true,
- "officeId": 1,
- "officeName": "Head Office",
- "staffId": 1,
- "staffDisplayName": "John Smith",
- "roles": [
- {
- "id": 4709,
- "name": "SuperUser",
- "description": "Superadmin Role",
- "disabled": true,
- "systemDefined": true
}
], - "permissions": [
- "UPDATE_FUND"
], - "shouldRenewPassword": false,
- "renewPasswordOnNextLogin": false,
- "isSelfServiceUser": false,
- "clients": [
- {
- "client": {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "displayname": "John Smith",
- "isStaff": false,
- "tags": [ ]
}
}
]
}
An API capability to support registration and use of multi-factor authentication (MFA) on users accounts.
Note: MFA cannot be enabled on Client Users (users where isSelfServiceUser = true
)
Registers the user account of user making request for MFA.
This involves auto generating a secret and proving a QR code back that end user can use to register with a device.
Note: MFA cannot be enabled on Client Users (users where isSelfServiceUser = true
)
{ }
{- "email": "johnsmith@example.com",
- "username": "johnsmith",
- "mfaSecret": "AAJ33I4IOUCAWGXNFPHVOFSWGTYI4UTZ",
- "qrCodeImageDataUri": "string"
}
Validates a provided mfaToken
against the users MFA setup.
Two successful validation requests with different mfaToken
s are required in order to complete MFA registration.
Note: MFA cannot be enabled on Client Users (users where isSelfServiceUser = true
)
mfaToken required | string Example: mfaToken=149087 The code provided by the device where mfa account was setup. Typically configured to return a six digit pin but can be different. |
{ }
{- "isValid": true,
- "mfa": {
- "enabled": true,
- "registered": false,
- "codeExpired": true
}
}
Validates a MFA code (mfaToken
) against the users MFA setup.
Note: MFA cannot be enabled on Client Users (users where isSelfServiceUser = true
)
mfaToken required | string Example: mfaToken=149087 The code provided by the device where mfa account was setup. Typically configured to return a six digit pin but can be different. |
{ }
{- "isValid": true,
- "mfa": {
- "enabled": true,
- "registered": false,
- "codeExpired": true
}
}
Groups are used to provide a distinctive banking distribution channel used in microfinances throughout the world.
The Group is an administrative unit. It can contain as few as 5 people or as many as 40 depending on how its used.
Different styles of group lending
List all Groups
See The Data Filter API for better approach for search/filter.
paged | string Defaults to |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
search | string Performs a partial matching search across the follow properties of Group to see if they contain the search term:
|
orderBy | string Deprecated Enum: "id" "external_id" "display_name" Deprecated and not used. Use |
sortOrder | string Deprecated Deprecated and not used. Use |
sortBy | string Expects a valid SQL fragment that used in e.g. |
officeId | integer The id of an office. Used to restrict to the set of groups associated with this offices hierarchy (office + sub-offices). |
underHierarchy | string Example: underHierarchy=.14. if provided only groups that exist on or under the office hierarchy provided will be returned. This parameter overrides any data-scoping that is performed against the current users office hierarchy allowing the user to fetch groups not in their office hierarchy. Note: Do not place single or double quotes around the value. |
staffId | integer The id of an staff (loanofficer). Used to restrict to the set of groups associated with the staff. |
name | string Use name of groups to restrict results using exact match. |
externalId | string Use externalId of groups to restrict results using exact match. |
status | integer Enum: 100 300 600 700 Example: status=100 Used to restrict the search to groups whoose status (code) matches the status code provided. |
modifiedSinceTimestamp | integer Example: modifiedSinceTimestamp=1634152729 Should be passed as a UNIX Timestamp. When provided only groups that have been created or updated since the provided timestamp are returned. Groups will be marked as modified whenever there is any modification to the group. This parameter can be used in integrations to fetch changed data since a last fetch, timestamps will be treated as UTC and returned as UTC. |
orphansOnly | string Deprecated Default: false Deprecated. To be removed. Set to Center or parents groups are not support on musoni system applications. |
sqlSearch | string Deprecated Deprecated. Use other parameters such as Expects a valid SQL fragment that used in e.g. |
[- {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "parentId": 1,
- "parentName": "Head Group",
- "accountNo": "0001-0001",
- "name": "Group A",
- "externalId": "0001-000A",
- "status": {
- "id": 300,
- "code": "clientStatusType.pending",
- "value": "Pending"
}, - "active": true,
- "hierarchy": "name",
- "groupLevel": 1,
- "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "John",
- "submittedByLastname": "Doe"
}, - "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
The supported schema for creating groups.
name
, openingDate
, parentId
are required. locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
name required | string The name of the group. |
officeId required | integer <int64> The |
active required | boolean A boolean to indicate if this group should be created in active state. if true, |
activationDate | string The opening date in a date format supported by Joda Time. |
submittedOnDate | string The date this group application was submitted in a date format supported by Joda Time. If provided when creating the group and the group is set to |
accountNo | string A unique account no. which identifies this group. If not provided on creation of the group, it is automatically generated based on the Account Number Format setup. (see Account Number Format and Configuration) |
externalId | string A place to put an external reference for this group e.g. The ID another system uses for it. If provided, it must be unique. If not provided on creation of the group, it is automatically generated based on the Account Number Format setup. (see Account Number Format and Configuration) |
clientMembers | Array of integers An array of integers that represent client ids. The clients provided must exist in the same office as group office. There is also configurable rules around the min and max number of clients that are allowed when forming a group from existing clients. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
{- "name": "name",
- "officeId": 1,
- "active": false,
- "activationDate": "01 July 2007",
- "submittedOnDate": "01 July 2007",
- "accountNo": "0001-0001",
- "externalId": "ABC-0001",
- "clientMembers": [
- 1,
- 6,
- 8
], - "locale": "en",
- "dateFormat": "dd MMMM yyyy"
}
{- "resourceId": 12
}
Find a Group by Id
id required | integer <int64> Example: 1 The unique identifer of a group. |
associations | string Enum: "all" "clientMembers" "activeClientMembers" "groupRoles" Example: associations=all associated entity to be return |
[- {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "parentId": 1,
- "parentName": "Head Group",
- "accountNo": "0001-0001",
- "name": "Group A",
- "externalId": "0001-000A",
- "status": {
- "id": 300,
- "code": "clientStatusType.pending",
- "value": "Pending"
}, - "active": true,
- "hierarchy": "name",
- "groupLevel": 1,
- "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "John",
- "submittedByLastname": "Doe"
}, - "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
Update existing group
id required | integer <int64> Example: 1 The unique identifer of a group. |
Update existing group
name required | string The name of the group. |
officeId required | integer <int64> The |
active required | boolean A boolean to indicate if this group should be created in active state. if true, |
activationDate | string The opening date in a date format supported by Joda Time. |
submittedOnDate | string The date this group application was submitted in a date format supported by Joda Time. If provided when creating the group and the group is set to |
accountNo | string A unique account no. which identifies this group. If not provided on creation of the group, it is automatically generated based on the Account Number Format setup. (see Account Number Format and Configuration) |
externalId | string A place to put an external reference for this group e.g. The ID another system uses for it. If provided, it must be unique. If not provided on creation of the group, it is automatically generated based on the Account Number Format setup. (see Account Number Format and Configuration) |
clientMembers | Array of integers An array of integers that represent client ids. The clients provided must exist in the same office as group office. There is also configurable rules around the min and max number of clients that are allowed when forming a group from existing clients. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
{- "name": "name",
- "officeId": 1,
- "active": false,
- "activationDate": "01 July 2007",
- "submittedOnDate": "01 July 2007",
- "accountNo": "0001-0001",
- "externalId": "ABC-0001",
- "clientMembers": [
- 1,
- 6,
- 8
], - "locale": "en",
- "dateFormat": "dd MMMM yyyy"
}
{- "resourceId": 1,
- "changes": { }
}
Delete existing group.
A group can be deleted if it is in pending state and has no associations - clients, loans or savings.
id required | integer <int64> Example: 1 The unique identifer of a group. |
{ }
{- "commandId": 1,
- "resourceId": 1
}
Groups can be created in a Pending state. This API exists to enable group activation.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "activate" Example: command=activate Command to activate group |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
activationDate required | string The date the groups was activated |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "activationDate": "01 July 2007"
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
This API allows to associate existing clients to a group that belong in same office.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "associateClients" Example: command=associateClients Command to associateClients with group |
clientMembers required | Array of numbers <integer64> [ items <integer64 > ] An array of client ids |
{- "clientMembers": [
- 0
]
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
This API allows to disassociate clients from a group.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "disassociateClients" Example: command=disassociateClients Command to disassociateClients from group |
clientMembers required | Array of numbers <integer64> [ items <integer64 > ] An array of client ids |
{- "clientMembers": [
- 0
]
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Allows you to assign a staff member to an existing group.
Note: The selected staff member should be belong to the same office (or an office higher up in the hierarchy) as this group.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "assignStaff" Example: command=assignStaff Command to assignStaff with group |
staffId required | integer <integer64> The id of the staff member being assigned to the group |
inheritStaffForClientAccounts | boolean if true all members of the group (i.e all clients with active loans and savings ) will inherit the staffId |
{- "staffId": 0,
- "inheritStaffForClientAccounts": true
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Allows you to unassign the staff member from the group.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "unassignStaff" Example: command=unassignStaff Command to unassign a staff with group |
staffId required | integer <integer64> The id of the staff member being unassigned |
{- "staffId": 1
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Allows you to assign a role to an existing member of a group.
Note: We can define the different roles applicable to group members by adding code values to the pre-defined system code GROUPROLE
. e.g "Group leader"
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "assignRole" Example: command=assignRole Command to assign role against member of the group |
clientId required | integer <integer64> The id of the client member being assigned to a role |
role | integer <integer64> The id of the code value representing the group role. see |
{- "clientId": 0,
- "role": 0
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Allows you to update the member role.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "updateRole" Example: command=updateRole Command to update role against member of the group |
clientId required | integer <integer64> The id of the client member being assigned to a role |
role | integer <integer64> The id of the code value representing the group role. see |
{- "clientId": 0,
- "role": 0
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Allows you to unassign roles associated with group members.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "unassignRole" Example: command=unassignRole Command to unassign role |
roldeId required | integer <integer64> Example: roldeId=567 Id of code value reprenting a |
{ }
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Allows transfer of group to new office
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "transferGroup" Example: command=transferGroup Command to indicate transfer of group |
destinationOfficeId required | integer <int64> The id of the office this group is to be associated with after the transfer. It cannot be the same Note: The user making the request must have visibility of the source and destination office. |
staffId | integer <int64> The id of the staff member you wish the group and/or client members to be associated with after the transfer. Note: The Note: The user making the request must have visibility of the source and destination office. |
note | string A note related to the requested transfer. |
{- "destinationOfficeId": 1,
- "staffId": 1,
- "note": "description related to transfer."
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
This API exists to close a group.
Groups can be closed if they don't have any non-closed clients/loans/savingsAccounts.
id required | integer <int64> Example: 1 The unique identifer of a group. |
command required | string Default: "close" Example: command=close Command to close group |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
closureDate required | string The date the groups was closed |
closureReasonId | integer <int64> The id of one of the code values setup for the code named |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "closureDate": "01 July 2007",
- "closureReasonId": 345
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Returns summary format of all loan, savings and share account information related this group
id required | integer <int64> Example: 1 The unique identifer of a group. |
{- "memberLoanAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "Mobile Loan",
- "shortProductName": "M001",
- "loanProductCounter": 3,
- "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientDisplayName": "John Doe",
- "clientStatus": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "loanType": {
- "id": 1,
- "code": "accountType.individual",
- "value": "individual"
}, - "loanCycle": 3,
- "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "expectedDisbursementDate": [
- 2000,
- 1,
- 1
], - "expectedMaturityDate": [
- 2000,
- 1,
- 1
]
}, - "inArrears": true,
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "originalLoan": 5000,
- "loanBalance": 3567,
- "amountPaid": 1723,
- "transactions": [
- { }
]
}
], - "memberSavingsAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "Voluntary Savings",
- "shortProductName": "VS04",
- "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientDisplayName": "John Doe",
- "clientStatus": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "depositType": {
- "id": 100,
- "code": "depositAccountType.savingsDeposit",
- "value": "Savings"
}, - "status": {
- "id": 100,
- "code": "savingsAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "submittedAndPendingApproval": true,
- "approved": true,
- "rejected": true,
- "withdrawnByApplicant": true,
- "active": true,
- "closed": true,
- "prematureClosed": true,
- "transferInProgress": true,
- "transferOnHold": true,
- "matured": true
}, - "subStatus": {
- "id": 0,
- "code": "SavingsAccountSubStatusEnum.none",
- "value": "Submitted and pending approval",
- "none": true,
- "inactive": false,
- "dormant": false,
- "escheat": false,
- "writeoff": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "approvedOnDate": [
- 2000,
- 1,
- 1
], - "approvedByUsername": "musoni",
- "approvedByFirstname": "musoni",
- "approvedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni",
- "closedOnDate": [
- 2000,
- 1,
- 1
], - "closedByUsername": "musoni",
- "closedByFirstname": "musoni",
- "closedByLastname": "musoni"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "accountBalance": 3567,
- "transactions": [
- { }
]
}
], - "loanAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "Mobile Loan",
- "shortProductName": "M001",
- "loanProductCounter": 3,
- "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientDisplayName": "John Doe",
- "clientStatus": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "loanType": {
- "id": 1,
- "code": "accountType.individual",
- "value": "individual"
}, - "loanCycle": 3,
- "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "expectedDisbursementDate": [
- 2000,
- 1,
- 1
], - "expectedMaturityDate": [
- 2000,
- 1,
- 1
]
}, - "inArrears": true,
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "originalLoan": 5000,
- "loanBalance": 3567,
- "amountPaid": 1723,
- "transactions": [
- { }
]
}
], - "savingsAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "Voluntary Savings",
- "shortProductName": "VS04",
- "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientDisplayName": "John Doe",
- "clientStatus": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "depositType": {
- "id": 100,
- "code": "depositAccountType.savingsDeposit",
- "value": "Savings"
}, - "status": {
- "id": 100,
- "code": "savingsAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "submittedAndPendingApproval": true,
- "approved": true,
- "rejected": true,
- "withdrawnByApplicant": true,
- "active": true,
- "closed": true,
- "prematureClosed": true,
- "transferInProgress": true,
- "transferOnHold": true,
- "matured": true
}, - "subStatus": {
- "id": 0,
- "code": "SavingsAccountSubStatusEnum.none",
- "value": "Submitted and pending approval",
- "none": true,
- "inactive": false,
- "dormant": false,
- "escheat": false,
- "writeoff": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "approvedOnDate": [
- 2000,
- 1,
- 1
], - "approvedByUsername": "musoni",
- "approvedByFirstname": "musoni",
- "approvedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni",
- "closedOnDate": [
- 2000,
- 1,
- 1
], - "closedByUsername": "musoni",
- "closedByFirstname": "musoni",
- "closedByLastname": "musoni"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "accountBalance": 3567,
- "transactions": [
- { }
]
}
], - "shareAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "XYZ Shares",
- "shortProductName": "XYZ1",
- "totalApprovedShares": 3,
- "totalPendingForApprovalShares": 3,
- "savingsAccountId": 4709,
- "savingsAccountNumber": "0001-0000-0005",
- "status": {
- "id": 100,
- "code": "shareAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni"
}, - "transactions": [
- { }
]
}
]
}
Ability to search and list clients using parameters provided.
See The Data Filter API for better approach to search/filter.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
search | string Performs a partial matching search across the following properties of Client to see if they contain the search term:
|
orderBy | string Enum: "id" "external_id" "display_name" The SQL,Database name of the field |
sortOrder | string DESC or ASC |
officeId | integer The id of an office. Used to restrict to set of clients associated with the office. |
staffId | integer The id of a staff member. Used to restrict to set of clients associated with the staff member. |
externalId | string The externalId of a client. Used to restrict to set of clients where external id is like provided value. e.g. ABC-123% will find all clients that have externalId starting with ABC-123 |
displayName | string The display name of a client. Used to restrict to set of clients where display name is like provided value. e.g. john will find all clients that have display name with text 'john' |
firstname | string The first name of a client. Used to restrict to set of clients where first name is like provided value. e.g. john will find all clients that have first name with text 'john' |
lastname | string The last name of a client. Used to restrict to set of clients where last name is like provided value. e.g. smith will find all clients that have last name with text 'smith' |
hierarchy | string The textual representation of the office hierarchy of a client. Used to restrict to set of clients where their office hierarchy is like provided value. e.g. '.2' will find all clients that have hierarchy starting with '.2' |
modifiedSinceTimestamp | integer Example: modifiedSinceTimestamp=1634152729 Should be passed as a UNIX Timestamp. When provided only clients that have been created or updated since the provided timestamp are returned. Clients will be marked as modified whenever there is any modification to the client. This parameter can be used in integrations to fetch changed data since a last fetch, timestamps will be treated as UTC and returned as UTC. |
orphansOnly | boolean Default: false Use orphansOnly as true to list clients which are not associated to any group/parent. |
sqlSearch | string Deprecated Deprecated. Use other parameters such as A valid sql fragment that will work with backend query for this api. If |
[- {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "accountNo": "0001-0000-0001",
- "externalId": "ID_LGEHJEZ",
- "status": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "subStatus": {
- "active": false,
- "isDefault": false
}, - "active": true,
- "activationDate": [
- 2000,
- 1,
- 1
], - "firstname": "John",
- "lastname": "Doe",
- "displayname": "John Doe",
- "gender": {
- "active": false,
- "isDefault": false
}, - "clientType": {
- "active": false,
- "isDefault": false
}, - "clientClassification": {
- "active": false,
- "isDefault": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni"
}, - "groups": [ ],
- "clientUsers": [ ],
- "clientNonPersonDetails": {
- "constitution": {
- "active": false,
- "isDefault": false
}, - "mainBusinessLine": {
- "active": false,
- "isDefault": false
}
}, - "clientLoanOfficerAssignmentHistoryData": [
- {
- "staffId": 1,
- "startDate": [
- 2019,
- 1,
- 25
]
}
], - "isStaff": false,
- "countryIsoCode": "NL",
- "tags": [ ],
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
The supported schema for creating a new client.
officeId
is mandatory when creating a client fullname
or any of firstname
, middlename
, lastname
must be provided as name for client active
must be provided when creating a client, if true its possible client creation will fail if it is a member of a group and breaks group rules. dateFormat
and locale
are required even with no date fields at present. \
officeId required | integer <int64> The id of the office this client is associated with. |
firstname | string Facility to break up name into parts suitable for humans. |
middlename | string Facility to break up name into parts suitable for humans. |
lastname | string Facility to break up name into parts suitable for humans. |
fullname | string Facility to set name of a client or business that doesn't suit the firstname,middlename,lastname structure. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
active required | boolean Default: false Indicates if this client should be created in Defaults to false if omitted. |
activationDate | string The date the client account was activated. |
groupId | integer <int64> The id of the group this client is associated with. |
staffId | integer <int64> The id of the staff member dealing with the client office. |
isStaff | boolean Indicates if this client is a staff member also. |
genderId | integer <int64> The id of the code value related to the code |
clientTypeId | integer <int64> The id of the code value related to the code |
clientClassificationId | integer <int64> The id of the code value related to the code |
savingsProductId | integer <int64> The id of the default overdraft savings account product this client is associated with. |
legalFormId | integer Enum: 1 2 An integer representing the legal form of the client. 1 for Person, 2 for Entity If provided and set to 2 (for Entity) then |
tagIds | Array of strings Tags are a way of classifying a client (see Tags for more details.) |
accountNo | string If provided, its value is set as account no. for client account. Otherwise an auto generated account no. is put in place based on the configured strategy. (see Configuration: Account Number Format) If provided, it must be unique. |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
dateOfBirth | string The clients date of birth in a date format supported by Joda Time. |
mobileNo | string Contact Details: The mobile telephone number of staff member. If provided it must be unique. This mobile number maybe be used by SMS or Mobile Money functionality. |
mobileNoSecondary | string Contact Details; The secondary mobile telephone number of staff member. |
emailAddress | string Contact Details; The clients email address |
submittedOnDate | string The date the client application was submitted. |
object (ClientNonPersonRequestModel) Business client related fields that are used when a client is created with | |
Array of objects |
{- "officeId": 1,
- "firstname": "John",
- "middlename": "John",
- "lastname": "Doe",
- "fullname": "James Michael Patrick Anderson or ElectricBikes Ltd.",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "active": false,
- "activationDate": "01 July 2007",
- "groupId": 1,
- "staffId": 1,
- "isStaff": false,
- "genderId": 218,
- "clientTypeId": 0,
- "clientClassificationId": 0,
- "savingsProductId": 1,
- "legalFormId": 1,
- "tagIds": [
- "Rural"
], - "accountNo": "000-0001",
- "externalId": "CLIENT-0001",
- "dateOfBirth": "01 July 1970",
- "mobileNo": "+353 78 90987877",
- "mobileNoSecondary": "+353 78 90987000",
- "emailAddress": "testmeout@musoni.eu",
- "submittedOnDate": "01 July 2007",
- "clientNonPersonDetails": {
- "incorpNumber": "string",
- "remarksParamName": "string",
- "incorpValidityTillDate": "string",
- "constitutionId": 0,
- "mainBusinessLineId": 0
}, - "address": [
- {
- "addressTypeId": 0
}
]
}
{- "resourceId": 12
}
Find a client by id
id required | integer <int64> Example: 1 The unique identifer of a client. |
template | boolean Default: false Example: template=false if true, returns all active staff in office hierarchy that are above the provided |
staffInSelectedOfficeOnly | boolean Default: false Example: staffInSelectedOfficeOnly=false 'Only relevant if If true, returns all active staff in office hierarchy associated with this client.' |
associations | string Enum: "all" "clientGuarantees" "identifiers" Indications what additional details to bring back from areas associated with client |
[- {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "accountNo": "0001-0000-0001",
- "externalId": "ID_LGEHJEZ",
- "status": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "subStatus": {
- "active": false,
- "isDefault": false
}, - "active": true,
- "activationDate": [
- 2000,
- 1,
- 1
], - "firstname": "John",
- "lastname": "Doe",
- "displayname": "John Doe",
- "gender": {
- "active": false,
- "isDefault": false
}, - "clientType": {
- "active": false,
- "isDefault": false
}, - "clientClassification": {
- "active": false,
- "isDefault": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni"
}, - "groups": [ ],
- "clientUsers": [ ],
- "clientNonPersonDetails": {
- "constitution": {
- "active": false,
- "isDefault": false
}, - "mainBusinessLine": {
- "active": false,
- "isDefault": false
}
}, - "clientLoanOfficerAssignmentHistoryData": [
- {
- "staffId": 1,
- "startDate": [
- 2019,
- 1,
- 25
]
}
], - "isStaff": false,
- "countryIsoCode": "NL",
- "tags": [ ],
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
The supported schema for updating a new client.
dateFormat
and locale
are required even with no date fields at present. \
id required | integer <int64> Example: 1 The unique identifer of a client. |
officeId required | integer <int64> The id of the office this client is associated with. |
firstname | string Facility to break up name into parts suitable for humans. |
middlename | string Facility to break up name into parts suitable for humans. |
lastname | string Facility to break up name into parts suitable for humans. |
fullname | string Facility to set name of a client or business that doesn't suit the firstname,middlename,lastname structure. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
active required | boolean Default: false Indicates if this client should be created in Defaults to false if omitted. |
activationDate | string The date the client account was activated. |
groupId | integer <int64> The id of the group this client is associated with. |
staffId | integer <int64> The id of the staff member dealing with the client office. |
isStaff | boolean Indicates if this client is a staff member also. |
genderId | integer <int64> The id of the code value related to the code |
clientTypeId | integer <int64> The id of the code value related to the code |
clientClassificationId | integer <int64> The id of the code value related to the code |
savingsProductId | integer <int64> The id of the default overdraft savings account product this client is associated with. |
legalFormId | integer Enum: 1 2 An integer representing the legal form of the client. 1 for Person, 2 for Entity If provided and set to 2 (for Entity) then |
tagIds | Array of strings Tags are a way of classifying a client (see Tags for more details.) |
accountNo | string If provided, its value is set as account no. for client account. Otherwise an auto generated account no. is put in place based on the configured strategy. (see Configuration: Account Number Format) If provided, it must be unique. |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
dateOfBirth | string The clients date of birth in a date format supported by Joda Time. |
mobileNo | string Contact Details: The mobile telephone number of staff member. If provided it must be unique. This mobile number maybe be used by SMS or Mobile Money functionality. |
mobileNoSecondary | string Contact Details; The secondary mobile telephone number of staff member. |
emailAddress | string Contact Details; The clients email address |
submittedOnDate | string The date the client application was submitted. |
object (ClientNonPersonRequestModel) Business client related fields that are used when a client is created with | |
Array of objects |
{- "officeId": 1,
- "firstname": "John",
- "middlename": "John",
- "lastname": "Doe",
- "fullname": "James Michael Patrick Anderson or ElectricBikes Ltd.",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "active": false,
- "activationDate": "01 July 2007",
- "groupId": 1,
- "staffId": 1,
- "isStaff": false,
- "genderId": 218,
- "clientTypeId": 0,
- "clientClassificationId": 0,
- "savingsProductId": 1,
- "legalFormId": 1,
- "tagIds": [
- "Rural"
], - "accountNo": "000-0001",
- "externalId": "CLIENT-0001",
- "dateOfBirth": "01 July 1970",
- "mobileNo": "+353 78 90987877",
- "mobileNoSecondary": "+353 78 90987000",
- "emailAddress": "testmeout@musoni.eu",
- "submittedOnDate": "01 July 2007",
- "clientNonPersonDetails": {
- "incorpNumber": "string",
- "remarksParamName": "string",
- "incorpValidityTillDate": "string",
- "constitutionId": 0,
- "mainBusinessLineId": 0
}, - "address": [
- {
- "addressTypeId": 0
}
]
}
{- "resourceId": 12
}
Performs soft delete of client
id required | integer <int64> Example: 1 The unique identifer of a client. |
{ }
{- "resourceId": 12
}
Allows transfer of client to new office or group or both.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "proposeAndAcceptTransfer" Example: command=proposeAndAcceptTransfer Command to indicate transfer of client |
destinationOfficeId required | integer <int64> The id of the office this client is to be associated with after the transfer. It can be the same Note: The user making the request must have visibility of the source and destination office. |
destinationGroupId | integer <int64> The id of the group this client is to be associated with after the transfer. Optional but if this transfer is not to another branch, then this becomes required. Note: The Note: The user making the request must have visibility of the source and destination office. |
staffId | integer <int64> The id of the staff member you wish the client and/or group to be associated with after the transfer. Note: The Note: The user making the request must have visibility of the source and destination office. |
note | string A note related to the requested transfer. |
{- "destinationOfficeId": 1,
- "destinationGroupId": 1,
- "staffId": 1,
- "note": "description related to transfer."
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Clients can be created in a Pending state. This API exists to enable client activation (for when a client becomes an approved member of the financial Institution).
If the client happens to be already active this API will result in an error.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "activate" Example: command=activate Command to indicate activation of client |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
activationDate required | string The date the client is activated on |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "activationDate": "01 July 2007"
}
{- "commandId": 400,
- "resourceId": 12,
- "rollbackTransaction": false
}
Rejects a pending client application
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "reject" Example: command=reject Command to reject client application |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
rejectionDate required | string The date the client application is rejected |
rejectionReasonId | integer <int64> The id of one of the code values setup for the code named |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "rejectionDate": "01 July 2007",
- "rejectionReasonId": 345
}
{- "resourceId": 12
}
Reverts the client application from rejected state back to pending
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "undoRejection" Example: command=undoRejection Command to undo the reject of a client application |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
reopenedDate required | string The date the client application was re-opened |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "reopenedDate": "01 July 2007"
}
{- "resourceId": 12
}
Used when a client withdraws from a pending client application
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "withdraw" Example: command=withdraw Command to withdraw client application |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
withdrawalDate required | string The date the client withdraws from application |
withdrawalReasonId | integer <int64> The id of one of the code values setup for the code named |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "withdrawalDate": "01 July 2007",
- "withdrawalReasonId": 146
}
{- "resourceId": 12
}
Reverts the client application from withdrawn state back to pending
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "undoWithdrawal" Example: command=undoWithdrawal Command to undo the withdraw of a client application |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
reopenedDate required | string The date the client application was re-opened |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "reopenedDate": "01 July 2007"
}
{- "resourceId": 12
}
Allows you to modify or assign a default savings account for an existing Client.
The selected savings account should be one among the existing savings account for a particular customer.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "updateSavingsAccount" Example: command=updateSavingsAccount Command to update savings account |
savingsAccountId | integer <int64> The id of a savings account belonging to this client that is to be used as the default savings account |
{- "savingsAccountId": 3
}
{- "resourceId": 12
}
Allows you to assign a Staff for existed Client.
The selected Staff should belong to the same office (or an officer higher up in the hierarchy) as the Client he manages.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "assignStaff" Example: command=assignStaff Command to assign staff against client |
staffId required | integer <int64> The id of the staff member to be assigned to this client |
{- "staffId": 146
}
{- "resourceId": 12
}
Allows you to unassign the staff currently assigned to this client.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "unassignStaff" Example: command=unassignStaff Command to unassign staff |
{ }
{- "resourceId": 12
}
Clients can be closed if they do not have any non-closed loans/savingsAccount.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "close" Example: command=close Command to close client account |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
closureDate required | string The date the client account is closed |
closureReasonId | integer <int64> The id of one of the code values setup for the code named |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "closureDate": "01 July 2007",
- "closureReasonId": 876
}
{- "resourceId": 12
}
Clients can be reactivated after they have been closed.
id required | integer <int64> Example: 1 The unique identifer of a client. |
command required | string Default: "reactivate" Example: command=reactivate Command to close client account |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
reactivationDate required | string The date the client account is re-activated |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "reactivationDate": "01 July 2007"
}
{- "resourceId": 12
}
Returns summary format of all loan, savings and share account information related this client
id required | integer <int64> Example: 1 The unique identifer of a client. |
{- "loanAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "Mobile Loan",
- "shortProductName": "M001",
- "loanProductCounter": 3,
- "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientDisplayName": "John Doe",
- "clientStatus": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "loanType": {
- "id": 1,
- "code": "accountType.individual",
- "value": "individual"
}, - "loanCycle": 3,
- "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "expectedDisbursementDate": [
- 2000,
- 1,
- 1
], - "expectedMaturityDate": [
- 2000,
- 1,
- 1
]
}, - "inArrears": true,
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "originalLoan": 5000,
- "loanBalance": 3567,
- "amountPaid": 1723,
- "transactions": [
- { }
]
}
], - "savingsAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "Voluntary Savings",
- "shortProductName": "VS04",
- "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientDisplayName": "John Doe",
- "clientStatus": {
- "id": 300,
- "code": "clientStatusType.active",
- "value": "active"
}, - "depositType": {
- "id": 100,
- "code": "depositAccountType.savingsDeposit",
- "value": "Savings"
}, - "status": {
- "id": 100,
- "code": "savingsAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "submittedAndPendingApproval": true,
- "approved": true,
- "rejected": true,
- "withdrawnByApplicant": true,
- "active": true,
- "closed": true,
- "prematureClosed": true,
- "transferInProgress": true,
- "transferOnHold": true,
- "matured": true
}, - "subStatus": {
- "id": 0,
- "code": "SavingsAccountSubStatusEnum.none",
- "value": "Submitted and pending approval",
- "none": true,
- "inactive": false,
- "dormant": false,
- "escheat": false,
- "writeoff": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "approvedOnDate": [
- 2000,
- 1,
- 1
], - "approvedByUsername": "musoni",
- "approvedByFirstname": "musoni",
- "approvedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni",
- "closedOnDate": [
- 2000,
- 1,
- 1
], - "closedByUsername": "musoni",
- "closedByFirstname": "musoni",
- "closedByLastname": "musoni"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "accountBalance": 3567,
- "transactions": [
- { }
]
}
], - "shareAccounts": [
- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "productId": 4709,
- "productName": "XYZ Shares",
- "shortProductName": "XYZ1",
- "totalApprovedShares": 3,
- "totalPendingForApprovalShares": 3,
- "savingsAccountId": 4709,
- "savingsAccountNumber": "0001-0000-0005",
- "status": {
- "id": 100,
- "code": "shareAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni"
}, - "transactions": [
- { }
]
}
]
}
It is typical for MFI's to directly associate charges with an implicit Client account. These can be either fees or penalties.
Client Charges are client specific instances of Charges and payment or waive of these charges results in client transactions.
Used to search and list all client charges
id required | integer <int64> Example: 1 The unique identifer of a client. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
chargeStatus | string Enum: "all" "active" "inactive" A string value of the charge status. Used to restrict results to client charges by status. |
pendingPayment | boolean A boolean value that is used to search for charges that are pending or not |
{- "totalFilteredRecords": 26,
- "pageItems": [
- {
- "id": 800,
- "clientId": 1001,
- "chargeId": 56,
- "name": null,
- "chargeTimeType": {
- "id": 0,
- "code": "string",
- "value": "string"
}, - "chargeCalculationType": {
- "id": 0,
- "code": "string",
- "value": "string"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "dueDate": [
- 2000,
- 1,
- 1
], - "amount": 250,
- "amountPaid": 100,
- "amountWaived": 50,
- "amountWrittenOff": 0,
- "amountOutstanding": 0,
- "penalty": false,
- "isActive": false,
- "isPaid": false,
- "isWaived": false
}
]
}
Used to add new charge against client
id required | integer <int64> Example: 1 The unique identifer of a client. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
chargeId required | integer <integer64> The |
amount | number <decimal> The charge amount. Providing this will override its property as on charge definition. The Used in combination with |
dueDate | string The date the client charge is due on |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "chargeId": 1,
- "amount": 5.5,
- "dueDate": "01 July 2007"
}
{- "resourceId": 12
}
Used to return details of a single client charge
id required | integer <int64> Example: 1 The unique identifer of a client. |
chargeId required | integer <int64> Example: 777 The unique identifer of a client charge. |
{- "id": 800,
- "clientId": 1001,
- "chargeId": 56,
- "name": null,
- "chargeTimeType": {
- "id": 0,
- "code": "string",
- "value": "string"
}, - "chargeCalculationType": {
- "id": 0,
- "code": "string",
- "value": "string"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "dueDate": [
- 2000,
- 1,
- 1
], - "amount": 250,
- "amountPaid": 100,
- "amountWaived": 50,
- "amountWrittenOff": 0,
- "amountOutstanding": 0,
- "penalty": false,
- "isActive": false,
- "isPaid": false,
- "isWaived": false
}
Delete a client charge
id required | integer <int64> Example: 1 The unique identifer of a client. |
chargeId required | integer <int64> Example: 777 The unique identifer of a client charge. |
{- "resourceId": 1
}
Used to waive a portion or all of the charge
id required | integer <int64> Example: 1 The unique identifer of a client. |
chargeId required | integer <int64> Example: 777 The unique identifer of a client charge. |
command required | string Default: "waive" Example: command=waive Command to waive charge |
{ }
{- "resourceId": 12
}
Used to pay a portion or all of the charge
id required | integer <int64> Example: 1 The unique identifer of a client. |
chargeId required | integer <int64> Example: 777 The unique identifer of a client charge. |
command required | string Default: "pay" Example: command=pay Command to waive charge |
{ }
{- "resourceId": 12
}
Client Transactions refer to transactions made directly againt a Client's internal account.
Currently, these transactions are only created as a result of charge payments/waivers.
You are allowed to undo a transaction, however you cannot explicitly create one.
Used to search and list all client transactions
id required | integer <int64> Example: 1 The unique identifer of a client. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
{- "totalFilteredRecords": 26,
- "pageItems": [
- {
- "id": 4709,
- "officeId": true,
- "officeName": "Head Office",
- "type": {
- "id": 0,
- "code": "string",
- "value": "string"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "date": [
- 2000,
- 1,
- 1
], - "submittedOnDate": [
- 2000,
- 1,
- 1
], - "amount": 250,
- "reversed": false
}
]
}
Used to return details of a single client transaction
id required | integer <int64> Example: 1 The unique identifer of a client. |
clientTrxnId required | integer <int64> Example: 1098 The unique identifer of a client transaction. |
{- "id": 4709,
- "officeId": true,
- "officeName": "Head Office",
- "type": {
- "id": 0,
- "code": "string",
- "value": "string"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "date": [
- 2000,
- 1,
- 1
], - "submittedOnDate": [
- 2000,
- 1,
- 1
], - "amount": 250,
- "reversed": false
}
Allows the undo / reversal of client transaction
id required | integer <int64> Example: 1 The unique identifer of a client. |
clientTrxnId required | integer <int64> Example: 1098 The unique identifer of a client transaction. |
command required | string Default: "undo" Example: command=undo Command to undo the client transaction |
{ }
{- "resourceId": 12
}
Client Identifiers refer to documents that are used to uniquely identify a customer e.g. Drivers License, Passport, Ration card etc
List all identifiers belonging to client.
id required | integer <int64> Example: 1 The unique identifer of a client. |
[- {
- "id": 23,
- "clientId": 23,
- "identifierType": {
- "id": 23,
- "name": "Passport",
- "position": -1,
- "description": "Passport identity",
- "active": false,
- "default": false
}, - "documentKey": "0001-000ABC",
- "description": "Passport identity",
- "status": "clientIdentifierStatus.active",
- "validationPolicyExpression": "^.{1,12}$",
- "validationPolicyCode": "national_id_countryname_validator"
}
]
Creates a new client identifier and associates it with the client.
id required | integer <int64> Example: 1 The unique identifer of a client. |
identifierTypeId | integer <integer64> The |
documentKey | string [ 1 .. 50 ] characters A value that together with the |
description | string [ 1 .. 500 ] characters A description of identifier type. |
status | string Enum: "Active" "Inactive" A status of this identifier. |
{- "identifierTypeId": 23,
- "documentKey": "Passport",
- "description": "Passport identity",
- "status": "Active"
}
{- "resourceId": 12
}
Find Client Identifier By Id
id required | integer <int64> Example: 1 The unique identifer of a client. |
identifierId required | integer <int64> Example: 1 The unique identifer of a client identifier. |
{- "id": 23,
- "clientId": 23,
- "identifierType": {
- "id": 23,
- "name": "Passport",
- "position": -1,
- "description": "Passport identity",
- "active": false,
- "default": false
}, - "documentKey": "0001-000ABC",
- "description": "Passport identity",
- "status": "clientIdentifierStatus.active",
- "validationPolicyExpression": "^.{1,12}$",
- "validationPolicyCode": "national_id_countryname_validator"
}
Update an existing Client Identifier
id required | integer <int64> Example: 1 The unique identifer of a client. |
identifierId required | integer <int64> Example: 1 The unique identifer of a client identifier. |
Update an existing Client Identifier
identifierTypeId | integer <integer64> The |
documentKey | string [ 1 .. 50 ] characters A value that together with the |
description | string [ 1 .. 500 ] characters A description of identifier type. |
status | string Enum: "Active" "Inactive" A status of this identifier. |
{- "identifierTypeId": 23,
- "documentKey": "Passport",
- "description": "Passport identity",
- "status": "Active"
}
{- "resourceId": 1,
- "changes": { }
}
Delete an existing Client Identifier
The deletion is a hard delete removing the client identifer entry and association with client.
id required | integer <int64> Example: 1 The unique identifer of a client. |
identifierId required | integer <int64> Example: 1 The unique identifer of a client identifier. |
{- "resourceId": 1
}
List all validation polices.
[- {
- "id": 23,
- "regex": "^.{1,12}$",
- "description": "1 character and not more that 12 characters long.",
- "code": "national_id_countryname_validator"
}
]
Creates new validation policy.
expressionValue required | string [ 1 .. 255 ] characters A regular expression that is used as validation policy. |
validationType required | string [ 1 .. 255 ] characters A unique name or code associated with this validation policy. |
description required | string [ 1 .. 255 ] characters A description of what the regex validates. |
{- "expressionValue": "^.{1,12}$",
- "validationType": "national_id_countryname_validator",
- "description": "1 character and not more that 12 characters long."
}
{- "resourceId": 12
}
Find Validation Policy By Id
id required | integer <int64> Example: 1 The unique identifer of a client identifier validation policy. |
{- "id": 23,
- "regex": "^.{1,12}$",
- "description": "1 character and not more that 12 characters long.",
- "code": "national_id_countryname_validator"
}
Update an existing Validation Policy
id required | integer <int64> Example: 1 The unique identifer of a client identifier validation policy. |
Update existing validation policy
expressionValue | string [ 1 .. 255 ] characters A regular expression that is used as validation policy. |
validationType | string [ 1 .. 255 ] characters A unique name or code associated with this valiation policy. |
description | string [ 1 .. 255 ] characters A description of what the regex validates. |
{- "expressionValue": "^.{1,12}$",
- "validationType": "national_id_countryname_validator",
- "description": "1 character and not more that 12 characters long."
}
{- "resourceId": 1
}
Delete an existing Validation Policy
The deletion is a hard delete fully removing the entry.
id required | integer <int64> Example: 1 The unique identifer of a client identifier validation policy. |
{- "resourceId": 1
}
List all client identifier types.
[- {
- "id": 23,
- "name": "Passport",
- "description": "Passport identity",
- "validationPolicy": {
- "id": 23,
- "regex": "^.{1,12}$",
- "description": "1 character and not more that 12 characters long.",
- "code": "national_id_countryname_validator"
}, - "deleted": false,
- "mandatory": false,
- "default": false
}
]
Creates new client identifier type.
name | string [ 1 .. 100 ] characters A unique name that identifies the type of identity this represents. |
description | string [ 1 .. 500 ] characters A description of identifier type. |
validationPolicy | integer <integer64> Unique |
deleted | boolean Indicates if identifier type is deleted |
mandatory | boolean Indicates if identifier type is mandatory |
default | boolean Indicates if identifier type is default |
{- "name": "Passport",
- "description": "Passport identity",
- "validationPolicy": 23,
- "deleted": false,
- "mandatory": false,
- "default": false
}
{- "resourceId": 12
}
Find Client Identifier Type By Id
id required | integer <int64> Example: 1 The unique identifer of a client identifier type. |
{- "id": 23,
- "name": "Passport",
- "description": "Passport identity",
- "validationPolicy": {
- "id": 23,
- "regex": "^.{1,12}$",
- "description": "1 character and not more that 12 characters long.",
- "code": "national_id_countryname_validator"
}, - "deleted": false,
- "mandatory": false,
- "default": false
}
Update an existing Client Identifier Type
id required | integer <int64> Example: 1 The unique identifer of a client identifier type. |
Update existing Client Identifier Type
name | string [ 1 .. 100 ] characters A unique name that identifies the type of identity this represents. |
description | string [ 1 .. 500 ] characters A description of identifier type. |
validationPolicy | integer <integer64> Unique |
mandatory | boolean Indicates if identifier type is mandatory |
default | boolean Indicates if identifier type is default |
{- "name": "Passport",
- "description": "Passport identity",
- "validationPolicy": 23,
- "mandatory": false,
- "default": false
}
{- "resourceId": 1
}
Delete an existing Client Identifier Type
The deletion is a soft delete marking the entry as deleted.
id required | integer <int64> Example: 1 The unique identifer of a client identifier type. |
{- "resourceId": 1
}
Blacklisting enables the ability to blacklist a client using different client identifiers e.g (National ID number).
The system will then block the creation of any client, savings account or loan account where any of these identifers are used.
List all blacklist entries.
A blacklist entry is made up of documentType
and documentKey
.
The documentType
relates to a Client Identifier Type setup and the documentKey
is the value of it e.g. National ID and National ID number or Passport and Passport number.
The blacklist is used by account creation and approval APIs to verify the related client or account is not blacklisted.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
orderBy | string Expects a valid SQL fragment that is used in e.g. |
sortOrder | string Enum: "ASC" "DESC" Used with If |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Adds an new entry to blacklist.
A blacklist entry is made up of documentTypeId
and documentKey
.
The documentTypeId
relates to a Client Identifier Type setup and the documentKey
is the value of it e.g. National ID and National ID number or Passport and Passport number.
The blacklist is used by account creation and approval APIs to verify the related client or account is not blacklisted.
documentTypeId required | integer <int64> The id of the client identifier type being used. |
documentKey required | string [ 1 .. 50 ] characters A value associated with the The system will use this |
note | string [ 1 .. 500 ] characters A more detailed note or description in relation to this blacklist entry. |
submittedOnDate | string The date this blacklist entry was submitted in a date format supported by Joda Time. If omitted when creating the blacklist entry, the date defaults to todays date. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
{- "documentTypeId": 10,
- "documentKey": "ABC-09878",
- "note": "Blacklisted due to loan default.",
- "submittedOnDate": "01 July 2007",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy"
}
{- "resourceId": 12
}
Find a Blacklist entry by Id
id required | integer <int64> Example: 1 The unique identifer of a blacklist entry. |
[- {
- "id": 4709,
- "documentType": {
- "id": 10,
- "name": "custom-ci-8678uqi4",
- "description": "Custom client identifier type for country.",
- "isDeleted": false,
- "isMandatory": false,
- "isDefault": false
}, - "documentKey": "0001-AKH",
- "note": "string",
- "timelineData": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "John",
- "submittedByLastname": "Doe",
- "updatedOnDate": [
- 2000,
- 1,
- 1
], - "updatedByUsername": "musoni",
- "updatedByFirstname": "John",
- "updatedByLastname": "Doe",
- "deletedOnDate": [
- 2000,
- 1,
- 1
], - "deletedByUsername": "musoni",
- "deletedByFirstname": "John",
- "deletedByLastname": "Doe"
}, - "clientId": 4709,
- "clientName": "Doe",
- "active": true
}
]
Update an existing blacklist entry.
id required | integer <int64> Example: 1 The unique identifer of a blacklist entry. |
Update existing blacklist entry
documentTypeId | integer <int64> The id of the client identifier type being used. |
documentKey | string [ 1 .. 50 ] characters A value associated with the The system will use this |
note | string [ 1 .. 500 ] characters A more detailed note or description in relation to this blacklist entry. |
{- "documentTypeId": 10,
- "documentKey": "ABC-09878",
- "note": "Blacklisted due to loan default."
}
{- "resourceId": 1
}
Delete an existing blacklist entry.
The deletion is a soft delete, marking the entry as not active.
id required | integer <int64> Example: 1 The unique identifer of a blacklist entry. |
{- "resourceId": 1
}
Blacklist an existing Client.
The process takes the Client Identifier Types associated with the existing client and adds them to the blacklist.
This has the effect of blacklisting the client.
clientId required | integer <int64> Example: 1 The unique identifer of a client. |
{- "clientId": 1
}
The creditbureaus api allows access to creditbureau data stored in Musoni through pre-integrated CRB providers.
List all Credit Bureaus
creditbureauIdentifier | string looks up a creditbureau by identifier, eg mcix/metropol etc. |
[- {
- "id": 4709,
- "identifier": "mcix",
- "name": "MCIX",
- "description": "MCIX Search API",
- "active": true,
- "configurations": {
- "id": 23,
- "fieldName": "SUBSCRIPTION_KEY",
- "fieldValue": 12345
}
}
]
Find Credit Bureau member by id
id required | integer <int64> Example: 1 The unique identifer of the selected resource. |
[- {
- "id": 4709,
- "identifier": "mcix",
- "name": "MCIX",
- "description": "MCIX Search API",
- "active": true,
- "configurations": {
- "id": 23,
- "fieldName": "SUBSCRIPTION_KEY",
- "fieldValue": 12345
}
}
]
List Credit reference requests for Credit bureau, without parameters will only return 200 results. This endpoint will return all requests, including failed requests
bureauId required | integer <int64> The ID of the credit bureau |
clientId | string Looks up credit reference requests for a specific clientId |
loanId | string Looks up credit reference requests for a specific loanId |
[- {
- "id": 4709,
- "identifier": "mcix",
- "responseBody": "{\"api_code_description\":\"Client NRC number is invalid. Please provide a valid short or long NRC number to perform the MCIX request\",\"has_error\":true}",
- "creditBureau": {
- "id": 4709,
- "identifier": "mcix",
- "name": "MCIX",
- "description": "MCIX Search API",
- "active": true
}, - "startDate": 1643189387000,
- "endDate": 1643189387000,
- "clientId": 167873,
- "clientDisplayName": "John Doe",
- "loanId": 167873,
- "loanAccountNumber": "001-0023-333333",
- "status": {
- "id": 400,
- "code": "creditReferenceRequestStatus.complete.with.errors",
- "value": "Complete With Errors"
}
}
]
Find Reference request by Id
bureauId required | integer <int64> Example: 1 The id of the bureau being used |
referenceRequestId required | integer <int64> Example: 1 The unique identifer of the selected resource. |
[- {
- "id": 4709,
- "identifier": "mcix",
- "responseBody": "{\"api_code_description\":\"Client NRC number is invalid. Please provide a valid short or long NRC number to perform the MCIX request\",\"has_error\":true}",
- "creditBureau": {
- "id": 4709,
- "identifier": "mcix",
- "name": "MCIX",
- "description": "MCIX Search API",
- "active": true
}, - "startDate": 1643189387000,
- "endDate": 1643189387000,
- "clientId": 167873,
- "clientDisplayName": "John Doe",
- "loanId": 167873,
- "loanAccountNumber": "001-0023-333333",
- "status": {
- "id": 400,
- "code": "creditReferenceRequestStatus.complete.with.errors",
- "value": "Complete With Errors"
}
}
]
List succesfully completed Credit reference responses for Credit bureau, without parameters will only return 200 results. This endpoint will not return any failed requests
bureauId required | integer <int64> The ID of the credit bureau |
clientId | string Looks up credit reference requests for a specific clientId |
loanId | string Looks up credit reference requests for a specific loanId |
[- {
- "id": 4709,
- "identifier": "mcix",
- "responseBody": "{\"api_code_description\":\"Client NRC number is invalid. Please provide a valid short or long NRC number to perform the MCIX request\",\"has_error\":true}",
- "creditBureau": {
- "id": 4709,
- "identifier": "mcix",
- "name": "MCIX",
- "description": "MCIX Search API",
- "active": true
}, - "startDate": 1643189387000,
- "endDate": 1643189387000,
- "clientId": 167873,
- "clientDisplayName": "John Doe",
- "loanId": 167873,
- "loanAccountNumber": "001-0023-333333",
- "status": {
- "id": 400,
- "code": "creditReferenceRequestStatus.complete.with.errors",
- "value": "Complete With Errors"
}
}
]
Client Addresses is an optional module that can be configured to be used with clients.
In order to activate Clients Address module, we need to enable the global configuration setting enable-address by setting its value to true.
Used to search and list all client addresses
id required | integer <int64> Example: 1 The unique identifer of a client. |
addressTypeId | integer The id of a code value that represents a address type. Used to restrict results to client addresses of this type. |
status | boolean A boolean value that is used to search for active or inactive client addresses |
[- {
- "client_id": 4709,
- "addressId": 4709,
- "addressTypeId": 588,
- "addressType": "Rural Address",
- "isActive": true,
- "street": "Rue des Irlandais",
- "addressLine1": "Somewhere",
- "addressLine2": "over",
- "addressLine3": "the rainbow",
- "city": "Paris",
- "countyDistrict": "Co. Dublin",
- "stateProvinceId": 987,
- "countryId": 1034,
- "postalCode": "SW17"
}
]
Creates a new client address.
Note: Client address uses the Field Configuration feature which supports the ability to enable or disable fields on the address and to indicate which fields are mandatory and which are not.
id required | integer <int64> Example: 1 The unique identifer of a client. |
type required | integer The id of a code value that represents a address type. |
street | string <= 100 characters Part of the address fields. Can be used to capture street name of address |
addressLine1 | string <= 100 characters Part of the address fields. Can be used to capture portion of address |
addressLine2 | string <= 100 characters Part of the address fields. Can be used to capture portion of address |
addressLine3 | string <= 100 characters Part of the address fields. Can be used to capture portion of address |
townVillage | string <= 100 characters Part of the address fields. Can be used to capture town of address |
countyDistrict | string <= 100 characters Part of the address fields. Can be used to capture county or district of address |
city | string <= 100 characters Part of the address fields. Can be used to capture city of address |
stateProvinceId | integer <integer64> The id of the code value related to the code |
countryId | integer <integer64> The id of the code value related to the code |
postalCode | string <= 10 characters Part of the address fields. Can be used to capture postcode of address |
latitude | number <decimal> Part of the address fields. Can be used to latitude portion of lat-long coordinate |
longitude | number <decimal> Part of the address fields. Can be used to longitude portion of lat-long coordinate |
{- "street": "Rue des Irlandais",
- "addressLine1": "Somewhere",
- "addressLine2": "over",
- "addressLine3": "the rainbow",
- "townVillage": "Smalltown",
- "countyDistrict": "Co. Dublin",
- "city": "Paris",
- "stateProvinceId": 987,
- "countryId": 1034,
- "postalCode": "SW17",
- "latitude": 0.34567,
- "longitude": 0.34567
}
{- "resourceId": 12
}
Updates an existing client address.
Note: Client address uses the Field Configuration feature which supports the ability to enable or disable fields on the address and to indicate which fields are mandatory and which are not.
id required | integer <int64> Example: 1 The unique identifer of a client. |
type required | integer The id of a code value that represents a address type. |
street | string <= 100 characters Part of the address fields. Can be used to capture street name of address |
addressLine1 | string <= 100 characters Part of the address fields. Can be used to capture portion of address |
addressLine2 | string <= 100 characters Part of the address fields. Can be used to capture portion of address |
addressLine3 | string <= 100 characters Part of the address fields. Can be used to capture portion of address |
townVillage | string <= 100 characters Part of the address fields. Can be used to capture town of address |
countyDistrict | string <= 100 characters Part of the address fields. Can be used to capture county or district of address |
city | string <= 100 characters Part of the address fields. Can be used to capture city of address |
stateProvinceId | integer <integer64> The id of the code value related to the code |
countryId | integer <integer64> The id of the code value related to the code |
postalCode | string <= 10 characters Part of the address fields. Can be used to capture postcode of address |
latitude | number <decimal> Part of the address fields. Can be used to latitude portion of lat-long coordinate |
longitude | number <decimal> Part of the address fields. Can be used to longitude portion of lat-long coordinate |
{- "street": "Rue des Irlandais",
- "addressLine1": "Somewhere",
- "addressLine2": "over",
- "addressLine3": "the rainbow",
- "townVillage": "Smalltown",
- "countyDistrict": "Co. Dublin",
- "city": "Paris",
- "stateProvinceId": 987,
- "countryId": 1034,
- "postalCode": "SW17",
- "latitude": 0.34567,
- "longitude": 0.34567
}
{- "resourceId": 1,
- "changes": { }
}
Used to view the field configuration for client address module
[- {
- "fieldConfigurationId": 4709,
- "entity": "ADDRESS",
- "subentity": "CLIENT",
- "field": "addressType",
- "is_enabled": true,
- "is_mandatory": false,
- "validation_regex": true
}
]
The supported schema for creating a new loan product.
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
name required | string [ 1 .. 100 ] characters The full name of the loan product. |
shortName required | string = 4 characters The short name of the loan product. An abbreviated version of the name, used in reports or menus where space is limited. |
description | string <= 500 characters A description to provide users with more information about the product. |
productGroupId | integer <integer64> The id of associated product group. |
fundId | integer <integer64> The id of associated fund source. The original source of your funds (for example a grant). |
loanIncomeTaxGroupId | integer <integer64> The id of associated TaxGroup to be used for tax on loan income. If provided, it means that loan accounts created against this product will support tax on their income. Only supported when the Periodic Accruals accounting is configured if provided, |
currencyCode required | string <= 3 characters Relates to the the currency of the loan product. A three character identifer of currency this loan product uses. |
digitsAfterDecimal required | integer Relates to the the currency of the loan product. The number of digits after decimal to be supported on the currency. |
inMultiplesOf | integer Relates to the the currency of the loan product. Relevant for currencies where digitsAfterDecimal is zero. This will round the monetary amount to the nearest multiple. |
installmentAmountInMultiplesOf required | integer Relates to the loan repayment schedule. This will round the monetary amount of an installment to the nearest multiple. Must be greater than or equal to |
principal | number <decimal> The Can be used with |
minPrincipal | number <decimal> The minimum size of any loan under this loan product. See also |
maxPrincipal | number <decimal> The maximum size of any loan under this loan product. See also |
numberOfRepayments required | integer The Can be used with |
minNumberOfRepayments | integer The See also |
maxNumberOfRepayments | integer The See also |
repaymentEvery required | integer Used together with |
repaymentFrequencyType required | integer Enum: 0 1 2 3 Used together with Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
isLinkedToFloatingInterestRates | boolean Default: false A boolean that indicates if the product is using the "floating" interest rates concept or not. if false, if true, |
interestRatePerPeriod | number <decimal> The default interest rate shown to user that create loans via forms. Can be used with Used with Mandatory if |
minInterestRatePerPeriod | number <decimal> The minimum interest rate allowed in loans that use this product. See also |
maxInterestRatePerPeriod | number <decimal> The maximum interest rate allowed in loans that use this product. See also |
interestRateFrequencyType | integer Enum: 2 3 Used together with Supported options are: 2=Months 3=Years Mandatory if |
floatingRatesId | integer <integer64> The id on a floating rate entry on the system. |
interestRateDifferential | number <decimal> The difference between the base rate and this loan products floating interest rate. |
minDifferentialLendingRate | number <decimal> The min allowed difference between the base rate and this loan products floating interest rate. |
maxDifferentialLendingRate | number <decimal> The max allowed difference between the base rate and this loan products floating interest rate. |
defaultDifferentialLendingRate | number <decimal> The default difference between the base rate and this loan products floating interest rate. |
isFloatingInterestRateCalculationAllowed | boolean Default: false A boolean that indicates if floating interest rate caclulation is allowed. |
repayPrincipalEvery | integer Related to |
repayInterestEvery | integer Related to |
firstRepaymentOffsetPeriod | integer
For example, if the See also |
allowVariableInstallments | boolean Default: false Use 'allowVariableInstallments' if you wish to be able to change the repayment schedule. Example - if If true, then |
minimumGap | integer Mandatory if |
maximumGap | integer Mandatory if |
graceOnPrincipalPayment | integer If populated, indicates the number of installments you wish your grace period on principal payments to be. |
graceOnInterestPayment | integer If populated, indicates the number of installments you wish your grace period on interest payments to be. |
graceOnInterestCharged | integer If populated, indicates the number of installments you wish there to be no interest charged / calculated for. |
graceOnPrincipalAndInterestPayment | boolean Default: false Related to attribute overrides for loans. see |
graceOnArrearsAgeing | boolean Default: false Related to attribute overrides for loans. see |
inArrearsTolerance | number <decimal> Deprecated Deprecated from 1.45. No longer used. |
standingInstruction | boolean Deprecated Default: false Deprecated. if passed as direct parameter not processed or used. Related to attribute overrides for loans. see |
allowAdditionalCharges | boolean Deprecated Default: true If false, when adding or editing loans with this product users will not be allowed to add additional charges to the loan. Deprecated. if passed as direct parameter not processed or used. Related to attribute overrides for loans. see |
canUseForTopup | boolean Default: false if true, a new loan of this product type is allowed to top-up an existing loan of the client. |
interestType required | integer Enum: 0 1 Relates to the Dictates how the the interest is calculated for the loan schedule. Supported options are: 0=Declining Balance 1=Flat Flat Interest loans charge equal interest amounts on each loan instalment, based on the original loan principal. Declining Balance loans calculate the interest amount on each instalment based upon the outstanding balance of the loan (therefore the interest amount charged on each instalment reduces as the loan is repaid). |
isInterestRecalculationEnabled | boolean Default: false Mandatory and only applicable if Used to denote whether interest recalculation is enabled or disabled. When a client falls into arrears, additional interest will be recalculated. On declining balance loans interest is always calculated across the new loan term. |
allowPartialPeriodInterestCalcualtion | boolean Default: false Only Applicable if |
recalculateInterestOnArrears | boolean Default: false Only Applicable if |
interestRecalculationCompoundingMethod | integer Enum: 0 1 2 3 Mandatory and only applicable if Only supported if Supported options are: 0=None 1=Interest 2=Fee 3=Interest and Fee When a client falls into arrears, additional interest is calculated. Use this setting to determine whether the new interest amount is calculated on fees, interest or fees & interest. |
rescheduleStrategyMethod | integer Enum: 1 2 3 Mandatory and only applicable if Supported options are: 1=Reschedule next repayments 2=Reduce number of installements 3=Reduce installment amount (Reduce EMI Amount) Select 2="Reduce number of installments" if you wish the loan to finish earlier in the case of early repayments Select 3="Reduce installment amount" if you wish the interest due on future installments to be reduced in the case of early repayments. |
recalculationRestFrequencyType | integer Enum: 1 2 3 4 Mandatory and only applicable if Supported options are: 1=Same as repayment period 2=Daily 3=Weekly 4=Monthly Use 2=Daily if you wish interest to be calculated on the outstanding loan balance from the previous day. Use 3=weekly for the previous week Use 4=monthly for the previous month. Using 0=Same as Repayment period will use the repayment frequency of the loan itself. |
recalculationRestFrequencyInterval | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationRestFrequencyNthDayType | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationRestFrequencyDayOfWeekType | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationRestFrequencyOnDayType | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationCompoundingFrequencyInterval | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationCompoundingFrequencyNthDayType | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationCompoundingFrequencyDayOfWeekType | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
recalculationCompoundingFrequencyOnDayType | integer Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
isArrearsBasedOnOriginalSchedule | boolean Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
isCompoundingToBePostedAsTransaction | boolean Optional and only applicable if Not supported through Musoni UI #TODO review if needed |
preClosureInterestCalculationStrategy | integer Enum: 1 2 Optional and only applicable if Supported options are: 1=TILL_PRE_CLOSURE_DATE 2=TILL_REST_FREQUENCY_DATE When a customer pays off a loan ahead of schedule and not on the due date of the installment, \n this option controls whether the interest is calculated on the date of the transaction, \n or uses interest as per the end date of the current installment. |
inDuplum | boolean Optional and only applicable if if true, the system will stop calculating additional (penalty) interest on loans in arrears once the total interest, fees and penalties outstanding is the same as the outstanding principal. This only applies to interest recalculation loans. |
amortizationType required | integer Enum: 0 1 Relates to the the repayment schedule. Dictates how the the loan is amortized over the loan schedule. Supported options are: 0=Equal Principal 1=Equal Installments Mandatory and only relevant if Selecting 0=Equal Principal ensures that the principal of the loan installment remains the same through the loan term (with the interest and installment size therefore declining). Selecting 1=Equal Installments ensures the principal is adjusted to ensure equal installment sizes. |
interestCalculationPeriodType required | integer Default: 1 Enum: 0 1 Relates to the the repayment schedule. Dictates how the the interest is calculated for the loan schedule. Supported options are: 0=Daily 1=Same as repayment period Defaults to 1="Same as Repayment Period". This ensures that all loans of the same loan term have the same interest amount charged over the course of the loan. Selecting 0=Daily means that the interest amount charged on a loan product will vary slightly based on the number of days in the months over which the loan term runs. |
daysInYearType required | integer Enum: 1 360 364 365 An enumeration that indicates the number of days in year to be used. This determines whether the daily interest rate is calculated by dividing the ‘Nominal Annual Interest Rate’ by 360, or 365. Supported options are: 1=Actual 360=360 364=364 365=365 |
daysInMonthType required | integer Enum: 1 30 An enumeration that indicates the number of days in month to be used. Specifies the number of days in a Month, used to calculate partial periods for monthly loans. Supported options are: 1=Actual 30=30 |
transactionProcessingStrategyId required | integer Enum: 1 5 6 An This relates to functionality that is also known as Payment Application Logic. A number of out of the box approaches exist and custom approaches can be added if required. Determines the order in which Interest, Principal, Penalties and Fees are paid off when repayments are made. Supported options are: 1=Stanard (Penalties, Fees, Interest, Principal order) 5=Principal, Interest, Penalties, Fees Order 6=Interest, Principal, Penalties, Fees Order |
includeInBorrowerCycle | boolean Default: false Used to denote whether the loans should include in loan cycle counter or not. |
holdGuaranteeFunds | boolean Default: false If true, a guarantor will not be able to withdraw funds linked as a guarantee to the loan until the loan is repaid. if true, see |
mandatoryGuarantee | number <decimal> Mandatory and only applicable if This is the percentage of the loan that has to be guaranteed before the loan can be created. |
minimumGuaranteeFromOwnFunds | number <decimal> This is the minimum percentage that has to be guaranteed from the client's own savings, rather than the savings of other guarantors. |
minimumGuaranteeFromGuarantor | number <decimal> This is the minimum percentage that any other guarantors have to guarantee for the loan to be created. |
splitInterestAmongGuarantors | boolean Default: false Mandatory and only applicable if If true, then when the loan is fully repaid, the interest from the loan will be paid into each guarantor's savings account in proportion to the percentage of the loan they guaranteed. |
canAutoAllocateOverpayments | boolean Default: false If true then if the loan is overpaid, the overpaid amount will be automatically transferred to the linked savings account. If there is no linked savings account, the overpaid amount has to be transferred manually. This will also apply to already active accounts. |
autoDisburse | boolean Default: false If true, newly created loans will automatically be approved and disbursed. |
paymentTypeId | integer Value: 1 Mandatory if |
checkNumber | string <= 45 characters Optional and only applicable if |
receiptNumber | string <= 45 characters Mandatory if |
restrictSavingsProductId | integer <integer64> The Linked savings account will then be required to be associated with this selected savings product. |
requiresLinkedSavingsAccount | boolean Used to indicate if a linked savings account is required or not. |
requiresMandatorySavings | boolean Optional and only applicable if |
mandatorySavingsMethod | string Enum: "UPFRONT" "SPREAD" Mandatory and only applicable if |
mandatorySavingsPercentage | number <decimal> Mandatory and only applicable if |
object | |
accountingRule | integer Enum: 1 2 3 4 Indicates what type of accounting is enabled for this loan product. Supported options are: 1=None 2=Cash Based Accounting 3=Accrual Periodic 4=Accrual Upfront |
fundSourceAccountId | integer <integer64> The |
loanPortfolioAccountId | integer <integer64> The |
transfersInSuspenseAccountId | integer <integer64> The |
interestOnLoanAccountId | integer <integer64> The |
incomeFromFeeAccountId | integer <integer64> The |
incomeFromPenaltyAccountId | integer <integer64> The |
incomeFromRecoveryAccountId | integer <integer64> The |
writeOffAccountId | integer <integer64> The |
overpaymentLiabilityAccountId | integer <integer64> The |
receivableInterestAccountId | integer <integer64> The |
receivableFeeAccountId | integer <integer64> The |
receivablePenaltyAccountId | integer <integer64> The |
interestWriteOffAccountId | integer <integer64> The |
feeWriteOffAccountId | integer <integer64> The |
penaltyWriteOffAccountId | integer <integer64> The |
suspendedInterestIncomeAccountId | integer <integer64> The |
interestTaxOnLoanAccountId | integer <integer64> The This GL account is used to book tax on interest when the tax feature is setup for loans and |
allowFlexibleAdvancePayment | boolean use for non-interest recalculation product to allow interest recalculation on advance payment. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "name": "Green Loans 1",
- "shortName": "Green Loans 1",
- "description": "12.5% Declining Balance",
- "productGroupId": 1,
- "fundId": 1,
- "loanIncomeTaxGroupId": 1,
- "currencyCode": "KES",
- "digitsAfterDecimal": 0,
- "inMultiplesOf": 1,
- "installmentAmountInMultiplesOf": 1,
- "principal": 1000.5,
- "minPrincipal": 100,
- "maxPrincipal": 100,
- "numberOfRepayments": 1,
- "minNumberOfRepayments": 1,
- "maxNumberOfRepayments": 1,
- "repaymentEvery": 1,
- "repaymentFrequencyType": 2,
- "isLinkedToFloatingInterestRates": false,
- "interestRatePerPeriod": 10.5,
- "minInterestRatePerPeriod": 10.5,
- "maxInterestRatePerPeriod": 10.5,
- "interestRateFrequencyType": 2,
- "floatingRatesId": 1,
- "interestRateDifferential": 2.5,
- "minDifferentialLendingRate": 1,
- "maxDifferentialLendingRate": 4,
- "defaultDifferentialLendingRate": 2.5,
- "isFloatingInterestRateCalculationAllowed": false,
- "repayPrincipalEvery": 1,
- "repayInterestEvery": 1,
- "firstRepaymentOffsetPeriod": 1,
- "allowVariableInstallments": false,
- "minimumGap": 1,
- "maximumGap": 1,
- "graceOnPrincipalPayment": 1,
- "graceOnInterestPayment": 1,
- "graceOnInterestCharged": 1,
- "graceOnPrincipalAndInterestPayment": false,
- "graceOnArrearsAgeing": false,
- "inArrearsTolerance": 0,
- "standingInstruction": false,
- "allowAdditionalCharges": false,
- "canUseForTopup": false,
- "interestType": 0,
- "isInterestRecalculationEnabled": false,
- "allowPartialPeriodInterestCalcualtion": false,
- "recalculateInterestOnArrears": false,
- "interestRecalculationCompoundingMethod": 1,
- "rescheduleStrategyMethod": 1,
- "recalculationRestFrequencyType": 1,
- "recalculationRestFrequencyInterval": 1,
- "recalculationRestFrequencyNthDayType": 1,
- "recalculationRestFrequencyDayOfWeekType": 1,
- "recalculationRestFrequencyOnDayType": 1,
- "recalculationCompoundingFrequencyInterval": 1,
- "recalculationCompoundingFrequencyNthDayType": 1,
- "recalculationCompoundingFrequencyDayOfWeekType": 1,
- "recalculationCompoundingFrequencyOnDayType": 1,
- "isArrearsBasedOnOriginalSchedule": false,
- "isCompoundingToBePostedAsTransaction": false,
- "preClosureInterestCalculationStrategy": 1,
- "inDuplum": false,
- "amortizationType": 1,
- "interestCalculationPeriodType": 1,
- "daysInYearType": 1,
- "daysInMonthType": 1,
- "transactionProcessingStrategyId": 1,
- "includeInBorrowerCycle": false,
- "holdGuaranteeFunds": false,
- "mandatoryGuarantee": 0,
- "minimumGuaranteeFromOwnFunds": 0,
- "minimumGuaranteeFromGuarantor": 0,
- "splitInterestAmongGuarantors": false,
- "canAutoAllocateOverpayments": false,
- "autoDisburse": false,
- "paymentTypeId": 1,
- "checkNumber": 1,
- "receiptNumber": 1,
- "restrictSavingsProductId": 1,
- "requiresLinkedSavingsAccount": false,
- "requiresMandatorySavings": false,
- "mandatorySavingsMethod": "UPFRONT",
- "mandatorySavingsPercentage": 0,
- "allowAttributeOverrides": {
- "allowAdditionalCharges": true,
- "amortizationType": false,
- "interestType": false,
- "interestCalculationPeriodType": false,
- "inArrearsTolerance": false,
- "repaymentEvery": true,
- "multipleBalloonRepayments": false,
- "transactionProcessingStrategyId": false,
- "graceOnPrincipalAndInterestPayment": false,
- "graceOnArrearsAgeing": false,
- "standingInstruction": false
}, - "accountingRule": 2,
- "fundSourceAccountId": 0,
- "loanPortfolioAccountId": 0,
- "transfersInSuspenseAccountId": 0,
- "interestOnLoanAccountId": 0,
- "incomeFromFeeAccountId": 0,
- "incomeFromPenaltyAccountId": 0,
- "incomeFromRecoveryAccountId": 0,
- "writeOffAccountId": 0,
- "overpaymentLiabilityAccountId": 0,
- "receivableInterestAccountId": 0,
- "receivableFeeAccountId": 0,
- "receivablePenaltyAccountId": 0,
- "interestWriteOffAccountId": 0,
- "feeWriteOffAccountId": 0,
- "penaltyWriteOffAccountId": 0,
- "suspendedInterestIncomeAccountId": 0,
- "interestTaxOnLoanAccountId": 0,
- "allowFlexibleAdvancePayment": false
}
{- "resourceId": 12
}
Activates a closed loan product.
id required | integer <int64> Example: 1 The unique identifer of a Loan Product. |
command required | string Example: command=activate The activate command. |
{ }
{- "resourceId": 12,
- "changes": {
- "status": {
- "id": 300,
- "code": "loanProductStatus.active",
- "value": "Active",
- "active": true,
- "closed": false
}
}
}
Closes an active loan product.
id required | integer <int64> Example: 1 The unique identifer of a Loan Product. |
command required | string Example: command=close The close command. |
{ }
{- "resourceId": 12,
- "changes": {
- "status": {
- "id": 600,
- "code": "loanProductStatus.closed",
- "value": "Closed",
- "active": false,
- "closed": true
}
}
}
List all Loans
See The Data Filter API for better approach to search/filter.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
search | string Example: search=John Doe Searches (matching around) across:
|
officeId | integer The id of an office. Used to restrict to set of staff associated with the office. |
externalId | string Example: externalId=L00001 if provided only loans with this exact externalId will be returned |
staffId | integer id of a staff/loanofficer, if provided will only return the loans linked to this staff id |
groupId | integer id of a staff/loanofficer, if provided will only return the loans linked to this staff id |
underHierarchy | string Example: underHierarchy=.2.3 if provided only loans that exist under the hierarchy provided will be return (office + child offices) |
orderBy | string Enum: "id" "loan_status_id" "submittedon_date" "disbursedon_date" "expectedmaturedon_date" "firstrepaymenton_date" "principal_amount" The database field name that you wish to order the list of loans by. |
sortOrder | string Enum: "ASC" "DESC" Used with |
accountNo | string Example: accountNo=L00001 if provided only loans with this exact accountNo will be returned |
skipRowCount | boolean Default: false Example: skipRowCount=false if true, does not return rowcount, improving search speed. |
disbursementFromDate | string Example: disbursementFromDate=2020-01-01 Allows to only return a subset of loans based on disbursement date, should be provided in format "yyyy-MM-dd" |
disbursementToDate | string Example: disbursementToDate=2021-01-01 Allows to only return a subset of loans based on disbursement date, should be provided in format "yyyy-MM-dd" |
clientOfficeName | string Example: clientOfficeName=Head office Only returns loans that are part of an exact office name. |
modifiedSinceTimestamp | integer Example: modifiedSinceTimestamp=1634152729 Should be passed as a UNIX Timestamp. When provided only loans that have been created or updated since the provided timestamp are returned. Loans will be marked as modified whenever there is any modification to the loan, the underlying schedule, transactions, charges etc. This parameter can be used in integrations to fetch changed data since a last fetch, timestamps will be treated as UTC and returned as UTC. |
sqlSearch | string Deprecated Deprecated. Use other parameters such as A valid sql fragment that will work with backend query for this api. |
[- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "externalId": "ID_LGEHJEZ",
- "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientName": "John Doe",
- "clientOfficeId": 10,
- "loanProductId": 4709,
- "loanProductName": "Mobile Loan",
- "loanProductDescription": "Mobile loan for repeat customers with max limit of 10,000",
- "loanOfficerId": 1,
- "loanOfficerName": "Lockman, Aron",
- "loanType": {
- "id": 1,
- "code": "accountType.individual",
- "value": "individual"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "principal": 5000,
- "approvedPrincipal": 5000,
- "proposedPrincipal": 5000,
- "termFrequency": 12,
- "termPeriodFrequencyType": {
- "id": 2,
- "code": "loanTermFrequency.periodFrequencyType.months",
- "value": "Months"
}, - "numberOfRepayments": 6,
- "repaymentEvery": 2,
- "repaymentFrequencyType": {
- "id": 2,
- "code": "loanTermFrequency.periodFrequencyType.months",
- "value": "Months"
}, - "interestRatePerPeriod": 2,
- "interestRateFrequencyType": {
- "id": 2,
- "code": "interestRateFrequency.periodFrequencyType.months",
- "value": "Months"
}, - "annualInterestRate": 24,
- "amortizationType": {
- "id": 1,
- "code": "amortizationType.equal.installments",
- "value": "Equal installments"
}, - "interestType": {
- "id": 0,
- "code": "interestType.declining.balance",
- "value": "Declining Balance"
}, - "interestCalculationPeriodType": {
- "id": 1,
- "code": "interestCalculationPeriodType.same.as.repayment.period",
- "value": "Same as repayment period"
}, - "allowPartialPeriodInterestCalcualtion": true,
- "transactionProcessingStrategyId": 1,
- "transactionProcessingStrategyName": "Penalties, Fees, Interest, Principal order",
- "expectedFirstRepaymentOnDate": [
- 2000,
- 1,
- 1
], - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "expectedDisbursementDate": [
- 2000,
- 1,
- 1
], - "expectedMaturityDate": [
- 2000,
- 1,
- 1
]
}, - "multiDisburseLoan": true,
- "canDefineInstallmentAmount": true,
- "canDisburse": true,
- "canUseForTopup": true,
- "isTopup": true,
- "stopApplyingPenalty": true,
- "closureLoanId": 132,
- "inArrears": true,
- "isNPA": true,
- "daysInMonthType": {
- "id": 1,
- "code": "DaysInMonthType.actual",
- "value": "Actual"
}, - "daysInYearType": {
- "id": 1,
- "code": "DaysInYearType.actual",
- "value": "Actual"
}, - "isInterestRecalculationEnabled": true,
- "recalculateInterestOnArrears": false,
- "createStandingInstructionAtDisbursement": true,
- "isVariableInstallmentsAllowed": true,
- "internalRateOfReturn": 2,
- "effectiveInterestRate": 2,
- "repayPrincipalEvery": 1,
- "repayInterestEvery": 1,
- "isInDuplum": true,
- "officeId": true,
- "officeName": "Head Office",
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
Create new Loan or use command=calculateLoanSchedule
to calculate a repayment schedule using loan terms.
loanType required | string Enum: "individual" "group" "jlg" This fields indicates the type of loan that is being applied for. Three types of loans are supported at present:
|
productId required | integer <integer64> The |
clientId | integer <integer64> The Mandatory when Impact on repayment schedule: If |
groupId | integer <integer64> The Mandatory when Impact on repayment schedule: If |
calendarId | integer <integer64> The Applicable only to JLG loans and where configuration is enabled for |
syncDisbursementWithMeeting | boolean A boolean indicating if disbursement date should be fall in with the groups meeting date. Applicable only to JLG loans and where configuration is enabled for |
principal required | number <decimal> The |
loanTermFrequency required | integer Used together with |
loanTermFrequencyType required | integer Enum: 0 1 2 3 Used together with Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
numberOfRepayments required | integer The |
repaymentEvery required | integer Used together with |
repaymentFrequencyType required | integer Enum: 0 1 2 3 Used together with Supported options are: 0=Days 1=Weeks 2=Months 3=Years When months option is selected two futher fields are relevant and can be optionally provided; |
repaymentFrequencyNthDayType | integer Enum: 1 2 3 4 -1 Used together with It supports frequencies like: First Monday (of the month). Only applicable when Supported options are: 1=First 2=Second 3=Third 4=Fourth |
repaymentFrequencyDayOfWeekType | integer Enum: 1 2 3 4 5 6 7 Used together with It supports frequencies like: First Monday (of the month). Only applicable when Supported options are: 1=Monday 2=Tuesday 3=Wednesday 4=Thursday 5=Friday 6=Saturday 7=Sunday |
interestType required | integer Enum: 0 1 Relates to the Dictates how the interest is calculated for the loan schedule. Supported options are: 0=Declining Balance 1=Flat Flat Interest loans charge equal interest amounts on each loan instalment, based on the original loan principal. Declining Balance loans calculate the interest amount on each instalment based upon the outstanding balance of the loan (the interest amount charged on each instalment reduces as the loan is repaid). |
interestCalculationPeriodType required | integer Default: 1 Enum: 0 1 Relates to the repayment schedule. Dictates how the interest is calculated for the loan schedule. Supported options are: 0=Daily 1=Same as repayment period Defaults to 1="Same as Repayment Period". This ensures that all loans of the same loan term have the same interest amount charged over the course of the loan. Selecting 0=Daily means that the interest amount charged on a loan product will vary slightly based on the number of days in the months over which the loan term runs. |
interestRatePerPeriod required | number <decimal> The interest rate per selected period type. Used with |
interestRateFrequencyType | integer Deprecated Enum: 2 3 Used together with Supported options are: 2=Months 3=Years If omitted, the loan inherits this property from its Loan Product. if provided, it overrides any property that is set in Loan Product. |
amortizationType required | integer Enum: 0 1 Relates to the the repayment schedule. Dictates how a declining balance loan is amortized over the loan schedule. Supported options are: 0=Equal Principal 1=Equal Installments Mandatory and only relevant if Selecting 0=Equal Principal ensures that the principal of the loan installment remains the same through the loan term (with the interest and installment size therefore declining). Selecting 1=Equal Installments ensures the principal is adjusted to ensure equal installment sizes. |
transactionProcessingStrategyId required | integer Enum: 1 5 6 An This relates to functionality that is also referred to elsewhere in documentation as Payment Application Logic. A number of out of the box approaches exist and custom approaches can be added if required. The key responsiblity of the strategy is to determines the order in which Interest, Principal, Penalties and Fees are paid off when repayments are made. Supported options are: 1=Standard (Penalties, Fees, Interest, Principal order) 5=Principal, Interest, Penalties, Fees Order 6=Interest, Principal, Penalties, Fees Order |
expectedDisbursementDate required | string The proposed disbursement date for the loan. Provided as a string and used together with |
submittedOnDate required | string The date on which the loan application was submitted for approval. Provided as a string and used together with |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
submittedOnNote | string <= 500 characters A note provided along with |
repaymentsStartingFromDate | string Related to When provided, the loan schedule is generated using this date as the first repayment date due date. see also loan product setting Provided as a string and used together with |
graceOnPrincipalPayment | integer Related to If populated, indicates the number of installments you wish your grace period on principal payments to be. e.g 1 means that the first installment of the loan schedule will have no principal due. |
graceOnInterestPayment | integer Related to If populated, indicates the number of installments you wish your grace period on interest payments to be. e.g 1 means that the first installment of the loan schedule will have no interest due. |
graceOnInterestCharged | integer Related to If populated, indicates the number of installments you wish there to be no interest charged / calculated for. e.g 1 means that interest will only begin being calculated based on the principal outstanding from installment two. |
fundId | integer <integer64> The id of associated fund source. The original source of your funds (for example a grant). |
loanOfficerId | integer <integer64> The id of associated staff member that is a loan officer. |
loanPurposeId | integer <integer64> The id of a code value that relates to the loan purpose code (see Code and Code Values). |
linkAccountId | integer <integer64> The Linked savings account will then be required to be associated with the selected client and also any product restriction setup on loan product. |
Array of objects (LoanChargeCreateNew) Ability to add multiple loan charges to the loan in one at time of creation. Applicable only when the loan product is configured to allow this. see | |
Array of objects (LoanCollateralCreateNew) Ability to add multiple loan collateral entries to the loan at time of creation. | |
accountNo | string <= 20 characters A unique account no. which identifies the account for this loan. If not provided on creation, it is automatically generated based on the Account Number Format setup. (see Account Number Format and Configuration) |
externalId | string <= 100 characters A place to put an external reference for this loan e.g. The ID another system uses for it. If provided, it must be unique. |
allowPartialPeriodInterestCalcualtion | boolean Default: false Only Applicable if |
createStandingInstructionAtDisbursement | boolean Default: false A boolean indicating if a standing instruction should be created on disbursement for the repayments. Applicable only when the loan product is configured to allow this. see |
interestChargedFromDate | string Deprecated The date from which interest is to be calculated from. Provided as a string and used together with When the loan is disbursed, there is an option on disbusrsement known as Global confiruation related to this field:
|
{- "loanType": "individual",
- "productId": 1,
- "clientId": 1,
- "groupId": 1,
- "calendarId": 1,
- "syncDisbursementWithMeeting": false,
- "principal": 1000.5,
- "loanTermFrequency": 1,
- "loanTermFrequencyType": 2,
- "numberOfRepayments": 1,
- "repaymentEvery": 1,
- "repaymentFrequencyType": 2,
- "repaymentFrequencyNthDayType": 1,
- "repaymentFrequencyDayOfWeekType": 1,
- "interestType": 0,
- "interestCalculationPeriodType": 1,
- "interestRatePerPeriod": 10.5,
- "interestRateFrequencyType": 2,
- "amortizationType": 1,
- "transactionProcessingStrategyId": 1,
- "expectedDisbursementDate": "16-11-2020",
- "submittedOnDate": "16-11-2020",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "submittedOnNote": "Loan application completed and submitted for approval by manager.",
- "repaymentsStartingFromDate": "16-11-2020",
- "graceOnPrincipalPayment": 1,
- "graceOnInterestPayment": 1,
- "graceOnInterestCharged": 0,
- "fundId": 1,
- "loanOfficerId": 1,
- "loanPurposeId": 1,
- "linkAccountId": 1,
- "charges": [
- {
- "chargeId": 1,
- "amount": 5.5,
- "chargeTimeType": 2,
- "chargeCalculationType": 2,
- "dueDate": "16-11-2020"
}
], - "collateral": [
- {
- "id": 1,
- "value": 5.5,
- "type": 1,
- "description": "A short description of collateral entry."
}
], - "accountNo": "0001-0001",
- "externalId": "ABC-0001",
- "allowPartialPeriodInterestCalcualtion": false,
- "createStandingInstructionAtDisbursement": false,
- "interestChargedFromDate": "16-11-2020"
}
{- "resourceId": 12
}
Search for loans by state
The response returned is dynamic and based upon loans metadata (See Loan Metadata ) and responseParameters
provided in the API request.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided or if higher than 200 limit will be 200 |
stateName required | string Used to find loans that match this state name exactly. The state name should match one of the states defined in the state machine. |
officeId | integer Used in addition to |
loanOfficerId | integer Used in addition to |
required | Array of objects (DataFilterResponseParameter) Specifies which fields the search should return. |
Array of objects (DataFilterSortByParameter) Specifies how the search results should be sorted. |
{- "stateName": "SUBMITTED_AND_PENDING_APPROVAL",
- "officeId": 24,
- "loanOfficerId": 24,
- "responseParameters": [
- {
- "ordinal": 0,
- "name": "accountNo"
}
], - "sortByParameters": [
- {
- "ordinal": 0,
- "name": "accountNo",
- "direction": "ASC"
}
]
}
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Find a Loan by Id
id required | integer <int64> Example: 1 The unique identifer of a Loan. |
staffInSelectedOfficeOnly | boolean Default: false loan officers of the loan office. |
transactionLimit | integer <int32> Example: transactionLimit=10 number of loan transactions to be returned |
associations | string Enum: "all" "repaymentSchedule" "futureSchedule" "originalSchedule" "transactions" "charges" "guarantors" "collateral" "notes" "linkedAccount" "multiDisburseDetails" "creditChecks" "loanHistoryOfficer" "prepayLoan" "standingInstructions" "meeting" "groupMemberAllocation" Example: associations=all associated entity to be return |
[- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "externalId": "ID_LGEHJEZ",
- "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "clientId": 4709,
- "clientAccountNo": "0001-0000-0001",
- "clientName": "John Doe",
- "clientOfficeId": 10,
- "loanProductId": 4709,
- "loanProductName": "Mobile Loan",
- "loanProductDescription": "Mobile loan for repeat customers with max limit of 10,000",
- "loanOfficerId": 1,
- "loanOfficerName": "Lockman, Aron",
- "loanType": {
- "id": 1,
- "code": "accountType.individual",
- "value": "individual"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "principal": 5000,
- "approvedPrincipal": 5000,
- "proposedPrincipal": 5000,
- "termFrequency": 12,
- "termPeriodFrequencyType": {
- "id": 2,
- "code": "loanTermFrequency.periodFrequencyType.months",
- "value": "Months"
}, - "numberOfRepayments": 6,
- "repaymentEvery": 2,
- "repaymentFrequencyType": {
- "id": 2,
- "code": "loanTermFrequency.periodFrequencyType.months",
- "value": "Months"
}, - "interestRatePerPeriod": 2,
- "interestRateFrequencyType": {
- "id": 2,
- "code": "interestRateFrequency.periodFrequencyType.months",
- "value": "Months"
}, - "annualInterestRate": 24,
- "amortizationType": {
- "id": 1,
- "code": "amortizationType.equal.installments",
- "value": "Equal installments"
}, - "interestType": {
- "id": 0,
- "code": "interestType.declining.balance",
- "value": "Declining Balance"
}, - "interestCalculationPeriodType": {
- "id": 1,
- "code": "interestCalculationPeriodType.same.as.repayment.period",
- "value": "Same as repayment period"
}, - "allowPartialPeriodInterestCalcualtion": true,
- "transactionProcessingStrategyId": 1,
- "transactionProcessingStrategyName": "Penalties, Fees, Interest, Principal order",
- "expectedFirstRepaymentOnDate": [
- 2000,
- 1,
- 1
], - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "expectedDisbursementDate": [
- 2000,
- 1,
- 1
], - "expectedMaturityDate": [
- 2000,
- 1,
- 1
]
}, - "multiDisburseLoan": true,
- "canDefineInstallmentAmount": true,
- "canDisburse": true,
- "canUseForTopup": true,
- "isTopup": true,
- "stopApplyingPenalty": true,
- "closureLoanId": 132,
- "inArrears": true,
- "isNPA": true,
- "daysInMonthType": {
- "id": 1,
- "code": "DaysInMonthType.actual",
- "value": "Actual"
}, - "daysInYearType": {
- "id": 1,
- "code": "DaysInYearType.actual",
- "value": "Actual"
}, - "isInterestRecalculationEnabled": true,
- "recalculateInterestOnArrears": false,
- "createStandingInstructionAtDisbursement": true,
- "isVariableInstallmentsAllowed": true,
- "internalRateOfReturn": 2,
- "effectiveInterestRate": 2,
- "repayPrincipalEvery": 1,
- "repayInterestEvery": 1,
- "isInDuplum": true,
- "officeId": true,
- "officeName": "Head Office",
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
Execute a command on a loan, such as approve, reject, disburse, etc.
id required | integer <int64> Example: 1 The unique identifer of a Loan. |
command required | string Enum: "reject" "undoreject" "withdrawnByApplicant" "undowithdraw" "approve" "undoapprove" "disburse" "disburseToSavings" "undodisbursal" Example: command=approve The name of the command being performed on the loan. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
withdrawnOnDate required | string The date on which the loan application was withdrawn. Provided as a string and used together with |
note | string <= 1000 characters An optional comment or note in relation to this command. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "withdrawnOnDate": "16-11-2020",
- "note": "A short note in relation to this."
}
{- "resourceId": 12
}
Allows user with permission to update the fund source of the loan so long as loan is not closed.
id required | integer <int64> Example: 1 The unique identifer of a Loan. |
command required | string Example: command=updateFundSource command used when updating the fund source of a loan |
fundId required | integer <int64> The |
{- "fundId": 1
}
{- "resourceId": 1,
- "changes": { }
}
Set of commands that creates or alters a loan transaction which in turn can alter the state of a loan, e.g. make repayment, loan write off, interest waiver, loan prepayment, recovery payment
id required | integer <int64> Example: 1 The unique identifer of a Loan. |
command required | string Enum: "repayment" "waiveinterest" "writeoff" "undowriteoff" "prepayLoan" "recoverypayment" "refundoverpayment" Example: command=repayment The name of the command being performed on the loan transaction. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
transactionDate required | string The date on which the repayment was made. Provided as a string and used together with |
transactionAmount required | number <decimal> The amount of money repaid. |
note | string <= 1000 characters An optional comment or note in relation to this command. |
paymentTypeId | integer <integer64> The |
accountNumber | string <= 50 characters An account number related to payment |
checkNumber | string <= 50 characters The check number related to payment |
routingCode | string <= 50 characters The routing code related to payment |
receiptNumber | string <= 50 characters The receipt number related to payment |
bankNumber | string <= 50 characters The bank number related to payment |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "transactionDate": "14 May 2013",
- "transactionAmount": 5.5,
- "note": "A short note in relation to this.",
- "paymentTypeId": 1,
- "accountNumber": "ACC000001",
- "checkNumber": "CHK000001",
- "routingCode": "RO-ABC001",
- "receiptNumber": "RPT-ABC-001",
- "bankNumber": "CB001"
}
{- "officeId": 1,
- "clientId": 1,
- "loanId": 1,
- "resourceId": 12,
- "changes": { }
}
Savings accounts support features that allow the accounts to be used as typical savings accounts or as every day accounts like current/checking accounts:
Supports creation of new product offerings related to savings.
locale required | string The locale to use when interpreting number and date fields in the request. |
name required | string [ 1 .. 100 ] characters The full name of the product. |
shortName required | string = 4 characters The short name of the product. An abbreviated version of the name, used in reports or menus where space is limited. |
description required | string <= 500 characters A description to provide users with more information about the product. |
currencyCode required | string <= 3 characters A three character identifer of currency. The currency of the product. |
digitsAfterDecimal required | integer Relates to the the currency of the product. The number of digits after decimal to be supported on the currency. |
inMultiplesOf | integer Relates to the the currency of the product. Relevant for currencies where |
productGroupId | integer <integer64> The id of associated product group. |
nominalAnnualInterestRate required | number <decimal> Simple way of describing the interest rate as a nominal APR to use for interest calculation e.g. 5% Per annum If not suitable for product it can be set to zero and |
Array of objects (SavingsInterestRateChartWithNoSlabs) | |
interestPostingPeriodType required | integer Enum: 4 5 6 7 Part of interest calculation settings. Indicates how often interest is to be posted to the account. Supported options are: 4=Monthly 5=Quarterly 6=Bi-Annualy 7=Annual |
interestCompoundingPeriodType required | integer Enum: 4 5 6 7 Part of interest calculation settings. Indicates how often interest is to be compounded. Supported options are: 1=Daily 4=Monthly 5=Quarterly 6=Bi-Annualy 7=Annual |
interestCalculationType required | integer Enum: 1 2 Part of interest calculation settings. There are two methods to calculate the interest on a savings account: 1=Daily Balance 2=Average Balance |
interestCalculationDaysInYearType required | integer Enum: 360 365 Part of interest calculation settings. Supported options are: 1=360 2=365 |
minBalanceForInterestCalculation | number <decimal> Part of interest calculation settings. The mimimum balance of the savings account for interest calculation to be permitted. |
withHoldTax | boolean Default: false A boolean that indicates if withholding tax is configured. if The withholding tax is shown as an additional transaction on the account. |
taxGroupId | integer <integer64> The id of associated tax group. Required if |
lockinPeriodEnabled | boolean Default: true A boolean that indicates if lockin period feature is to be used by this product and accounts of this product. if if |
lockinPeriodFrequency | integer If provided, used along with |
lockinPeriodFrequencyType | integer Enum: 0 1 2 3 If provided, used along with Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
minRequiredOpeningBalance | number <decimal> Related to account activation. Specifies the mimimum balance that savings accounts of this product must have upon activation. When the account is activated, it will auto create a deposit transaction for the |
enforceMinRequiredBalance | boolean Default: false Indicates that Used together with if enabled, then attempts to withdraw amounts that result in the account balance falling below |
minRequiredBalance | number <decimal> Mandatory if Specifies the mimimum balance that savings accounts of this product must have whilst active. if |
allowOverdraft | boolean Default: false Indicates if an overdraft facility is be allowed on savings accounts of this product. |
overdraftLimit | number <decimal> Mandatory if Specifies the amount of overdraft that savings accounts of this product can have must be between minOverdraftLimit and maxOverdraftLimit. |
minOverdraftLimit | number <decimal> Mandatory if Specifies the minimum amount of overdraft that savings accounts of this product can have. |
maxOverdraftLimit | number <decimal> Mandatory if Specifies the maximum amount of overdraft that savings accounts of this product can have. |
nominalAnnualInterestRateOverdraft | number <decimal> Interest rate as a nominal APR to use for interest calculation when account is in overdraft e.g. 20% Per annum must be between min and max nominalAnnualInterestRateOverdraft |
minNominalAnnualInterestRateOverdraft | number <decimal> Minimum Interest rate as a nominal APR to use for interest calculation when account is in overdraft e.g. 20% Per annum |
maxNominalAnnualInterestRateOverdraft | number <decimal> Maximum Interest rate as a nominal APR to use for interest calculation when account is in overdraft e.g. 20% Per annum |
minOverdraftForInterestCalculation | number <decimal> Applicable if If provided, indicates how much into an overdraft before interest is calculated against the overdraft. |
isDormancyTrackingActive | boolean Default: false Indicates if accounts of this product should support movement to dormant status by end of day scheduled jobs. |
daysToInactive | number <integer> Mandatory if If provided, indicates how many days before the account should be considered inactive. |
daysToDormancy | number <integer> Mandatory if If provided, indicates how many days before the account should be considered dormant. |
daysToEscheat | number <integer> Mandatory if If provided, indicates how many days before the account should be considered escheat. |
calculateInterestDuringDormancy | boolean Default: false Mandatory if Indicates if interest should be calculated for accounts that are marked as dormant. |
stopInterestIfDormant | boolean Deprecated Default: false Duplicate of Applicable if Indicates if interest should be calculated for accounts that are marked as dormant. |
enableWithdrawalNotice | boolean Default: false Indicates if notice is required for withdrawals. |
noticePeriod | number <integer> Mandatory if If provided, indicates how many days notice required prior to withdrawal. |
validationPeriod | number <integer> Mandatory if If provided, indicates how many days ???. |
withdrawalFeeForTransfers | boolean Deprecated Default: false Indicates if fee applied for withdrawals. |
feeAmount | number <decimal> Deprecated Used as an annual fee. |
monthDayFormat | string Deprecated Joda time compatile date format for day-month used by |
feeOnMonthDay | string Deprecated describe day and month of annual fee |
charges | Array of arrays The set of charge definitions applicable to this product. |
minimumNegativeBalance | number <decimal> Must be less than zero. TBC |
maximumPositiveBalance | number <decimal> Must be greater than zero. TBC |
accountingRule required | integer Enum: 1 2 Indicates what type of accounting is enabled for this product. Supported options are: 1=None 2=Cash Based Accounting |
savingsControlAccountId | integer <integer64> The |
savingsReferenceAccountId | integer <integer64> The |
transfersInSuspenseAccountId | integer <integer64> The |
interestOnSavingsAccountId | integer <integer64> The |
incomeFromFeeAccountId | integer <integer64> The |
incomeFromPenaltyAccountId | integer <integer64> The |
overdraftPortfolioControlId | integer <integer64> The |
incomeFromInterestId | integer <integer64> The |
writeOffAccountId | integer <integer64> The |
escheatLiabilityId | integer <integer64> The |
incomeFromSmallPositiveBalanceId | integer <integer64> The |
expenseFromSmallNegativeBalanceId | integer <integer64> The |
Array of objects | |
Array of objects | |
Array of objects |
{- "locale": "en",
- "name": "6 month Deposit",
- "shortName": "FT01",
- "description": "6 month fixed deposit with monthly compounding",
- "currencyCode": "KES",
- "digitsAfterDecimal": 0,
- "inMultiplesOf": 1,
- "productGroupId": 1,
- "nominalAnnualInterestRate": 12.5,
- "interestRateCharts": [
- {
- "locale": "en",
- "dateFormat": "yyyy-MM-dd",
- "name": "Deposit Account Chart",
- "description": "multi-band interest rate chart",
- "fromDate": "2022-01-01",
- "endDate": "2022-12-31",
- "annualInterestRate": 9.75
}
], - "interestPostingPeriodType": 4,
- "interestCompoundingPeriodType": 4,
- "interestCalculationType": 1,
- "interestCalculationDaysInYearType": 1,
- "minBalanceForInterestCalculation": 1,
- "withHoldTax": false,
- "taxGroupId": 1,
- "lockinPeriodEnabled": true,
- "lockinPeriodFrequency": 2,
- "lockinPeriodFrequencyType": 2,
- "minRequiredOpeningBalance": 500.5,
- "enforceMinRequiredBalance": false,
- "minRequiredBalance": 500.5,
- "allowOverdraft": false,
- "overdraftLimit": 1000,
- "minOverdraftLimit": 1000,
- "maxOverdraftLimit": 1000,
- "nominalAnnualInterestRateOverdraft": 20,
- "minNominalAnnualInterestRateOverdraft": 20,
- "maxNominalAnnualInterestRateOverdraft": 20,
- "minOverdraftForInterestCalculation": 10,
- "isDormancyTrackingActive": false,
- "daysToInactive": 90,
- "daysToDormancy": 120,
- "daysToEscheat": 120,
- "calculateInterestDuringDormancy": false,
- "stopInterestIfDormant": false,
- "enableWithdrawalNotice": false,
- "noticePeriod": 1,
- "validationPeriod": 1,
- "withdrawalFeeForTransfers": false,
- "feeAmount": 10,
- "monthDayFormat": "dd-MM",
- "feeOnMonthDay": "01-04",
- "charges": [ ],
- "minimumNegativeBalance": -3.5,
- "maximumPositiveBalance": 2.2,
- "accountingRule": 2,
- "savingsControlAccountId": 0,
- "savingsReferenceAccountId": 0,
- "transfersInSuspenseAccountId": 0,
- "interestOnSavingsAccountId": 0,
- "incomeFromFeeAccountId": 0,
- "incomeFromPenaltyAccountId": 0,
- "overdraftPortfolioControlId": 0,
- "incomeFromInterestId": 0,
- "writeOffAccountId": 0,
- "escheatLiabilityId": 0,
- "incomeFromSmallPositiveBalanceId": 0,
- "expenseFromSmallNegativeBalanceId": 0,
- "paymentChannelToFundSourceMappings": [
- {
- "paymentTypeId": 0,
- "fundSourceAccountId": 0
}
], - "feeToIncomeAccountMappings": [
- {
- "chargeId": 0,
- "incomeAccountId": 0
}
], - "penaltyToIncomeAccountMappings": [
- {
- "chargeId": 0,
- "incomeAccountId": 0
}
]
}
{- "resourceId": 12
}
Activates closed savings product
id required | integer <int64> Example: 1 The unique identifer of a Savings Product. |
command required | string Example: command=activate The activate command. |
{ }
{- "resourceId": 12,
- "changes": {
- "status": {
- "id": 300,
- "code": "savingsProductStatus.active",
- "value": "Active",
- "active": true,
- "closed": false
}
}
}
Close an active savings product
id required | integer <int64> Example: 1 The unique identifer of a Savings Product. |
command required | string Example: command=close The close command. |
{ }
{- "resourceId": 12,
- "changes": {
- "status": {
- "id": 600,
- "code": "savingsProductStatus.closed",
- "value": "Closed",
- "active": false,
- "closed": true
}
}
}
Used to create a new Savings Account
Savings Accounts can be associated with a client
or group
but not both. The model is the same for client and group except for the clientId
and groupId
fields.
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
clientId required | integer <integer64> The |
productId required | integer <integer64> The |
submittedOnDate required | string <date> The date that the account application was submited. |
fieldOfficerId | integer <integer64> The id of associated staff member that is a field officer. |
externalId | string <= 100 characters A place to put an external reference for this account e.g. The ID another system uses for it. If provided, it must be unique. |
nominalAnnualInterestRate | integer <number> |
interestCompoundingPeriodType | integer |
interestPostingPeriodType | integer |
interestCalculationType | integer |
interestCalculationDaysInYearType | integer <number> |
minRequiredOpeningBalance | number <decimal> |
lockinPeriodFrequency | integer If provided, overrides the same named setting from savings product.
If the savings product |
lockinPeriodFrequencyType | integer If provided, overrides the same named setting from savings product.
If the savings product |
charges | Array of arrays |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "clientId": 1,
- "productId": 1,
- "submittedOnDate": "2022-12-01",
- "fieldOfficerId": 1,
- "externalId": "ABC-0001",
- "nominalAnnualInterestRate": 2,
- "interestCompoundingPeriodType": 1,
- "interestPostingPeriodType": 4,
- "interestCalculationType": 1,
- "interestCalculationDaysInYearType": 360,
- "minRequiredOpeningBalance": 1000,
- "lockinPeriodFrequency": 2,
- "lockinPeriodFrequencyType": 2,
- "charges": [
- {
- "chargeId": "13",
- "amount": "1"
}
]
}
{- "resourceId": 12
}
List Savings Accounts
See The Data Filter API for better approach for search/filter.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
search | string Example: search=John Doe 'Searches (matching around) across:
|
officeId | integer The id of an office. Used to restrict to set of savings associated with the office. |
externalId | string Example: externalId=S00001 if provided only savings with this exact externalId will be returned |
staffId | integer id of a staff/savingsofficer, if provided will only return the savings linked to this staff id |
groupId | integer id of a group the savings belongs to, if provided will only return the savings linked to this group id |
underHierarchy | string Example: underHierarchy=.2.3 if provided only savings that exist under the hierarchy provided will be return (office + child offices) |
orderBy | string Enum: "id" "submittedon_date" "office_id" "account_no" The database field name that you wish to order the list of savings by. |
sortOrder | string Enum: "ASC" "DESC" Used with |
skipRowCount | boolean Default: false Example: skipRowCount=false if true, does not return rowcount, improving search speed. |
modifiedSinceTimestamp | integer Example: modifiedSinceTimestamp=1634152729 Should be passed as a UNIX Timestamp. When provided only savings accounts that have been created or updated since the provided timestamp are returned. Savings accounts will be marked as modified whenever there is any modification to the savings account, its transactions, charges etc. This parameter can be used in integrations to fetch changed data since a last fetch, timestamps will be treated as UTC and returned as UTC. |
sqlSearch | string Deprecated Deprecated. Use other parameters such as A valid sql fragment that will work with backend query for this api. |
[- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "depositType": {
- "id": 100,
- "code": "depositAccountType.savingsDeposit",
- "value": "Savings"
}, - "externalId": "ID_LGEHJEZ",
- "clientId": 4709,
- "clientName": "John Doe",
- "savingsProductId": 4709,
- "savingsProductName": "Mobile Loan",
- "fieldOfficerId": 1,
- "fieldOfficerName": "Lockman, Aron",
- "status": {
- "id": 100,
- "code": "savingsAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "submittedAndPendingApproval": true,
- "approved": true,
- "rejected": true,
- "withdrawnByApplicant": true,
- "active": true,
- "closed": true,
- "prematureClosed": true,
- "transferInProgress": true,
- "transferOnHold": true,
- "matured": true
}, - "subStatus": {
- "id": 0,
- "code": "SavingsAccountSubStatusEnum.none",
- "value": "Submitted and pending approval",
- "none": true,
- "inactive": false,
- "dormant": false,
- "escheat": false,
- "writeoff": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "approvedOnDate": [
- 2000,
- 1,
- 1
], - "approvedByUsername": "musoni",
- "approvedByFirstname": "musoni",
- "approvedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni",
- "closedOnDate": [
- 2000,
- 1,
- 1
], - "closedByUsername": "musoni",
- "closedByFirstname": "musoni",
- "closedByLastname": "musoni"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "nominalAnnualInterestRate": 15,
- "interestCompoundingPeriodType": {
- "id": 4,
- "code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
- "value": "Monthly"
}, - "interestPostingPeriodType": {
- "id": 4,
- "code": "savingsPostingInterestPeriodType.monthly",
- "value": "monthly"
}, - "interestCalculationType": {
- "id": 1,
- "code": "savingsInterestCalculationType.dailybalance",
- "value": "DailyBalance"
}, - "interestCalculationDaysInYearType": {
- "id": 365,
- "code": "savingsInterestCalculationDaysInYearType.days365",
- "value": "DailyBalance"
}, - "withdrawalFeeForTransfers": false,
- "allowOverdraft": false,
- "overdraftLimit": 100,
- "enforceMinRequiredBalance": false,
- "minBalanceForInterestCalculation": 100,
- "withHoldTax": false,
- "lastActivityDate": [
- 2000,
- 7,
- 30
], - "isDormancyTrackingActive": false,
- "summary": {
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "totalDeposits": 5000,
- "totalWithdrawals": 10448,
- "totalInterestEarned": 753,
- "totalInterestPosted": 753,
- "accountBalance": 0,
- "totalOverdraftInterestDerived": 0,
- "interestNotPosted": 0,
- "lastInterestCalculationDate": [
- 2000,
- 7,
- 30
]
}, - "transactions": [
- {
- "id": 80246,
- "transactionType": {
- "id": 24,
- "code": "savingsAccountTransactionType.smallPositiveBalance",
- "value": "Small Positive Balance"
}, - "accountId": 11,
- "accountNo": 11,
- "date": [
- 2000,
- 7,
- 30
], - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "paymentDetailData": {
- "id": 1080246,
- "accountNumber": "",
- "checkNumber": "",
- "routingCode": "",
- "receiptNumber": "",
- "bankNumber": ""
}, - "amount": 5000,
- "runningBalance": 5000,
- "reversed": false,
- "submittedOnDate": [
- 2000,
- 7,
- 30
], - "interestedPostedAsOn": false,
- "manuallyReversed": false,
- "isAccountTransfer": false,
- "cashierData": {
- "id": 1,
- "description": "Description of cashier-teller setup",
- "tellerId": 1,
- "tellerName": "Jane Doe",
- "officeId": 1,
- "officeName": "Office X",
- "staffId": 1,
- "staffName": "Jack Doe",
- "startDate": [
- 2000,
- 7,
- 30
], - "endDate": [
- 2001,
- 7,
- 30
], - "startTime": "13:00",
- "endTime": "18:00",
- "startedAt": "2023-07-04 20:28:19",
- "endedAt": "2023-07-06 10:28:00",
- "isActive": true,
- "isFullDay": true
}
}
], - "savingsOfficerAssignmentHistory": {
- "firstName": "Jhon",
- "lastName": "Doe",
- "startDate": [
- 2000,
- 7,
- 30
], - "id": 322
}, - "linkedLoanAccounts": {
- "id": 9490,
- "accountNo": "0001-0000-0001",
- "productName": "Mobile Loan",
- "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "balance": 0
}, - "calculateInterestDuringDormancy": false,
- "maximumWithdrawableAmount": 100,
- "officeId": 1,
- "officeName": "Head Office",
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
Find a savings account by Id
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
staffInSelectedOfficeOnly | boolean Default: false loan officers of the office where the savingsaccount is registered. |
chargeStatus | string Default: "all" Enum: "all" "active" "inactive" Example: chargeStatus=all filter savings to be return by account status |
associations | string Enum: "all" "withdrawalNotices" "charges" "linkedAccounts" "transactions" "standingInstructions" "loanhistoryofficer" Example: associations=all associated entity to be return |
[- {
- "id": 4709,
- "accountNo": "0001-0000-0001",
- "depositType": {
- "id": 100,
- "code": "depositAccountType.savingsDeposit",
- "value": "Savings"
}, - "externalId": "ID_LGEHJEZ",
- "clientId": 4709,
- "clientName": "John Doe",
- "savingsProductId": 4709,
- "savingsProductName": "Mobile Loan",
- "fieldOfficerId": 1,
- "fieldOfficerName": "Lockman, Aron",
- "status": {
- "id": 100,
- "code": "savingsAccountStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "submittedAndPendingApproval": true,
- "approved": true,
- "rejected": true,
- "withdrawnByApplicant": true,
- "active": true,
- "closed": true,
- "prematureClosed": true,
- "transferInProgress": true,
- "transferOnHold": true,
- "matured": true
}, - "subStatus": {
- "id": 0,
- "code": "SavingsAccountSubStatusEnum.none",
- "value": "Submitted and pending approval",
- "none": true,
- "inactive": false,
- "dormant": false,
- "escheat": false,
- "writeoff": false
}, - "timeline": {
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "submittedByUsername": "musoni",
- "submittedByFirstname": "musoni",
- "submittedByLastname": "musoni",
- "approvedOnDate": [
- 2000,
- 1,
- 1
], - "approvedByUsername": "musoni",
- "approvedByFirstname": "musoni",
- "approvedByLastname": "musoni",
- "activatedOnDate": [
- 2000,
- 1,
- 1
], - "activatedByUsername": "musoni",
- "activatedByFirstname": "musoni",
- "activatedByLastname": "musoni",
- "closedOnDate": [
- 2000,
- 1,
- 1
], - "closedByUsername": "musoni",
- "closedByFirstname": "musoni",
- "closedByLastname": "musoni"
}, - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "nominalAnnualInterestRate": 15,
- "interestCompoundingPeriodType": {
- "id": 4,
- "code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
- "value": "Monthly"
}, - "interestPostingPeriodType": {
- "id": 4,
- "code": "savingsPostingInterestPeriodType.monthly",
- "value": "monthly"
}, - "interestCalculationType": {
- "id": 1,
- "code": "savingsInterestCalculationType.dailybalance",
- "value": "DailyBalance"
}, - "interestCalculationDaysInYearType": {
- "id": 365,
- "code": "savingsInterestCalculationDaysInYearType.days365",
- "value": "DailyBalance"
}, - "withdrawalFeeForTransfers": false,
- "allowOverdraft": false,
- "overdraftLimit": 100,
- "enforceMinRequiredBalance": false,
- "minBalanceForInterestCalculation": 100,
- "withHoldTax": false,
- "lastActivityDate": [
- 2000,
- 7,
- 30
], - "isDormancyTrackingActive": false,
- "summary": {
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "totalDeposits": 5000,
- "totalWithdrawals": 10448,
- "totalInterestEarned": 753,
- "totalInterestPosted": 753,
- "accountBalance": 0,
- "totalOverdraftInterestDerived": 0,
- "interestNotPosted": 0,
- "lastInterestCalculationDate": [
- 2000,
- 7,
- 30
]
}, - "transactions": [
- {
- "id": 80246,
- "transactionType": {
- "id": 24,
- "code": "savingsAccountTransactionType.smallPositiveBalance",
- "value": "Small Positive Balance"
}, - "accountId": 11,
- "accountNo": 11,
- "date": [
- 2000,
- 7,
- 30
], - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "paymentDetailData": {
- "id": 1080246,
- "accountNumber": "",
- "checkNumber": "",
- "routingCode": "",
- "receiptNumber": "",
- "bankNumber": ""
}, - "amount": 5000,
- "runningBalance": 5000,
- "reversed": false,
- "submittedOnDate": [
- 2000,
- 7,
- 30
], - "interestedPostedAsOn": false,
- "manuallyReversed": false,
- "isAccountTransfer": false,
- "cashierData": {
- "id": 1,
- "description": "Description of cashier-teller setup",
- "tellerId": 1,
- "tellerName": "Jane Doe",
- "officeId": 1,
- "officeName": "Office X",
- "staffId": 1,
- "staffName": "Jack Doe",
- "startDate": [
- 2000,
- 7,
- 30
], - "endDate": [
- 2001,
- 7,
- 30
], - "startTime": "13:00",
- "endTime": "18:00",
- "startedAt": "2023-07-04 20:28:19",
- "endedAt": "2023-07-06 10:28:00",
- "isActive": true,
- "isFullDay": true
}
}
], - "savingsOfficerAssignmentHistory": {
- "firstName": "Jhon",
- "lastName": "Doe",
- "startDate": [
- 2000,
- 7,
- 30
], - "id": 322
}, - "linkedLoanAccounts": {
- "id": 9490,
- "accountNo": "0001-0000-0001",
- "productName": "Mobile Loan",
- "status": {
- "id": 100,
- "code": "loanStatusType.submitted.and.pending.approval",
- "value": "Submitted and pending approval",
- "pendingApproval": true,
- "waitingForDisbursal": true,
- "active": true,
- "restructured": true,
- "closedObligationsMet": true,
- "closedWrittenOff": true,
- "closedRescheduled": true,
- "closed": true,
- "overpaid": true
}, - "balance": 0
}, - "calculateInterestDuringDormancy": false,
- "maximumWithdrawableAmount": 100,
- "officeId": 1,
- "officeName": "Head Office",
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
Used to enable or disable deposit lock on a savings account
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
depositLock | boolean Enable (true) or disable (false) deposit lock setting |
{- "depositLock": true
}
{- "resourceId": 12
}
Used to enable or disable withdrawal lock on a savings account
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
depositLock | boolean Enable (true) or disable (false) withdrawal lock setting |
{- "depositLock": false
}
{- "resourceId": 12
}
List all Savings account Locks by savings account id
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
[- {
- "id": 1,
- "onHoldAmount": 200,
- "startDate": [
- "2022-01-20"
], - "endDate": [
- "2024-01-20"
], - "release": false,
- "note": "A short note in relation to this.",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
]
Used to add a new lock to the savings account.
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
note | string <= 1000 characters An optional comment or note in relation to this command. |
onHoldAmount | number <decimal> Amount to hold on the savings account to prevent withdrawal |
startDate | string <date> The date the lock on the savings account is effective from (inclusive) |
endDate | string <date> The date when the lock on the savings account will be released optional (inclusive) |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "note": "A short note in relation to this.",
- "onHoldAmount": 200,
- "startDate": "2022-01-20",
- "endDate": "2024-01-20"
}
{- "resourceId": 12
}
Used to get a Savings Account Lock
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
lockId required | integer <int64> Example: 1 The unique identifer of a lock. |
{- "id": 1,
- "onHoldAmount": 200,
- "startDate": [
- "2022-01-20"
], - "endDate": [
- "2024-01-20"
], - "release": false,
- "note": "A short note in relation to this.",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
Used to update existing lock
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
lockId required | integer <int64> Example: 1 The unique identifer of a lock. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
onHoldAmount | number <decimal> Amount to hold on the savings account to prevent withdrawal |
startDate | string <date> The date the lock on the savings account is effective from (inclusive) |
endDate | string <date> The date when the lock on the savings account will be released optional (inclusive) |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "onHoldAmount": 200,
- "startDate": "2022-01-20",
- "endDate": "2024-01-20"
}
{- "resourceId": 12
}
Used to release lock on a savings account
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
lockId required | integer <int64> Example: 1 The unique identifer of a lock. |
{- "resourceId": 12
}
Used to delete a lock on a savings account.
accountId required | integer <int64> Example: 1 The unique identifer of a Savings Account. |
lockId required | integer <int64> Example: 1 The unique identifer of a lock. |
{- "resourceId": 12
}
Fixed Term Deposit are specialised savings accounts and support the following features:
The supported schema for creating a new fixed term deposit product.
locale required | string The locale to use when interpreting number and date fields in the request. |
name required | string [ 1 .. 100 ] characters The full name of the product. |
shortName required | string = 4 characters The short name of the product. An abbreviated version of the name, used in reports or menus where space is limited. |
description required | string <= 500 characters A description to provide users with more information about the product. |
currencyCode required | string <= 3 characters Relates to the the currency of the product. A three character identifer of currency this product uses. |
digitsAfterDecimal required | integer Relates to the the currency of the product. The number of digits after decimal to be supported on the currency. |
inMultiplesOf | integer Relates to the the currency of the product. Relevant for currencies where digitsAfterDecimal is zero. This will round the monetary amount to the nearest multiple. |
productGroupId | integer <integer64> The id of associated product group. |
minDepositAmount | number <decimal> The minimum size of any deposit under this product. See also |
maxDepositAmount | number <decimal> The maximum size of any deposit under this product. See also |
depositAmount required | number <decimal> Is the default amount that can be shown to users by when creating a new account using this product. Its value must be within the range defined by |
minDepositTerm required | number <integer> Used together with |
minDepositTermTypeId | integer Enum: 0 1 2 3 The type of term period being described. e.g 6 months Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
maxDepositTerm | number <integer> Used together with |
maxDepositTermTypeId | integer Enum: 0 1 2 3 The type of term period being described. e.g 6 months Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
inMultiplesOfDepositTerm | number <integer> Used together with |
inMultiplesOfDepositTermTypeId | integer Enum: 0 1 2 3 The type of term period being described. e.g 2 months Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
interestPostingPeriodType required | integer Enum: 4 5 6 7 Part of interest calculation settings. Indicates how often interest is to be posted to the account. Supported options are: 4=Monthly 5=Quarterly 6=Bi-Annualy 7=Annual |
interestCompoundingPeriodType required | integer Enum: 4 5 6 7 Part of interest calculation settings. Indicates how often interest is to be compounded. Supported options are: 1=Daily 4=Monthly 5=Quarterly 6=Bi-Annualy 7=Annual |
interestCalculationType required | integer Enum: 1 2 Part of interest calculation settings. There are two methods to calculate the interest on a savings account: 1=Daily Balance 2=Average Balance |
interestCalculationDaysInYearType required | integer Enum: 360 365 Part of interest calculation settings. Supported options are: 1=360 2=365 |
lockinPeriodEnabled | boolean Default: true A boolean that indicates if lockin period feature is to be used by this product and accounts of this product. if if |
lockinPeriodFrequency | integer If provided, used along with |
lockinPeriodFrequencyType | integer Enum: 0 1 2 3 If provided, used along with Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
Array of objects (SavingsInterestRateChart) | |
withHoldTax | boolean Default: false A boolean that indicates if withholding tax is configured. if The withholding tax is shown as an additional transaction on the account. |
taxGroupId | integer <integer64> The id of associated tax group. Required if |
autoRenewOnClosure | boolean Default: false A boolean that indicates if accounts of this product should be renewed upon reaching maturity. Fixed Term Deposit accounts are moved are checked by end of day process that is scheduled to run every night. |
preClosurePenalApplicable | boolean Default: false A boolean that indicates if penalty is to be applied on pre-closure of accounts of this product. |
preClosurePenalInterest | number <decimal> Deprecated The interest rate to use in case of pre-closure greater than preClosureEarlyPenalInterestTerm rate e.g. 5% Per annum |
preClosurePenalInterestOnTypeId | integer Deprecated Enum: 1 2 Indicates how the Supported options are: 1=Whole Term 2=Until Premature Withdrawal |
preClosureEarlyPenalInterest | number <decimal> Deprecated The interest rate to use in case of pre-closure less than preClosureEarlyPenalInterestTerm rate e.g. 10% Per annum |
preClosureEarlyPenalInterestTerm | number <decimal> Deprecated The percentage rate to use to determine preClosurePenalInterest or preClosureEarlyPenalInterest to apply e.g. 50% of preclosure |
charges | Array of arrays The set of charge definitions applicable to this product. |
accountingRule required | integer Enum: 1 2 Indicates what type of accounting is enabled for this product. Supported options are: 1=None 2=Cash Based Accounting |
savingsControlAccountId | integer <integer64> The |
savingsReferenceAccountId | integer <integer64> The |
transfersInSuspenseAccountId | integer <integer64> The |
interestOnSavingsAccountId | integer <integer64> The |
incomeFromFeeAccountId | integer <integer64> The |
incomeFromPenaltyAccountId | integer <integer64> The |
Array of objects | |
Array of objects | |
Array of objects |
{- "locale": "en",
- "name": "6 month Deposit",
- "shortName": "FT01",
- "description": "6 month fixed deposit with monthly compounding",
- "currencyCode": "KES",
- "digitsAfterDecimal": 0,
- "inMultiplesOf": 1,
- "productGroupId": 1,
- "minDepositAmount": 1000,
- "maxDepositAmount": 5000,
- "depositAmount": 1000,
- "minDepositTerm": 6,
- "minDepositTermTypeId": 2,
- "maxDepositTerm": 12,
- "maxDepositTermTypeId": 2,
- "inMultiplesOfDepositTerm": 2,
- "inMultiplesOfDepositTermTypeId": 2,
- "interestPostingPeriodType": 4,
- "interestCompoundingPeriodType": 4,
- "interestCalculationType": 1,
- "interestCalculationDaysInYearType": 1,
- "lockinPeriodEnabled": true,
- "lockinPeriodFrequency": 2,
- "lockinPeriodFrequencyType": 2,
- "charts": [
- {
- "locale": "en",
- "dateFormat": "yyyy-MM-dd",
- "name": "Deposit Account Chart",
- "description": "multi-band interest rate chart",
- "fromDate": "2022-12-01",
- "endDate": "2022-12-31",
- "chartSlabs": [
- {
- "locale": "en",
- "description": "from 6+ months",
- "periodType": 2,
- "fromPeriod": 1,
- "toPeriod": 6,
- "amountRangeFrom": 1000,
- "amountRangeTo": 5000,
- "annualInterestRate": 8.5
}
], - "productId": 1,
- "isPrimaryGroupingByAmount": false
}
], - "withHoldTax": false,
- "taxGroupId": 1,
- "autoRenewOnClosure": false,
- "preClosurePenalApplicable": false,
- "preClosurePenalInterest": 5,
- "preClosurePenalInterestOnTypeId": 2,
- "preClosureEarlyPenalInterest": 5,
- "preClosureEarlyPenalInterestTerm": 5,
- "charges": [ ],
- "accountingRule": 2,
- "savingsControlAccountId": 0,
- "savingsReferenceAccountId": 0,
- "transfersInSuspenseAccountId": 0,
- "interestOnSavingsAccountId": 0,
- "incomeFromFeeAccountId": 0,
- "incomeFromPenaltyAccountId": 0,
- "paymentChannelToFundSourceMappings": [
- {
- "paymentTypeId": 0,
- "fundSourceAccountId": 0
}
], - "feeToIncomeAccountMappings": [
- {
- "chargeId": 0,
- "incomeAccountId": 0
}
], - "penaltyToIncomeAccountMappings": [
- {
- "chargeId": 0,
- "incomeAccountId": 0
}
]
}
{- "resourceId": 12
}
Find a fixed term deposit product by id
id required | integer <int64> Example: 1 The unique identifer of a fixed term deposit product. |
[- {
- "id": 4709,
- "name": "6 month Deposit",
- "shortName": "FT01",
- "description": "6 month fixed deposit with monthly compounding",
- "status": "savingsProduct.active",
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "minDepositAmount": 1000,
- "maxDepositAmount": 5000,
- "depositAmount": 1000,
- "minDepositTerm": 6,
- "minDepositTermTypeId": 2,
- "maxDepositTerm": 12,
- "maxDepositTermTypeId": 2,
- "inMultiplesOfDepositTerm": 2,
- "inMultiplesOfDepositTermTypeId": 2,
- "interestPostingPeriodType": {
- "id": 4,
- "code": "savings.interest.period.savingsPostingInterestPeriodType.monthly",
- "value": "Monthly"
}, - "interestCompoundingPeriodType": {
- "id": 4,
- "code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
- "value": "Monthly"
}, - "interestCalculationType": {
- "id": 1,
- "code": "savingsInterestCalculationType.dailybalance",
- "value": "Monthly"
}, - "interestCalculationDaysInYearType": {
- "id": 365,
- "code": "savingsInterestCalculationDaysInYearType.days365",
- "value": "365 Days"
}, - "nominalAnnualInterestRate": 12.5,
- "interestRateCharts": [
- {
- "locale": "en",
- "dateFormat": "yyyy-MM-dd",
- "name": "Deposit Account Chart",
- "description": "multi-band interest rate chart",
- "fromDate": "2022-12-01",
- "endDate": "2022-12-31",
- "chartSlabs": [
- {
- "locale": "en",
- "description": "from 6+ months",
- "periodType": 2,
- "fromPeriod": 1,
- "toPeriod": 6,
- "amountRangeFrom": 1000,
- "amountRangeTo": 5000,
- "annualInterestRate": 8.5
}
], - "productId": 1,
- "isPrimaryGroupingByAmount": false
}
], - "activeChart": {
- "locale": "en",
- "dateFormat": "yyyy-MM-dd",
- "name": "Deposit Account Chart",
- "description": "multi-band interest rate chart",
- "fromDate": "2022-12-01",
- "endDate": "2022-12-31",
- "chartSlabs": [
- {
- "locale": "en",
- "description": "from 6+ months",
- "periodType": 2,
- "fromPeriod": 1,
- "toPeriod": 6,
- "amountRangeFrom": 1000,
- "amountRangeTo": 5000,
- "annualInterestRate": 8.5
}
], - "productId": 1,
- "isPrimaryGroupingByAmount": false
}, - "withHoldTax": false,
- "taxGroup": {
- "id": 1,
- "name": "10% WHT"
}, - "autoRenewOnClosure": false,
- "preClosurePenalApplicable": false,
- "preClosurePenalInterest": 5,
- "preClosurePenalInterestOnTypeId": 2
}
]
The supported schema for creating a new fixed term deposit account.
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
productId required | integer <integer64> The |
clientId required | integer <integer64> The |
groupId | integer <integer64> The |
fieldOfficerId | integer <integer64> The id of associated staff member that is a field officer. |
externalId | string <= 100 characters A place to put an external reference for this account e.g. The ID another system uses for it. If provided, it must be unique. |
submittedOnDate required | string <date> The date that the account application was submited. |
depositAmount required | number <decimal> Is the amount deposited when setting up the account. Its value must be within the range defined by |
depositPeriod required | number <integer> Used together with |
depositPeriodFrequencyId required | integer Enum: 0 1 2 3 The type of term period being described. e.g 6 months Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
interestPostingPeriodType | integer Enum: 4 5 6 7 Part of interest calculation settings. Indicates how often interest is to be posted to the account. If provided it overrides the setting on the product, otherwise the account inherits from the product. Supported options are: 4=Monthly 5=Quarterly 6=Bi-Annualy 7=Annual |
interestCompoundingPeriodType | integer Enum: 4 5 6 7 Part of interest calculation settings. Indicates how often interest is to be compounded. If provided it overrides the setting on the product, otherwise the account inherits from the product. Supported options are: 1=Daily 4=Monthly 5=Quarterly 6=Bi-Annualy 7=Annual |
interestCalculationType | integer Enum: 1 2 Part of interest calculation settings. If provided it overrides the setting on the product, otherwise the account inherits from the product. There are two methods to calculate the interest on a savings account: 1=Daily Balance 2=Average Balance |
interestCalculationDaysInYearType | integer Enum: 360 365 Part of interest calculation settings. If provided it overrides the setting on the product, otherwise the account inherits from the product. Supported options are: 1=360 2=365 |
lockinPeriodFrequency | integer If provided, overrides the same named setting from product. If the savings product Used along with If provided it overrides the setting on the product, otherwise the account inherits from the product. |
lockinPeriodFrequencyType | integer Enum: 0 1 2 3 If provided, overrides the same named setting from product. If the savings product Used along with If provided it overrides the setting on the product, otherwise the account inherits from the product. Supported options are: 0=Days 1=Weeks 2=Months 3=Years |
chartId | integer The id of an existing interest rate chart associated with product. If omitted, then an applicable interest rate chart will be looked for on the associated product based on the |
autoRenewOnClosure | boolean Default: false A boolean that indicates if accounts of this product should be renewed upon reaching maturity. |
preClosurePenalApplicable | boolean Default: false A boolean that indicates if penalty is to be applied on pre-closure of accounts of this product. |
preClosurePenalInterest | number The interest rate to use in case of pre-closure e.g. 5% Per annum |
preClosurePenalInterestOnTypeId | integer Enum: 1 2 Indicates how the Supported options are: 1=Whole Term 2=Until Premature Withdrawal |
charges | Array of arrays The set of charge definitions applicable to this account. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "productId": 1,
- "clientId": 1,
- "groupId": 1,
- "fieldOfficerId": 1,
- "externalId": "ABC-0001",
- "submittedOnDate": "2022-12-01",
- "depositAmount": 1000,
- "depositPeriod": 6,
- "depositPeriodFrequencyId": 2,
- "interestPostingPeriodType": 4,
- "interestCompoundingPeriodType": 4,
- "interestCalculationType": 1,
- "interestCalculationDaysInYearType": 1,
- "lockinPeriodFrequency": 2,
- "lockinPeriodFrequencyType": 2,
- "chartId": 0,
- "autoRenewOnClosure": false,
- "preClosurePenalApplicable": false,
- "preClosurePenalInterest": 5,
- "preClosurePenalInterestOnTypeId": 2,
- "charges": [ ]
}
{- "resourceId": 12
}
Enables the transfer of monetary funds from one account to another.
At present the following account transfers are supported:
List all account transfers
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
orderBy | string The database field name that you wish to order the list of account transfers by. It must also include the alias used in the generated query:
|
sortOrder | string Enum: "ASC" "DESC"
Used with This parameter is ignored unless |
accountDetailId | integer if passed restricts the results to account transfer transactions that have this same “account details id” accountDetailId (see att.account_transfer_details_id (accountDetailId) field in orderBy ) Note: There are two transactions related to each account transfer so when passing an accountDetailId its possible to get back both transactions that make up the account transfer. |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Ability to create new transfer of monetary funds from one account to another.
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
transferAmount required | number <decimal> The amount of the transfer. |
transferDate required | string <date> The date the account transfer is in effect from. |
transferDescription required | string A description or note associated with the transfer. |
fromOfficeId required | integer Unique |
fromClientId | integer Unique |
fromGroupId | integer Unique |
fromAccountType required | integer <integer64> Unique Account types:
|
fromAccountId required | integer <integer64> An |
toOfficeId required | integer Unique |
toClientId | integer Unique |
toGroupId | integer Unique |
toAccountType required | integer <integer64> Unique Account types:
|
toAccountId required | integer <integer64> An |
{- "locale": "en",
- "dateFormat": "yyyy-MM-dd",
- "transferAmount": 5000,
- "transferDate": "2020-01-15",
- "transferDescription": "Transfer from loan to savings via disbursement.",
- "fromOfficeId": 2,
- "fromClientId": 2,
- "fromGroupId": 2,
- "fromAccountType": 2,
- "fromAccountId": 2,
- "toOfficeId": 2,
- "toClientId": 2,
- "toGroupId": 2,
- "toAccountType": 2,
- "toAccountId": 2
}
{- "resourceId": 12
}
Find account transfer transaction by id
id required | integer <int64> Example: 1 The unique identifer of an account transfer transaction. |
{- "id": 4709,
- "reversed": false,
- "currency": { },
- "transferAmount": 5000,
- "transferDate": [
- 2024,
- 5,
- 1
], - "transferDescription": "Transfer from loan to savings via disbursement.",
- "fromOffice": {
- "id": 2,
- "name": "Local Branch-A"
}, - "fromClient": {
- "id": 2,
- "displayName": "John A. Smith",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "fromGroup": {
- "id": 2,
- "displayName": "ABC-Group",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "fromAccountType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "fromAccount": {
- "id": 2,
- "accountNo": "ABC-Group",
- "productId": 2,
- "productName": "Local Branch-A"
}, - "toOffice": {
- "id": 2,
- "name": "Local Branch-A"
}, - "toClient": {
- "id": 2,
- "displayName": "John A. Smith",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "toGroup": {
- "id": 2,
- "displayName": "ABC-Group",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "toAccountType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "toAccount": {
- "id": 2,
- "accountNo": "ABC-Group",
- "productId": 2,
- "productName": "Local Branch-A"
}
}
Standing instructions (aka standing orders) refer to instructions an account holder ("the payer") gives to his or her financial institute to pay a set amount at regular intervals to another's ("the payee's") account.
At present the following scenarios support standing instructions:
List all Standing Instructions
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
orderBy | string The database field name that you wish to order the list of standing instructions by. It must also include the alias used in the generated query:
|
sortOrder | string Enum: "ASC" "DESC"
Used with This parameter is ignored unless |
transferType | integer Enum: 1 2 3 4 5 Example: transferType=2 Used to restrict the search to standing instructions that match the Options include:
|
clientId | integer The id of a client. Used to restrict to set of standing instructions where the from account is associated with the client. |
clientName | integer The name of a client. Used to restrict to set of standing instructions where the from account has a client that has a name that exactly matches. |
groupId | integer The id of a group. Used to restrict to set of standing instructions where the from account is associated with the group. |
groupName | integer The name of a group. Used to restrict to set of standing instructions where the from account has a group that has a name that exactly matches. |
fromAccountType | integer Enum: 1 2 6 Example: fromAccountType=2 The account type of the account refered to by This parameter is required if Used to restrict the search to standing instructions that match the Options include:
|
fromAccountId | integer The id of an account. Used to restrict to set of standing instructions where the from account matches. This parameter is required if |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Ability to create new instruction for transfer of monetary funds from one account to another.
name required | string [ 1 .. 250 ] characters A unique name assigned to identify the standing instruction. |
transferType required | integer Enum: 1 2 3 4 5 The id of a transfer type enumeration. Options include:
|
priority required | integer Enum: 1 2 3 4 The id of a priority enumeration. Options include:
|
status required | integer Enum: 1 2 3 The id of a status enumeration. Options include:
|
instructionType required | integer Enum: 1 2 The id of a instruction type enumeration. Options include:
|
amount | number <decimal> The amount of the standing instruction. Mandatory if |
validFrom required | string <date> The date the standing instruction is in effect from. |
validTo | string <date> The date the standing instruction is no longer in effect. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
recurrenceType required | integer Enum: 1 2 Options include:
|
recurrenceFrequency | number <integer32> Enum: 0 1 2 3 Used with Mandatory if Example Values:
|
recurrenceInterval | number <integer> Used in combination with Mandatory if |
recurrenceOnMonthDay | Array of arrays If Used in combination with |
recurrenceOnLastDayOfMonth | boolean If When used, Used in combination with |
fromOfficeId | integer <integer64> An |
toOfficeId | integer <integer64> An |
fromGroupId | integer <integer64> An |
toGroupId | integer <integer64> An |
fromClientId | integer <integer64> An |
toClientId | integer <integer64> An |
fromAccountType | integer Enum: 1 2 6 An integer representing the account type from which the transfer is made. Account types:
|
fromAccountId | integer <integer64> An |
toAccountType | integer Enum: 1 2 6 An integer representing the account type from which the transfer is made. Account types:
|
toAccountId | integer <integer64> An |
{- "name": "string",
- "transferType": 2,
- "priority": 2,
- "status": 1,
- "instructionType": 2,
- "amount": 5000,
- "validFrom": "2020-01-15",
- "validTo": "2020-01-15",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "recurrenceType": 2,
- "recurrenceFrequency": 2,
- "recurrenceInterval": 12,
- "recurrenceOnMonthDay": "02 April",
- "recurrenceOnLastDayOfMonth": false,
- "fromOfficeId": 2,
- "toOfficeId": 2,
- "fromGroupId": 2,
- "toGroupId": 2,
- "fromClientId": 2,
- "toClientId": 2,
- "fromAccountType": 2,
- "fromAccountId": 2,
- "toAccountType": 2,
- "toAccountId": 2
}
{- "resourceId": 12
}
Find standing instruction by id
id required | integer <int64> Example: 1 The unique identifer of a standing instruction. |
{- "id": 4709,
- "accountDetailId": 4709,
- "name": "Regular Repayment",
- "fromOffice": {
- "id": 2,
- "name": "Local Branch-A"
}, - "fromClient": {
- "id": 2,
- "displayName": "John A. Smith",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "fromGroup": {
- "id": 2,
- "displayName": "ABC-Group",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "fromAccountType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "fromAccount": {
- "id": 2,
- "accountNo": "ABC-Group",
- "productId": 2,
- "productName": "Local Branch-A"
}, - "toOffice": {
- "id": 2,
- "name": "Local Branch-A"
}, - "toClient": {
- "id": 2,
- "displayName": "John A. Smith",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "toGroup": {
- "id": 2,
- "displayName": "ABC-Group",
- "officeId": 2,
- "officeName": "Local Branch-A"
}, - "toAccountType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "toAccount": {
- "id": 2,
- "accountNo": "ABC-Group",
- "productId": 2,
- "productName": "Local Branch-A"
}, - "transferType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "priority": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "instructionType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "status": {
- "id": 1,
- "code": "string",
- "value": "string"
}, - "amount": 5000,
- "validFrom": [
- 2022,
- 5,
- 1
], - "validTo": [
- 2023,
- 5,
- 1
], - "recurrenceType": {
- "id": 2,
- "code": "string",
- "value": "string"
}, - "recurrenceFrequency": {
- "id": 2,
- "code": "recurrenceperiodFrequencyType.months",
- "value": "Months"
}, - "recurrenceInterval": 12,
- "recurrenceOnMonthDay": "11-21",
- "recurrenceOnLastDayOfMonth": false
}
Update or Delete existing standing instruction.
Use command=delete
to mark the standing instruction as deleted. This is a soft delete and only changes the status to deleted (also updates name to indicate its deleted.) No request body is required when marking the standing instruction as deleted.
Use command=update
to update the standing instruction. An update expects a request body and at least one parameter that should be updated.
id required | integer <int64> Example: 1 The unique identifer of a standing instruction. |
command required | string Enum: "update" "delete" Example: command=update The name of the command being performed. |
Update or delete exisiting standing instruction.
name | string [ 1 .. 250 ] characters A unique name assigned to identify the standing instruction. |
transferType | integer Enum: 1 2 3 4 5 The id of a transfer type enumeration. Options include:
|
priority | integer Enum: 1 2 3 4 The id of a priority enumeration. Options include:
|
status | integer Enum: 1 2 3 The id of a status enumeration. Options include:
|
instructionType | integer Enum: 1 2 The id of a instruction type enumeration. Options include:
|
amount | number <decimal> The amount of the standing instruction. Mandatory if |
validFrom | string <date> The date the standing instruction is in effect from. |
validTo | string <date> The date the standing instruction is no longer in effect. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
recurrenceType | integer Enum: 1 2 Options include:
|
recurrenceFrequency | number <integer32> Enum: 0 1 2 3 Used with Mandatory if Example Values:
|
recurrenceInterval | number <integer> Used in combination with Mandatory if |
recurrenceOnMonthDay | Array of arrays If Used in combination with |
recurrenceOnLastDayOfMonth | boolean If When used, Used in combination with |
fromOfficeId | integer <integer64> An |
toOfficeId | integer <integer64> An |
fromGroupId | integer <integer64> An |
toGroupId | integer <integer64> An |
fromClientId | integer <integer64> An |
toClientId | integer <integer64> An |
fromAccountType | integer Enum: 1 2 6 An integer representing the account type from which the transfer is made. Account types:
|
fromAccountId | integer <integer64> An |
toAccountType | integer Enum: 1 2 6 An integer representing the account type from which the transfer is made. Account types:
|
toAccountId | integer <integer64> An |
{- "name": "string",
- "transferType": 2,
- "priority": 2,
- "status": 1,
- "instructionType": 2,
- "amount": 5000,
- "validFrom": "2020-01-15",
- "validTo": "2020-01-15",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "recurrenceType": 2,
- "recurrenceFrequency": 2,
- "recurrenceInterval": 12,
- "recurrenceOnMonthDay": "02 April",
- "recurrenceOnLastDayOfMonth": false,
- "fromOfficeId": 2,
- "toOfficeId": 2,
- "fromGroupId": 2,
- "toGroupId": 2,
- "fromClientId": 2,
- "toClientId": 2,
- "fromAccountType": 2,
- "fromAccountId": 2,
- "toAccountType": 2,
- "toAccountId": 2
}
{- "resourceId": 1,
- "changes": { }
}
In microfinance its common for its financial services delivery to clients and groups to be performed by having staff members visit locations near the client/group.
Loan repayments and savings deposits are common transactions performed at these collections.
The collection sheet functionality is based on this and allows for a sheet to be generated with all the loan repayments and savings deposits that are expected to occur at the collection based on the groups/clients.
The view of transactions can be generated based on the office, group or staff member selected.
Search all collection sheet submissions that are "processed" or "rejected".
Collection sheet submissions that are still "awaiting approval" are not returned.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
officeId | integer The id of an office. Filters the search to only collection sheets associated with this offices hierarchy (office + sub-offices). |
groupId | integer The id of a group. Filters the search to only collection sheets associated with this group. |
makerId | integer The id of an application user that created the collection sheet. Filters the search to only collection sheets created by this user. |
makerDateTimeFrom | string <date-time> Filter by maker date time from (yyyy-MM-dd HH:mm:ss).
Example: |
makerDateTimeTo | string <date-time> Filter by maker date time to (yyyy-MM-dd HH:mm:ss).
Example: |
[- {
- "id": 0,
- "actionName": "string",
- "entityName": "string",
- "resourceId": 0,
- "url": "string",
- "maker": "string",
- "madeOnDate": "2019-08-24T14:15:22Z",
- "checker": "string",
- "checkedOnDate": "2019-08-24T14:15:22Z",
- "processingResult": "string",
- "commandAsJson": { },
- "officeName": "string",
- "groupLevelName": "string",
- "groupName": "string"
}
]
Generates a collection sheet view based on parameters provided.
command required | string Default: "generateGroupCollectionSheet" Example: command=generateGroupCollectionSheet The generateGroupCollectionSheet command. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
officeId required | integer <int64> The id of the office the group or staff of collection sheet associated with |
staffId | integer <int64> The id of the staff member the collection sheet is being generated for. |
groupId | integer <int64> The id of the group the collection sheet is being generated for. |
transactionDate required | string The date the collection sheet will use to find due repayments or deposits on. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "officeId": 1,
- "staffId": 1,
- "groupId": 1,
- "transactionDate": "01 July 2007"
}
[- {
- "dueDate": [
- 2025,
- 12,
- 1
], - "paymentTypeOptions": [
- {
- "id": 1,
- "name": "Cash",
- "description": "Physical cash payments",
- "isCashPayment": true,
- "position": 1
}
], - "clients": [
- {
- "groupId": 1,
- "groupName": "Group A",
- "clientId": 1,
- "clientName": "Group A",
- "loans": [
- {
- "loanId": 1,
- "accountId": "ABC-001",
- "accountStatusId": 300,
- "productId": 1,
- "productShortName": "Product A",
- "disbursementDate": [
- 2024,
- 6,
- 1
], - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "balance": 4780,
- "expectedRepayment": 475,
- "principalDue": 400,
- "principalPaid": 0,
- "interestDue": 20,
- "interestPaid": 0,
- "chargesDue": 55,
- "totalDue": 475,
- "feeDue": 0,
- "feePaid": 0
}
]
}
]
}
]
Generates a collection sheet view based on parameters provided.
command required | string Default: "generateCollectionSheet" Example: command=generateCollectionSheet The generateCollectionSheet command. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
officeId required | integer <int64> The id of the office the group or staff of collection sheet associated with |
staffId required | integer <int64> The id of the staff member the collection sheet is being generated for. |
transactionDate required | string The date the collection sheet will use to find due repayments or deposits on. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "officeId": 1,
- "staffId": 1,
- "transactionDate": "01 July 2007"
}
[- {
- "dueDate": [
- 2025,
- 12,
- 1
], - "paymentTypeOptions": [
- {
- "id": 1,
- "name": "Cash",
- "description": "Physical cash payments",
- "isCashPayment": true,
- "position": 1
}
], - "clients": [
- {
- "groupId": 1,
- "groupName": "Group A",
- "clientId": 1,
- "clientName": "Group A",
- "loans": [
- {
- "loanId": 1,
- "accountId": "ABC-001",
- "accountStatusId": 300,
- "productId": 1,
- "productShortName": "Product A",
- "disbursementDate": [
- 2024,
- 6,
- 1
], - "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "balance": 4780,
- "expectedRepayment": 475,
- "principalDue": 400,
- "principalPaid": 0,
- "interestDue": 20,
- "interestPaid": 0,
- "chargesDue": 55,
- "totalDue": 475,
- "feeDue": 0,
- "feePaid": 0
}
]
}
]
}
]
Submits a collection sheet based on parameters provided.
command required | string Default: "saveGroupCollectionSheet" Example: command=saveGroupCollectionSheet The saveGroupCollectionSheet command. |
groupId required | integer The id of a group. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
transactionDate required | string The date the collection sheet will use to find due repayments or deposits on |
paymentTypeId | integer <int64> The id of the payment type associated with this collection sheet |
receiptNumber | string The unique id of the payment that will be captured in payment details for each transaction associated with this collection sheet submission |
note | string Additional information related to the collection |
Array of objects An array of loan repayment transaction details | |
Array of objects An array of loan disbursement transaction details | |
Array of objects An array of savings deposit transaction details |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "transactionDate": "01 July 2007",
- "paymentTypeId": 1,
- "receiptNumber": "C-0002345",
- "note": "additional info for Group XX",
- "bulkRepaymentTransactions": [
- {
- "loanId": 1,
- "transactionAmount": 475
}
], - "bulkDisbursementTransactions": [
- {
- "loanId": 1,
- "transactionAmount": 475
}
], - "bulkSavingsDueTransactions": [
- {
- "savingsId": 1,
- "transactionAmount": 100
}
]
}
{- "commandId": 0
}
Approves a collection sheet submission resulting in processing of transactions
command required | string Default: "approve" Example: command=approve The approve command. |
commandId required | integer The id of the audit entry of the collection submission |
{ }
{- "commandId": 0,
- "groupId": 0,
- "resourceId": 0,
- "changes": {
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "note": "Collection payment",
- "status": {
- "id": 200,
- "code": "collectionsheet.approved",
- "value": "Approved"
}, - "loanTransactions": [ ],
- "loanRepaymentErrors": [ ],
- "failedLoanIds": [ ],
- "SavingsTransactions": [ ],
- "savingsDepositErrors": [ ],
- "failedSavingsIds": [ ]
}
}
Similiar to the collection sheet concept but this approach allows for saving withdrawal transactions to be performed in bulk based on the office, staff, group.
Search all withdrawal sheet submissions that are "processed" or "rejected".
Withdrawal sheet submissions that are still "awaiting approval" are not returned.
officeId | integer The id of an office. Filters the search to only collection sheets associated with this offices hierarchy (office + sub-offices). |
groupId | integer The id of a group. Filters the search to only collection sheets associated with this group. |
makerId | integer The id of an application user that created the collection sheet. Filters the search to only collection sheets created by this user. |
makerDateTimeFrom | string <date-time> Filter by maker date time from (yyyy-MM-dd HH:mm:ss).
Example: |
makerDateTimeTo | string <date-time> Filter by maker date time to (yyyy-MM-dd HH:mm:ss).
Example: |
[- {
- "id": 0,
- "actionName": "string",
- "entityName": "string",
- "resourceId": 0,
- "url": "string",
- "maker": "string",
- "madeOnDate": "2019-08-24T14:15:22Z",
- "checker": "string",
- "checkedOnDate": "2019-08-24T14:15:22Z",
- "processingResult": "string",
- "commandAsJson": { },
- "officeName": "string",
- "groupLevelName": "string",
- "groupName": "string"
}
]
Returns withdrawal sheet details
id required | integer The id of the withdrawal sheet |
{- "id": 0,
- "actionName": "string",
- "entityName": "string",
- "resourceId": 0,
- "url": "string",
- "maker": "string",
- "madeOnDate": "2019-08-24T14:15:22Z",
- "checker": "string",
- "checkedOnDate": "2019-08-24T14:15:22Z",
- "processingResult": "string",
- "commandAsJson": { },
- "officeName": "string",
- "groupLevelName": "string",
- "groupName": "string"
}
Search all withdrawal sheet submissions that are in pending approval state.
[- {
- "id": 0,
- "actionName": "string",
- "entityName": "string",
- "resourceId": 0,
- "url": "string",
- "maker": "string",
- "madeOnDate": "2019-08-24T14:15:22Z",
- "checker": "string",
- "checkedOnDate": "2019-08-24T14:15:22Z",
- "processingResult": "string",
- "commandAsJson": { },
- "officeName": "string",
- "groupLevelName": "string",
- "groupName": "string"
}
]
Returns withdrawal sheet details that is pending approval
id required | integer The id of the withdrawal sheet |
{- "id": 0,
- "actionName": "string",
- "entityName": "string",
- "resourceId": 0,
- "url": "string",
- "maker": "string",
- "madeOnDate": "2019-08-24T14:15:22Z",
- "checker": "string",
- "checkedOnDate": "2019-08-24T14:15:22Z",
- "processingResult": "string",
- "commandAsJson": { },
- "officeName": "string",
- "groupLevelName": "string",
- "groupName": "string"
}
Generates a withdrawal sheet based on staffId and parameters provided.
command required | string Example: command=generateWithdrawalSheet The name of the command |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
officeId | integer <int64> The id of the office the group or staff of withdrawal sheet associated with |
staffId required | integer <int64> The id of the staff member the withdrawal sheet is being generated for. |
transactionDate required | string The date the withdrawal sheet will use to find due repayments or deposits on. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "officeId": 1,
- "staffId": 1,
- "transactionDate": "01 July 2007"
}
[- {
- "groupId": 1,
- "groupName": "Group A",
- "clientId": 1,
- "clientName": "Group A",
- "savings": [
- {
- "savingsId": 1,
- "accountId": "ABC-001",
- "accountStatusId": 300,
- "productId": 1,
- "productName": "Product A",
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "balance": 4780,
- "dueAmount": 475,
- "minRequiredBalance": 400,
- "overdraftLimit": 20,
- "maximumWithdrawalAmount": 0,
- "canWithdrawFromAccount": true
}
]
}
]
Generates a withdrawal sheet based on groupId and parameters provided.
command required | string Example: command=generateGroupWithdrawalSheet The name of the command |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
officeId | integer <int64> The id of the office the group or staff of withdrawal sheet associated with |
staffId | integer <int64> The id of the staff member the withdrawal sheet is being generated for. |
groupId required | integer <int64> The id of the group the withdrawal sheet is being generated for. |
transactionDate required | string The date the withdrawal sheet will use to find due repayments or deposits on. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "officeId": 1,
- "staffId": 1,
- "groupId": 1,
- "transactionDate": "01 July 2007"
}
[- {
- "groupId": 1,
- "groupName": "Group A",
- "clientId": 1,
- "clientName": "Group A",
- "savings": [
- {
- "savingsId": 1,
- "accountId": "ABC-001",
- "accountStatusId": 300,
- "productId": 1,
- "productName": "Product A",
- "currency": {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}, - "balance": 4780,
- "dueAmount": 475,
- "minRequiredBalance": 400,
- "overdraftLimit": 20,
- "maximumWithdrawalAmount": 0,
- "canWithdrawFromAccount": true
}
]
}
]
Submits a withdrawal sheet based on parameters provided.
command required | string Example: command=saveCollectionSheet The name of the command |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
transactionDate required | string The date the collection sheet will use to find due repayments or deposits on |
totalGroupAmount required | number <decimal> The total amount of withdrawals across all transactions in this sheet |
groupId required | integer <int64> The id of the group |
paymentTypeId | integer <int64> The id of the payment type associated with this collection sheet |
note | string The unique receipt number of the payment that will be captured in payment details for each transaction associated with this sheet submission |
required | Array of objects An array of savings withdrawal transaction details |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "transactionDate": "01 July 2007",
- "totalGroupAmount": 475,
- "groupId": 1,
- "paymentTypeId": 1,
- "note": "C-0002345",
- "bulkWithdrawalTransactions": [
- {
- "savingsAccountId": 1,
- "amount": 100
}
]
}
{- "commandId": 0,
- "resourceId": 0
}
Approves a sumitted withdrawal sheet resulting in the related transactions being applied.
command required | string Example: command=approve The name of the command |
commandId required | integer The id of the audit entry of the collection submission |
{ }
{- "commandId": 0,
- "resourceId": 0
}
Reject a sumitted withdrawal sheet resulting in the related transactions not being applied.
command required | string Example: command=reject The name of the command |
commandId required | integer The id of the audit entry of the submission |
{ }
{- "commandId": 0,
- "resourceId": 0
}
Offices are used to model an MFIs structure. A hierarchical representation of offices is supported. There will always be at least least one office (which represents the MFI or an MFIs head office). All subsequent offices added must have a parent office.
List all Offices
includeAllOffices | boolean Default: false Example: includeAllOffices=false Allows the user to get back the full hierarchy of offices regardless of what office they are associated with in the organisation. |
orderBy | string Enum: "id" "parent_id" "hierarchy" "external_id" "name" "opening_date" The database field name that you wish to order the list of offices by. |
sortOrder | string Enum: "ASC" "DESC" Used with |
[- {
- "id": 4709,
- "name": "name",
- "nameDecorated": "name",
- "externalId": "name",
- "hierarchy": "name",
- "openingDate": [
- 2000,
- 1,
- 1
], - "parentId": 1,
- "parentName": "Head Office"
}
]
The supported schema for creating offices. name
, openingDate
, parentId
are required. locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
name required | string The name of the office. |
externalId | string A place to put an external reference for this office e.g. The ID another system uses for it. If provided, it must be unique. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
openingDate required | string The opening date in a date format supported by Joda Time. |
parentId required | integer <int64> The |
{- "name": "name",
- "externalId": "ABC-0001",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "openingDate": "01 July 2007",
- "parentId": 1
}
{- "resourceId": 12
}
Find an Office by Id
id required | integer <int64> Example: 1 The unique identifer of an office. |
[- {
- "id": 4709,
- "name": "name",
- "nameDecorated": "name",
- "externalId": "name",
- "hierarchy": "name",
- "openingDate": [
- 2000,
- 1,
- 1
], - "parentId": 1,
- "parentName": "Head Office"
}
]
The supported schema for office updates. name
, externalId
, openingDate
and parentId
can be updated in isolation or together.
locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
id required | integer <int64> Example: 1 The unique identifer of an office. |
Update exisitng office
name | string The name of the office. |
externalId | string A place to put an external reference for this office e.g. The ID another system uses for it. If provided, it must be unique. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
openingDate | string The opening date in a date format supported by Joda Time. |
parentId | integer <int64> The |
{- "name": "name",
- "externalId": "ABC-0001",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "openingDate": "01 July 2007",
- "parentId": 1
}
{- "resourceId": 1,
- "changes": { }
}
This is a convenience api.
It can be useful when building maintenance user interface screens for client applications.
It returns fields with default values and dropdown list values.
id required | integer <int64> Example: 1 The unique identifer of an office. |
{- "timestamp": 521630352275443,
- "status": 401,
- "error": "Unauthorized",
- "message": "Full authentication is required to access this resource",
- "path": "/api/v1/{resourceName}"
}
Allows you to model staff members. At present the key role of significance is whether this staff member is a loan officer or not.
List all Staff
officeId | integer The id of an office. Used to restrict to set of staff associated with the office. |
staffInOfficeHierarchy | boolean Default: false Example: staffInOfficeHierarchy=false if true, returns all active staff in office hierarchy that are above the provided |
loanOfficersOnly | boolean Default: false Example: loanOfficersOnly=false if true, restricts response to staff that are set as loan officers. |
status | string Default: "active" Enum: "active" "inactive" "all" Example: status=active if |
sqlSearch | string Deprecated Deprecated. Use other parameters or See The Data Filter API for better approach for search/filter. A valid sql fragment that will work with backend query for this api. If |
[- {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "userId": 0,
- "firstname": "John",
- "lastname": "Doe",
- "displayname": "John Doe",
- "mobileNo": "+353 78 90987877",
- "externalId": "name",
- "isLoanOfficer": true,
- "isActive": true,
- "joiningDate": [
- 2000,
- 1,
- 1
]
}
]
The supported schema for creating staff. officeId
, firstName
, lastName
and joiningDate
are required.
locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
officeId required | integer <int64> The id of the office this staff member is associated with. |
firstname required | string The first name of the staff member. |
lastname required | string The last name of the staff member. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
joiningDate required | string The joining date in a date format supported by Joda Time. |
mobileNo | string The mobile telephone number of staff memeber. |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
isLoanOfficer | boolean Indicates if this staff member is a loan officer or not. Defaults to false if omitted. |
isActive | boolean Default: true Indicates if this staff member active. Defaults to true if omitted. |
{- "officeId": 1,
- "firstname": "John",
- "lastname": "Doe",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "joiningDate": "01 July 2007",
- "mobileNo": "+353 78 90987877",
- "externalId": "STAFF-0001",
- "isLoanOfficer": true,
- "isActive": true
}
{- "resourceId": 12
}
Find staff member by id
id required | integer <int64> Example: 1 The unique identifer of a staff member. |
[- {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "userId": 0,
- "firstname": "John",
- "lastname": "Doe",
- "displayname": "John Doe",
- "mobileNo": "+353 78 90987877",
- "externalId": "name",
- "isLoanOfficer": true,
- "isActive": true,
- "joiningDate": [
- 2000,
- 1,
- 1
]
}
]
The supported schema for staff updates. officeId
, firstName
, lastName
, joiningDate
, externalId
, mobileNo
, isLoanOfficer
, isActive
can be updated in isolation or together.
locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
id required | integer <int64> Example: 1 The unique identifer of a staff member. |
Update exisitng staff member
officeId | integer <int64> The id of the office this staff member is associated with. |
firstname | string The first name of the staff member. |
lastname | string The last name of the staff member. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
joiningDate | string The joining date in a date format supported by Joda Time. |
mobileNo | string The mobile telephone number of staff memeber. |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
isLoanOfficer | boolean Indicates if this staff member is a loan officer or not. Defaults to false if omitted. |
isActive | boolean Default: true Indicates if this staff member active. Defaults to true if omitted. |
{- "officeId": 1,
- "firstname": "John",
- "lastname": "Doe",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "joiningDate": "01 July 2007",
- "mobileNo": "+353 78 90987877",
- "externalId": "STAFF-0001",
- "isLoanOfficer": true,
- "isActive": true
}
{- "resourceId": 1,
- "changes": { }
}
List paged response of tasks matching filter criteria.
The API is scoped by user permissions setup:
READ_TASK_ADMIN
permission is allowed to search tasks assigned / createdby other users so long as in its office hierarchy.READ_TASK
permission is allowed to search tasks either assigned or created by them so long as in office hierarchy.See The Data Filter API for better approach for search/filter.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
clientId | integer <int32> >= 1 Default: null Restrict response to tasks with client id matching this value. |
groupId | integer <int32> >= 1 Default: null Restrict response to tasks with group id matching this value. |
modifiedSinceTimestamp | integer <int64> Example: modifiedSinceTimestamp=1634152729 Should be passed as a UNIX Timestamp. When provided only tasks that have been created or updated since the provided timestamp are returned. Whenever a task is modified its last modified date and time in UTC is captured. This parameter can be used in integrations to fetch changed data since a last fetch, timestamps will be treated as UTC and returned as UTC. |
statusId | integer <int32> >= 1 Default: null Restrict response to tasks with status matching this value. |
priorityId | integer <int32> >= 1 Default: null Restrict response to tasks with priority matching this value. |
completed | boolean Default: null Restrict response to tasks whose |
taskAssignedToUserId | integer <int32> >= 1 Default: null Restrict response to tasks assigned to users matching this value. |
taskCreatedByUserId | integer <int32> >= 1 Default: null Restrict response to tasks created by users matching this value. |
dueDateFrom | string Default: null Example: dueDateFrom=2001-12-25 This parameter must also be used with Restrict response to tasks where due date is in range The date can be in ISO format yyyy-MM-dd or in the format specified by dateFormat parameter |
dueDateTo | string Default: null This parameter must also be used with Restrict response to tasks where due date is in range The date can be in ISO format yyyy-MM-dd or in the format specified by dateFormat parameter |
createdDateFrom | string Default: null This parameter must also be used with Restrict response to tasks where its created date is in range The date can be in ISO format yyyy-MM-dd or in the format specified by dateFormat parameter |
createdDateTo | string Default: null This parameter must also be used with Restrict response to tasks where its created date is in range The date can be in ISO format yyyy-MM-dd or in the format specified by dateFormat parameter |
completedOnDateFrom | string Default: null This parameter must also be used with Restrict response to tasks where its completed on date is in range The date can be in ISO format yyyy-MM-dd or in the format specified by dateFormat parameter |
completedOnDateTo | string Default: null This parameter must also be used with Restrict response to tasks where its completed on date is in range The date can be in ISO format yyyy-MM-dd or in the format specified by dateFormat parameter |
dateFormat | string Default: null If provided, then it will be used in formatting date parameters, else the date parameters must be in ISO format yyyy-MM-dd |
orderBy | string Enum: "dueDate" "createdDate" "completedOnDate" The api parameter name of field you wish to order by. |
sortOrder | string Enum: "ASC" "DESC" Used with |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Used to create a new Task.
Tasks can be associated with a client
or group
but not both. The model is the same for client and group except for the clientId
and groupId
fields.
clientId required | integer <int64> The id of the client on platform that this task is associated with. |
summary required | string A summary of the tasks purpose. |
assignedToUserId required | integer <int64> The id of the user in the platform that you wish to assign against this task. |
statusId required | integer <int64> The status to create the task in |
priorityId required | integer <int64> The priority to create the task in |
dueDate | string The date on that this task is due to be completed by. Provided as a string and used together with |
description | string A full description of the task. |
completed | boolean Default: false A boolean indicating if this task is completed or not. |
locale | string The locale to use when interpreting number and date fields in the request. |
dateFormat | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
{- "clientId": 1,
- "summary": "Task for Kenneth",
- "assignedToUserId": 1,
- "statusId": 1,
- "priorityId": 1,
- "dueDate": "2021-07-21",
- "description": "Task for Kenneth to check new loan.",
- "completed": false,
- "locale": "en",
- "dateFormat": "yyyy-MM-dd"
}
{- "resourceId": 12
}
Find a task by id.
id required | integer <int64> Example: 1 The unique identifer of a task. |
{- "id": 4709,
- "assignedTo": "username",
- "assignedToUserId": 24,
- "assignedToDisplayName": "username",
- "createdBy": "username",
- "createdByUserId": 24,
- "createdByDisplayName": "username",
- "summary": "Loan abc, contact customer",
- "description": "Please follow the following checklist...",
- "clientId": 14,
- "client": "John Doe",
- "groupId": 1,
- "group": "Rural Group 1",
- "status": "Follow up",
- "priority": "P1",
- "createdOnDate": "Dec 15, 2020 12:00:00 AM",
- "dueDate": "Dec 19, 2020 12:00:00 AM",
- "completed": false,
- "deleted": false,
- "completedOnDate": "Dec 15, 2020 12:00:00 AM",
- "originChannel": "my-api-integration",
- "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
Any attribute of the Task model can be updated in isolation.
id required | integer <int64> Example: 1 The unique identifer of a task. |
Update existing Task
assignedToUserId | integer <int64> The id of the user in the platform that you wish to assign against this task. |
description | string A full description of the task. |
summary | string A summary of the tasks purpose. |
statusId | integer <int64> The status to create the task in |
priorityId | integer <int64> The priority to create the task in |
dueDate | string The date in ISO Date format that this task is due to be completed by. |
clientId | integer <int64> The id of the client on platform that this task is associated with. |
groupId | integer <int64> The id of the group on platform that this task is associated with. |
{- "assignedToUserId": 1,
- "description": "Task for Kenneth to check new loan.",
- "summary": "Task for Kenneth",
- "statusId": 1,
- "priorityId": 1,
- "dueDate": "2021-07-21",
- "clientId": 1,
- "groupId": 1
}
{- "resourceId": 1,
- "changes": { }
}
Deletion of tasks are soft and the record is retained but marked as deleted
.
id required | integer <int64> Example: 1 The unique identifer of a task. |
{- "resourceId": 1,
- "changes": { }
}
All state changing Non-CRUD behaviour related to Tasks are catered for through this path and the use of a query parameter named command
to determine which behaviour you wish to execute.
id required | integer <int64> Example: 1 The unique identifer of a task. |
command | string Enum: "taskcompleted" "undotaskcompletion" Example: command=taskcompleted The name of the command indicating which behaviour to perform on the resource. |
Completing a task moves it into a completed state and ensures required fields are populated.
Used when command
query parameter is set to taskcompleted
.
{ }
{- "resourceId": 1,
- "changes": { }
}
API for managing funds. Funds are used to categorize and track sources of money within the system.
fundId required | integer The unique identifier of the fund. |
name required | string The name of the fund. |
"EU Agri Fund"
{- "resourceId": 0
}
{- "selectedCurrencyOptions": [
- {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}
], - "currencyOptions": [
- {
- "code": "string",
- "name": "string",
- "decimalPlaces": 0,
- "nameCode": "string",
- "displayLabel": "string"
}
]
}
currencies | Array of strings An array of currency codes to be enabled. |
{- "currencies": [
- "KES",
- "BND",
- "LBP",
- "GHC",
- "USD",
- "XOF",
- "AED",
- "AMD"
]
}
{- "resourceId": 0
}
Represents the days of the week that are workdays and configuration around strategy to use if a repayment falls on a working day.
configuration related to workdays (see Global configurations):
reschedule-future-repayments
indicates how rescheduling of repayments should be processed when it falls on a non-working dayallow-transactions-on-non_workingday
allows transactions on non-working days if enabled[- {
- "id": 0,
- "recurrence": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR,SA,SU",
- "repaymentRescheduleType": {
- "id": 2,
- "code": "RepaymentRescheduleType.move.to.next.working.day",
- "value": "move to next working day"
}, - "extendTermForDailyRepayments": true,
- "extendTermForRepaymentsOnHolidays": false,
- "repaymentRescheduleOptions": [
- {
- "id": 1,
- "code": "RepaymentRescheduleType.same.day",
- "value": "same day"
}
]
}
]
recurrence | string A recurrence pattern describing what days of the week are to be considered work days that is compliant with https://icalendar.org/iCalendar-RFC-5545/ |
repaymentRescheduleType | integer The id of the repayment reschedule type to use. |
extendTermForDailyRepayments | boolean Extend the term for loans following a daily repayment schedule Results in using RepaymentRescheduleType.move.to.next.working.day if loan is daily. |
extendTermForRepaymentsOnHolidays | boolean Deprecated Not used |
{- "recurrence": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR,SA,SU",
- "repaymentRescheduleType": 2,
- "extendTermForDailyRepayments": true,
- "extendTermForRepaymentsOnHolidays": false
}
{- "resourceId": 0
}
This is a convenience resource. It can be useful when building maintenance user interface screens for working days.
{- "id": 0,
- "recurrence": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR,SA,SU",
- "repaymentRescheduleType": {
- "id": 2,
- "code": "RepaymentRescheduleType.move.to.next.working.day",
- "value": "move to next working day"
}, - "extendTermForDailyRepayments": true,
- "extendTermForRepaymentsOnHolidays": false,
- "repaymentRescheduleOptions": [
- {
- "id": 1,
- "code": "RepaymentRescheduleType.same.day",
- "value": "same day"
}
]
}
API for managing holidays within the Musoni system. Holidays can be defined for specific offices and can impact loan repayment schedules.
Key functionalities include:
Holidays play a crucial role in the loan module by influencing repayment dates. The system provides configuration options to manage how holidays affect transactions and repayment rescheduling.
officeId | integer The unique identifier of the office to filter holidays by. |
fromDate | string Default: null This parameter allows to filter search results for holidays whoose "from date" is greater than or equal to the supplied date. |
toDate | string Default: null This parameter allows to filter search results for holidays whoose "to date" is less than or equal to the supplied date. |
excludeHolidaysOfBranchOffices | boolean Default: false Example: excludeHolidaysOfBranchOffices=false when set to true, holidays of branch (child/sub) offices of the office specified by id (officeId) will be excluded. |
locale | string Default: null Example: locale=en Required if |
dateFormat | string Default: null Example: dateFormat=2023-01-01 Required if |
[- {
- "id": 0,
- "name": "string",
- "status": {
- "id": 300,
- "code": "holidayStatusType.active",
- "value": "Active"
}, - "description": "string",
- "fromDate": "2019-08-24",
- "toDate": "2019-08-24",
- "reschedulingType": 2,
- "repaymentsRescheduledTo": "2019-08-24",
- "officeId": 0,
- "office": "multiples",
- "officeAsString": "Office-Holiday-935td5,Office-Holiday-child-92nro",
- "offices": [
- {
- "id": 0,
- "name": "string",
- "processed": true,
- "processedOnDate": "2019-08-24"
}
]
}
]
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
name | string The name of the holiday. |
description | string A description of the holiday. |
fromDate | string <date> The start date of the holiday. |
toDate | string <date> The end date of the holiday. |
reschedulingType | integer A value indicate the type of rescheduling associated with the holiday |
repaymentsRescheduledTo | string <date> The date to which repayments are rescheduled due to the holiday. |
Array of objects |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "name": "string",
- "description": "string",
- "fromDate": "2019-08-24",
- "toDate": "2019-08-24",
- "reschedulingType": 2,
- "repaymentsRescheduledTo": "2019-08-24",
- "offices": [
- {
- "officeId": 0
}
]
}
{- "resourceId": 12
}
holidayId required | integer The unique identifier of the holiday. |
{- "id": 0,
- "name": "string",
- "status": {
- "id": 300,
- "code": "holidayStatusType.active",
- "value": "Active"
}, - "description": "string",
- "fromDate": "2019-08-24",
- "toDate": "2019-08-24",
- "reschedulingType": 2,
- "repaymentsRescheduledTo": "2019-08-24",
- "officeId": 0,
- "office": "multiples",
- "officeAsString": "Office-Holiday-935td5,Office-Holiday-child-92nro",
- "offices": [
- {
- "id": 0,
- "name": "string",
- "processed": true,
- "processedOnDate": "2019-08-24"
}
]
}
holidayId required | integer The unique identifier of the holiday. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
name | string The name of the holiday. |
description | string A description of the holiday. |
fromDate | string <date> The start date of the holiday. |
toDate | string <date> The end date of the holiday. |
reschedulingType | integer A value indicate the type of rescheduling associated with the holiday |
repaymentsRescheduledTo | string <date> The date to which repayments are rescheduled due to the holiday. |
Array of objects |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "name": "string",
- "description": "string",
- "fromDate": "2019-08-24",
- "toDate": "2019-08-24",
- "reschedulingType": 2,
- "repaymentsRescheduledTo": "2019-08-24",
- "offices": [
- {
- "officeId": 0
}
]
}
{- "resourceId": 0
}
Payment types are used to categorize how payments are made within the system (e.g., cash, mobile money, bank transfer).
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
[- {
- "id": 1,
- "name": "Cash",
- "description": "Physical cash payments",
- "isCashPayment": true,
- "position": 1
}
]
name required | string The name of the payment type. |
description | string A brief description of the payment type. |
isCashPayment required | boolean Indicates if this payment type is considered a cash payment. |
position | integer <int32> The display order of the payment type. Lower numbers appear first. |
{- "name": "Cash",
- "description": "Physical cash payments",
- "isCashPayment": true,
- "position": 1
}
{- "resourceId": 12
}
paymentTypeId required | integer <int64> |
{- "id": 1,
- "name": "Cash",
- "description": "Physical cash payments",
- "isCashPayment": true,
- "position": 1
}
paymentTypeId required | integer <int64> |
name | string The updated name of the payment type. |
description | string An updated brief description of the payment type. |
isCashPayment | boolean Updates whether this payment type is considered a cash payment. |
position | integer <int32> Updates the display order of the payment type. Lower numbers appear first. |
{- "name": "Mobile Money",
- "description": "Payments made via mobile money services",
- "isCashPayment": false,
- "position": 2
}
{- "resourceId": 1,
- "changes": { }
}
General ledger accounts (GL Accounts) represent an individual account within an organizations Chart Of Accounts (COA).
They are assigned a name and unique number by which they can be identified.
All transactions relating to a company's assets, liabilities, equity, income or expense are recorded against these accounts.
List all GL Accounts
type | integer Enum: 1 2 3 4 5 Example: type=1 This is a filter parameter. It limits the response to GL accounts whoose This parameter can be combined with any of filter parameters. |
searchParam | string Example: searchParam=1001 This is a filter parameter. It limits the response to GL accounts whoose This parameter can be combined with any of filter parameters. |
usage | integer Enum: 1 2 Example: usage=1 This is a filter parameter. It limits the response to GL accounts whoose This parameter can be combined with any of filter parameters. |
manualEntriesAllowed | boolean Example: manualEntriesAllowed=false This is a filter parameter. It limits the response to GL accounts whoose This parameter can be combined with any of filter parameters. |
disabled | boolean Example: disabled=false This is a filter parameter. It limits the response to GL accounts whoose This parameter can be combined with any of filter parameters. |
reconciliationEnabled | boolean Example: reconciliationEnabled=false This is a filter parameter. It limits the response to GL accounts whoose This parameter can be combined with any of filter parameters. |
fetchRunningBalance | boolean Example: fetchRunningBalance=false if true, the response will include an addtional field called |
fetchUnreconciledBalance | boolean Example: fetchUnreconciledBalance=false if true, the response will include an addtional field called |
[- {
- "id": 1,
- "officeId": 1,
- "officeName": "office-south",
- "closingDate": [
- 2000,
- 1,
- 1
], - "deleted": false,
- "createdDate": [
- 2000,
- 1,
- 1
], - "lastUpdatedDate": [
- 2000,
- 1,
- 1
], - "createdByUserId": 1,
- "createdByUsername": "musoni",
- "lastUpdatedByUserId": 1,
- "lastUpdatedByUsername": "musoni",
- "comments": "this is now closed",
- "incomeAndExpenseBookingTransactionId": "string"
}
]
The supported schmea when creating a new general ledger account (GL Account).
name required | string The name of the GL account |
glCode required | string The ledger code associated with the Account. These codes are mandatory and unique |
type required | integer Enum: 1 2 3 4 5 Classifies the account into one of the following Types: 1=Asset: represent the different types of economic resources owned or controlled by business, common examples of Asset accounts are cash, cash in bank, building, inventory, prepaid rent, goodwill, accounts receivable |
usage required | integer Enum: 1 2 Indicates if this ledger is a Header or Detail ledger account. 1=Detail: "Detail" accounts may have transactions logged against them |
manualEntriesAllowed required | boolean Indicates if manual entries can be made against this account using the Journals API. |
parentId | integer <integer64> To assign a another GL account as the parent of this GL account. |
disabled | boolean Default: false Indicates whether an account is disabled or not. |
reconciliationEnabled | boolean Default: false Indicates if reconcillation is allowed to be calculated for this account |
tagId | string A code value related to GL accounts used for tagging the account heads, based on GLAccount types. |
description | string Human understandable description for the general ledger account |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
{- "name": "Cash on Hand",
- "glCode": "ASS0001",
- "type": 1,
- "usage": 1,
- "manualEntriesAllowed": false,
- "parentId": null,
- "disabled": false,
- "reconciliationEnabled": false,
- "tagId": "SomeCodeValue",
- "description": "Some text explaining the GL account.",
- "externalId": "XGL-1-00-00-00"
}
{- "resourceId": 12
}
Find GL Account by id
id required | integer <int64> Example: 1 The unique identifer of a general ledger account (GL Account). |
[- {
- "id": 1,
- "officeId": 1,
- "officeName": "office-south",
- "closingDate": [
- 2000,
- 1,
- 1
], - "deleted": false,
- "createdDate": [
- 2000,
- 1,
- 1
], - "lastUpdatedDate": [
- 2000,
- 1,
- 1
], - "createdByUserId": 1,
- "createdByUsername": "musoni",
- "lastUpdatedByUserId": 1,
- "lastUpdatedByUsername": "musoni",
- "comments": "this is now closed",
- "incomeAndExpenseBookingTransactionId": "string"
}
]
A General Ledger Account can only be deleted if:
DETAIL
account with no transactions have been logged (either manually or by the portfolio products)Header
account with no child gl accountsid required | integer <int64> Example: 1 The unique identifer of a general ledger account (GL Account). |
{- "resourceId": 0
}
Update ...
id required | integer <int64> Example: 1 The unique identifer of a general ledger account (GL Account). |
Update exisitng GL account
name | string The name of the GL account |
glCode | string The ledger code associated with the Account. These codes are mandatory and unique |
type | integer Enum: 1 2 3 4 5 Classifies the account into one of the following Types: 1=Asset: represent the different types of economic resources owned or controlled by business, common examples of Asset accounts are cash, cash in bank, building, inventory, prepaid rent, goodwill, accounts receivable |
usage | integer Enum: 1 2 Indicates if this ledger is a Header or Detail ledger account. 1=Detail: "Detail" accounts may have transactions logged against them |
manualEntriesAllowed | boolean Indicates if manual entries can be made against this account using the Journals API. |
parentId | integer <integer64> To assign a another GL account as the parent of this GL account. |
disabled | boolean Default: false Indicates whether an account is disabled or not. |
reconciliationEnabled | boolean Default: false Indicates if reconcillation is allowed to be calculated for this account |
tagId | string A code value related to GL accounts used for tagging the account heads, based on GLAccount types. |
description | string Human understandable description for the general ledger account |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
{- "name": "Cash on hand",
- "glCode": "ASS0001",
- "type": 1,
- "usage": 1,
- "manualEntriesAllowed": false,
- "parentId": null,
- "disabled": false,
- "reconciliationEnabled": false,
- "tagId": "SomeCodeValue",
- "description": "Some text explaining the GL account.",
- "externalId": "XGL-1-00-00-00"
}
{- "resourceId": 1,
- "changes": { }
}
Financial activity accounts represent a mapping between financial activity and a general ledger account.
Financial activities are system-defined activities that require a corresponding GL Account for accounting purposes.
This mapping ensures that transactions related to a specific financial activity are correctly posted to the designated GL Account.
For example asset and liability transfers can be mapped to GL Account and then the accounting module takes these GL accounts into consideration when account transfers are made between loan and savings accounts.
Retrieves the list of all Financial Activity to GL Account mappings.
The response is a non-paged list of mappings.
[- {
- "id": 1,
- "financialActivityData": {
- "id": 100,
- "value": "AssetTransfer"
}, - "glAccountData": {
- "id": 101,
- "glCode": "100-20",
- "name": "Cash"
}, - "glAccountOptions": {
- "property1": [
- {
- "id": 1,
- "glCode": "100-01",
- "name": "Cash in Hand"
}
], - "property2": [
- {
- "id": 1,
- "glCode": "100-01",
- "name": "Cash in Hand"
}
]
}, - "financialActivityOptions": [
- {
- "id": 100,
- "value": "AssetTransfer"
}
]
}
]
Creates a new mapping between a Financial Activity and a GL Account.
Financial Activities are system-defined activities that require a corresponding GL Account for accounting purposes. This mapping ensures that transactions related to a specific financial activity are correctly posted to the designated GL Account.
Request body for creating a new Financial Activity Account mapping.
financialActivityId required | integer <int32> The unique identifier of the Financial Activity. |
glAccountId required | integer <int64> The unique identifier of the GL Account to map to the Financial Activity. |
{- "financialActivityId": 100,
- "glAccountId": 1
}
{- "resourceId": 12
}
Retrieves the details of a specific Financial Activity to GL Account mapping using the Financial Activity type enumeration.
financialActivityEnum required | integer <int32> Enum: 100 101 102 103 104 200 201 300 600 Example: 100 The Financial Activity type enumeration.
|
[- {
- "id": 1,
- "financialActivityData": {
- "id": 100,
- "value": "AssetTransfer"
}, - "glAccountData": {
- "id": 101,
- "glCode": "100-20",
- "name": "Cash"
}, - "glAccountOptions": {
- "property1": [
- {
- "id": 1,
- "glCode": "100-01",
- "name": "Cash in Hand"
}
], - "property2": [
- {
- "id": 1,
- "glCode": "100-01",
- "name": "Cash in Hand"
}
]
}, - "financialActivityOptions": [
- {
- "id": 100,
- "value": "AssetTransfer"
}
]
}
]
Accounting exports are custom defined export formats towards 3rd party accounting systems such as SQL Accounting, SUN6, Sage and others.
List all Accounting Exports
[- {
- "id": 1,
- "startJournalEntryId": 1,
- "lastJournalEntryId": 2,
- "exportFilename": "20220823114431.csv",
- "exportPath": "/GLBalanceExport/SQL_20220817165000.csv",
- "runDate": [
- 2000,
- 1,
- 1
], - "lastModifiedDate": [
- 2000,
- 1,
- 1
], - "numberOfEntries": 10,
}
]
Find Accounting Exports by id
id required | integer <int64> Example: 1 The unique identifer of an Accounting Export File. |
[- {
- "id": 1,
- "startJournalEntryId": 1,
- "lastJournalEntryId": 2,
- "exportFilename": "20220823114431.csv",
- "exportPath": "/GLBalanceExport/SQL_20220817165000.csv",
- "runDate": [
- 2000,
- 1,
- 1
], - "lastModifiedDate": [
- 2000,
- 1,
- 1
], - "numberOfEntries": 10,
}
]
Generate Dataexport for the Expoert Id
id required | integer <int64> Example: 1 The unique identifer of an Accounting Export File. |
{- "resourceId": 12
}
Regenerate file for the Expoert Id
id required | integer <int64> Example: 1 The unique identifer of an Accounting Export File. |
{- "resourceId": 12
}
Accounting closures are used to close the books for a specific office up to a certain date, preventing further transactions before that date.
List all GL Closures
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
[- {
- "id": 1,
- "officeId": 1,
- "officeName": "office-south",
- "closingDate": [
- 2000,
- 1,
- 1
], - "deleted": false,
- "createdDate": [
- 2000,
- 1,
- 1
], - "lastUpdatedDate": [
- 2000,
- 1,
- 1
], - "createdByUserId": 1,
- "createdByUsername": "musoni",
- "lastUpdatedByUserId": 1,
- "lastUpdatedByUsername": "musoni",
- "comments": "this is now closed",
- "incomeAndExpenseBookingTransactionId": "string"
}
]
name required | string The name of the GL account |
glCode required | string The ledger code associated with the Account. These codes are mandatory and unique |
type required | integer Enum: 1 2 3 4 5 Classifies the account into one of the following Types: 1=Asset: represent the different types of economic resources owned or controlled by business, common examples of Asset accounts are cash, cash in bank, building, inventory, prepaid rent, goodwill, accounts receivable |
usage required | integer Enum: 1 2 Indicates if this ledger is a Header or Detail ledger account. 1=Detail: "Detail" accounts may have transactions logged against them |
manualEntriesAllowed required | boolean Indicates if manual entries can be made against this account using the Journals API. |
parentId | integer <integer64> To assign a another GL account as the parent of this GL account. |
disabled | boolean Default: false Indicates whether an account is disabled or not. |
reconciliationEnabled | boolean Default: false Indicates if reconcillation is allowed to be calculated for this account |
tagId | string A code value related to GL accounts used for tagging the account heads, based on GLAccount types. |
description | string Human understandable description for the general ledger account |
externalId | string A place to put an external reference for this resource e.g. The ID another system uses for it. If provided, it must be unique. |
{- "name": "Cash on Hand",
- "glCode": "ASS0001",
- "type": 1,
- "usage": 1,
- "manualEntriesAllowed": false,
- "parentId": null,
- "disabled": false,
- "reconciliationEnabled": false,
- "tagId": "SomeCodeValue",
- "description": "Some text explaining the GL account.",
- "externalId": "XGL-1-00-00-00"
}
{- "resourceId": 12
}
id required | integer <int64> Example: 1 The unique identifer of the GL Closure resource. |
officeId | integer <int64> The ID of the office for the accounting closure. |
closingDate | string <date> The date of the accounting closure. |
comments | string Comments for the accounting closure. |
{- "officeId": 1,
- "closingDate": "2013-01-01",
- "comments": "Updated comments."
}
{- "resourceId": 1,
- "changes": { }
}
balanceDate required | string <date> The balance date for regenerating the movement file. |
locale | string The locale for date formatting. |
dateFormat | string The date format for the balance date. |
"string"
Retrieves journal entries with extensive filtering and pagination capabilities.
Journal entries represent double-entry bookkeeping transactions in the general ledger. Each entry records debits and credits to ensure balanced accounting.
Parameter Requirements:
officeId
or glAccountId
must be provided to filter the resultsKey Features:
User Notes:
officeId | integer <int64> Example: officeId=1 Filter journal entries by office/branch (required if glAccountId is not provided) |
glAccountId | integer <int64> Example: glAccountId=12 Filter journal entries by GL account (required if officeId is not provided) |
manualEntriesOnly | boolean Default: false Example: manualEntriesOnly=true Filter to show only manual journal entries (excludes auto-generated entries) |
fromDate | string Example: fromDate=01 January 2024 Start date for filtering journal entries (format depends on dateFormat parameter) |
toDate | string Example: toDate=31 January 2024 End date for filtering journal entries (format depends on dateFormat parameter) |
createdFromDate | string Example: createdFromDate=01 January 2024 Start date for filtering by creation date |
createdToDate | string Example: createdToDate=31 January 2024 End date for filtering by creation date |
transactionId | string Example: transactionId=TXN123456 Filter journal entries by transaction ID |
entityType | integer Example: entityType=3 Filter journal entries by entity type (1=Client, 2=Group, 3=Loan, 4=Savings, 5=Center, 6=Share) |
loanId | integer <int64> Example: loanId=1001 Filter journal entries by loan account ID |
savingsId | integer <int64> Example: savingsId=2001 Filter journal entries by savings account ID |
shareId | integer <int64> Example: shareId=3001 Filter journal entries by share account ID |
runningBalance | boolean Default: false Example: runningBalance=true Include running balance calculations in response |
transactionDetails | boolean Default: false Example: transactionDetails=true Include transaction details in response |
notes | boolean Default: false Example: notes=true Include notes/comments in response |
paymentDetails | boolean Default: false Example: paymentDetails=true Include payment details in response |
isReconciled | integer Enum: 0 1 Example: isReconciled=1 Filter by reconciliation status (0=Not reconciled, 1=Reconciled) |
refNumber | string Example: refNumber=REF123 Filter journal entries by reference number |
searchTerm | string Example: searchTerm=payment General search term for filtering journal entries |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
orderBy | string Example: orderBy=transactionDate Field to order results by |
sortOrder | string Default: "DESC" Enum: "ASC" "DESC" Example: sortOrder=DESC Sort order for results |
locale | string Default: "en" Example: locale=en Locale for formatting numbers and dates |
dateFormat | string Default: "dd MMMM yyyy" Example: dateFormat=dd MMMM yyyy Date format for parsing date parameters |
{- "totalFilteredRecords": 25,
- "pageItems": [
- {
- "id": 12345,
- "officeId": 1,
- "officeName": "Head Office",
- "glAccountName": "Cash",
- "glAccountId": 1,
- "glAccountCode": "11001",
- "glAccountType": {
- "id": 1,
- "code": "accountType.asset",
- "value": "ASSET"
}, - "transactionDate": [
- 2024,
- 1,
- 15
], - "entryType": {
- "id": 1,
- "code": "journalEntryType.debit",
- "value": "DEBIT"
}, - "amount": 1000,
- "currency": {
- "code": "USD",
- "name": "US Dollar",
- "decimalPlaces": 2,
- "nameCode": "currency.USD",
- "displayLabel": "US Dollar"
}, - "transactionId": "TXN123456",
- "manualEntry": false,
- "entityType": {
- "id": 3,
- "code": "entityType.loan",
- "value": "LOAN"
}, - "entityId": 1001,
- "createdByUserId": 1,
- "createdDate": [
- 2024,
- 1,
- 15
], - "createdByUserName": "system",
- "comments": "Loan disbursement",
- "reversed": false,
- "referenceNumber": "REF123",
- "officeRunningBalance": 25000,
- "organizationRunningBalance": 125000,
- "runningBalanceComputed": true,
- "isReconciled": false
}
]
}
Creates a new balanced journal entry in the general ledger.
Journal entries must follow double-entry bookkeeping principles where total debits equal total credits. The system will validate that the journal entry balances before accepting it.
Business Rules:
officeId required | integer <int64> ID of the office/branch where the entry should be posted |
transactionDate required | string Date of the transaction (format depends on dateFormat parameter) |
referenceNumber | string Reference number for the journal entry |
comments | string Comments or notes for the journal entry |
required | Array of objects non-empty Array of credit entries for the journal entry |
required | Array of objects non-empty Array of debit entries for the journal entry |
locale | string Default: "en" Locale for formatting numbers and dates |
dateFormat | string Default: "dd MMMM yyyy" Date format for parsing the transactionDate |
{- "officeId": 1,
- "transactionDate": "15 January 2024",
- "referenceNumber": "MAN001",
- "comments": "Manual adjustment entry",
- "credits": [
- {
- "glAccountId": 1,
- "amount": 500,
- "comments": "Credit to cash account"
}
], - "debits": [
- {
- "glAccountId": 15,
- "amount": 500,
- "comments": "Debit to expense account"
}
], - "locale": "en",
- "dateFormat": "dd MMMM yyyy"
}
{- "resourceId": 12
}
Retrieves a specific journal entry by its ID.
Returns detailed information about a single journal entry including transaction details, running balances, and associated metadata.
entryId required | string Example: 12345 The unique identifier of the journal entry |
runningBalance | boolean Default: false Example: runningBalance=true Include running balance calculations in response |
transactionDetails | boolean Default: false Example: transactionDetails=true Include transaction details in response |
{- "id": 12345,
- "officeId": 1,
- "officeName": "Head Office",
- "glAccountName": "Cash",
- "glAccountId": 1,
- "glAccountCode": "11001",
- "glAccountType": {
- "id": 1,
- "code": "accountType.asset",
- "value": "ASSET"
}, - "transactionDate": [
- 2024,
- 1,
- 15
], - "entryType": {
- "id": 1,
- "code": "journalEntryType.debit",
- "value": "DEBIT"
}, - "amount": 1000,
- "currency": {
- "code": "USD",
- "name": "US Dollar",
- "decimalPlaces": 2,
- "nameCode": "currency.USD",
- "displayLabel": "US Dollar"
}, - "transactionId": "TXN123456",
- "manualEntry": false,
- "entityType": {
- "id": 3,
- "code": "entityType.loan",
- "value": "LOAN"
}, - "entityId": 1001,
- "createdByUserId": 1,
- "createdDate": [
- 2024,
- 1,
- 15
], - "createdByUserName": "system",
- "comments": "Loan disbursement",
- "reversed": false,
- "referenceNumber": "REF123",
- "officeRunningBalance": 25000,
- "organizationRunningBalance": 125000,
- "runningBalanceComputed": true,
- "isReconciled": false,
- "transactionDetails": {
- "id": 1001,
- "paymentDetailData": {
- "paymentType": {
- "id": 1,
- "name": "Cash"
}, - "accountNumber": "ACC123",
- "checkNumber": "CHK456",
- "routingCode": "RTG789",
- "receiptNumber": "RCP101",
- "bankNumber": "BNK202"
}
}
}
Performs operations on journal entries including reversal and reconciliation.
Reverse Operation (command=reverse):
Reconcile Operation (command=reconcile):
entryId required | string Example: TXN123456 The transaction ID of the journal entry to process |
command required | string Enum: "reverse" "reconcile" Example: command=reverse Command to execute on the journal entry |
transactionDate required | string Date of the reversal transaction (format depends on dateFormat parameter). Must be equal to or after the original transaction date. |
comments | string Comments explaining the reason for the reversal |
locale | string Default: "en" Locale for formatting numbers and dates |
dateFormat | string Default: "dd MMMM yyyy" Date format for parsing the transactionDate |
{- "transactionDate": "20 January 2024",
- "comments": "Reversal of incorrect entry TXN123456",
- "locale": "en",
- "dateFormat": "dd MMMM yyyy"
}
{- "resourceId": 1,
- "changes": { }
}
It is a typical scenario in MFI's that non accountants pass journal entries on a regular basis. e.g A branch office might deposit their entire cash at hand to their Bank account at the end of a working day. The branch office users might not understand enough of accounting to figure out which account needs to get credited and which account needs to be debited to represent this transaction.
Enter accounting rules (known as Journal Templates on Musoni web ui), an abstraction on top of manual Journal entires for enabling simpler data entry.
An accounting rule can define any of the following abstractions:
Allows a user to search the existing accounting rules that are applicable to them.
Note: accounting rules returned are scoped by the users office hierarchy.
[- {
- "name": "AccRule-abcs8980",
- "description": "Temp rule for manual journal entry use case",
- "officeId": 1,
- "officeName": "Head Office",
- "currencyCode": "USD",
- "systemDefined": false,
- "allowMultipleDebitEntries": false,
- "allowMultipleCreditEntries": false,
- "allowSubBranchesVisibility": false,
- "creditAccounts": [
- {
- "id": 3700,
- "name": "Asset-fundSourceGLAccountId-kbucrz",
- "glCode": "1001-abc",
- "officeId": 1,
- "officeName": "Head Office"
}
], - "debitAccounts": [
- {
- "id": 3700,
- "name": "Asset-fundSourceGLAccountId-kbucrz",
- "glCode": "1001-abc",
- "officeId": 1,
- "officeName": "Head Office"
}
], - "code": {
- "id": 65,
- "name": "ClientRejectReason",
- "codeLabel": "ClientRejectReason",
- "systemDefined": true,
- "codeValues": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}
}
]
Creates a new accounting rule that can then be used for manual journal entries.
name required | string The unique name for this accounting rule |
description | string An optional description of the accounting rule |
currencyCode required | string The three letter code for the currency that will be associated with manual journal entries created from this rule |
officeId required | integer <integer64> The base office that this rule is applicable to. see |
allowSubBranchesVisibility required | boolean if |
allowMultipleDebitEntries | boolean Default: false Indicates if multiple debit entries are allowed |
allowMultipleCreditEntries | boolean Default: false Indicates if multiple credit entries are allowed |
required | Array of objects An array mappings for credit to debit gl accounts with offices |
journalEntryTags | Array of integers <integer64> [ items <integer64 > ] An array code ids that can be associated with manual journal entries created from this accounting rule template |
{- "name": "AccRule-abcs8980",
- "description": "Temp rule for manual journal entry use case",
- "currencyCode": "USD",
- "officeId": 1,
- "allowSubBranchesVisibility": false,
- "allowMultipleDebitEntries": false,
- "allowMultipleCreditEntries": false,
- "accountingRuleMapping": [
- {
- "creditOfficeId": 1,
- "accountToCredit": 3700,
- "debitOfficeId": 1,
- "accountToDebit": 3300
}
], - "journalEntryTags": [
- 1
]
}
{- "resourceId": 12
}
Finds an existing accounting rule by id
id required | string Example: 1 The unique identifier of the accounting rule |
{- "name": "AccRule-abcs8980",
- "description": "Temp rule for manual journal entry use case",
- "officeId": 1,
- "officeName": "Head Office",
- "currencyCode": "USD",
- "systemDefined": false,
- "allowMultipleDebitEntries": false,
- "allowMultipleCreditEntries": false,
- "allowSubBranchesVisibility": false,
- "creditAccounts": [
- {
- "id": 3700,
- "name": "Asset-fundSourceGLAccountId-kbucrz",
- "glCode": "1001-abc",
- "officeId": 1,
- "officeName": "Head Office"
}
], - "debitAccounts": [
- {
- "id": 3700,
- "name": "Asset-fundSourceGLAccountId-kbucrz",
- "glCode": "1001-abc",
- "officeId": 1,
- "officeName": "Head Office"
}
], - "code": {
- "id": 65,
- "name": "ClientRejectReason",
- "codeLabel": "ClientRejectReason",
- "systemDefined": true,
- "codeValues": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}
}
Update an existing accounting rule
id required | string Example: 1 The unique identifier of the accounting rule |
name required | string The unique name for this accounting rule |
description | string An optional description of the accounting rule |
currencyCode required | string The three letter code for the currency that will be associated with manual journal entries created from this rule |
officeId required | integer <integer64> The base office that this rule is applicable to. see |
allowSubBranchesVisibility required | boolean if |
allowMultipleDebitEntries | boolean Default: false Indicates if multiple debit entries are allowed |
allowMultipleCreditEntries | boolean Default: false Indicates if multiple credit entries are allowed |
required | Array of objects An array mappings for credit to debit gl accounts with offices |
journalEntryTags | Array of integers <integer64> [ items <integer64 > ] An array code ids that can be associated with manual journal entries created from this accounting rule template |
{- "name": "AccRule-abcs8980",
- "description": "Temp rule for manual journal entry use case",
- "currencyCode": "USD",
- "officeId": 1,
- "allowSubBranchesVisibility": false,
- "allowMultipleDebitEntries": false,
- "allowMultipleCreditEntries": false,
- "accountingRuleMapping": [
- {
- "creditOfficeId": 1,
- "accountToCredit": 3700,
- "debitOfficeId": 1,
- "accountToDebit": 3300
}
], - "journalEntryTags": [
- 1
]
}
{- "resourceId": 1,
- "changes": { }
}
Deletes the entry
id required | string Example: 1 The unique identifier of the accounting rule |
{ }
{- "commandId": 1,
- "resourceId": 1
}
Periodic Accrual is to accrue the loan income till the specific date or till batch job scheduled time.
Runs the accounting accruals job based on paramters passed
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
tillDate required | string Run accruals up until this date |
loanId | integer <integer64> The accruals will only be run for this loan instead of all loans if ommitted |
prepaid | boolean if set to true, then accruals are run as if a premature closure of loan(s) |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "tillDate": "01 July 2007",
- "loanId": 52,
- "prepaid": false
}
{- "resourceId": 12
}
Batch API calls are used to group together API calls in one request, creating hierarchy, passing on paramaters and with (optional) rollback capabilities if any of the nested calls fails.
Batching allows a consumer to pass instructions for several operations in a single HTTP request. A consumer can also specify dependencies between related operations. Once all operations have been completed, a consolidated response will be passed back and the HTTP connection will be closed.
The Batch API takes in an array of logical HTTP requests represented as JSON arrays - each request has a requestId (the id of a request used to specify the sequence and as a dependency between requests), a method (corresponding to HTTP method GET/PUT/POST/DELETE etc.), a relativeUrl (the portion of the URL after https://example.org/api/v2/), optional headers array (corresponding to HTTP headers), optional reference parameter if a request is dependent on another request and an optional body (for POST and PUT requests). The Batch API returns an array of logical HTTP responses represented as JSON arrays - each response has a requestId, a status code, an optional headers array and an optional body (which is a JSON encoded string).
Batch API uses Json Path to handle dependent parameters. For example, if request '2' is referencing request '1' and in the "body" or in "relativeUrl" of request '2', there is a dependent parameter (which will look like "$.parameter_name"), then Batch API will internally substitute this dependent parameter from the response body of request '1'.
Batch calls are currently supported for the following API calls:
NB: If any API call where batching is preferred is missing from this list, please report this to the Musoni Service Desk.
enclosingTransaction | boolean Default: false Whether to enclose the transaction as one and therefore rollback on failure or not |
requestId | integer Relative request ordering, requests will be executed in this order and output paramaters from previous requests (eg entityId or loanId) will be available in subsequent calls. |
relativeUrl | string Relative URL to the API to call in this request, including any URL params (?command=repayment) |
method | string Enum: "POST" "PUT" "DELETE" The HTTP Verb for the request |
headers | Array of arrays Specifying additional headers, such as content type etc. |
body | string Escaped JSON command to be passed |
[- {
- "requestId": 1,
- "relativeUrl": "clients",
- "method": "POST",
- "headers": "Optional array of HTTP Headers",
- "body": "\" {\n\\\"officeId\\\": 1,\n\\\"firstname\\\": \\\"Petra\\\",\n\\\"lastname\\\": \\\"Yton\\\",\n\\\"externalId\\\": \\\"externalId_4\\\",\n\\\"dateFormat\\\": \\\"dd MMMM yyyy\\\",\n\\\"locale\\\": \\\"en\\\", \\\"active\\\": true,\n\\\"activationDate\\\": \\\"04 March 2009\\\",\n\\\"submittedOnDate\\\": \\\"04 March 2009\\\"\n}\"\n"
}
]
{- "resourceId": 12
}
The Data Filter API supports the ability to produce filtered views of a modelled entity (Metadata Model).
These filtered views are highly customisable through rules expression support, multi-sort and ability to define the fields included in response.
The filter definition can then be saved and executed on demand.
See The Metadata API for listing of models supported.
List all Data Filters across all metadata models (metadataModelType
).
This API scopes the response based on the user making the request and returns only filters where the user is the owner.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Lists all Data Filters by metadata model type.
This API scopes the response based on the user making the request and returns only filters where the user is the owner.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
This API supports creation of new filters.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
name required | string [ 1 .. 100 ] characters The name of the filter |
description | string A description to provide users with more information about the filter. |
required | object (DataFilterRulesExpression) A valid filter rule expression as generated by QueryBuilder |
required | Array of objects (DataFilterResponseParameter) |
Array of objects (DataFilterSortByParameter) |
{- "name": "All Loans Pending",
- "description": "This filter shows all loans that are pending approval and also are above $1,000.",
- "filterRulesExpression": {
- "condition": "AND",
- "rules": [
- {
- "id": "officeId",
- "field": "officeId",
- "type": "integer",
- "input": "select",
- "operator": "equal",
- "value": 1
}
]
}, - "responseParameters": [
- {
- "ordinal": 0,
- "name": "accountNo"
}
], - "sortByParameters": [
- {
- "ordinal": 0,
- "name": "accountNo",
- "direction": "ASC"
}
]
}
{- "resourceId": 12
}
Executes the data filter and returns the response.
The response returned is dynamic and based upon the metadataModelType
and responseParameters
provided in the API request.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
required | object (DataFilterRulesExpression) A valid filter rule expression as generated by QueryBuilder |
required | Array of objects (DataFilterResponseParameter) |
Array of objects (DataFilterSortByParameter) |
{- "filterRulesExpression": {
- "condition": "AND",
- "rules": [
- {
- "id": "officeId",
- "field": "officeId",
- "type": "integer",
- "input": "select",
- "operator": "equal",
- "value": 1
}
]
}, - "responseParameters": [
- {
- "ordinal": 0,
- "name": "accountNo"
}
], - "sortByParameters": [
- {
- "ordinal": 0,
- "name": "accountNo",
- "direction": "ASC"
}
]
}
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Find a Data Filter by id
Returns all the details of the Data Filter. The user making the request must also be the filter owner.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
id required | integer <int64> Example: 1 The unique identifer of a Data Filter. |
{- "id": 4709,
- "name": "Branch Office X - All loans in arrears",
- "description": "This filter shows all loans belonging to branch office X that are in arrears.",
- "owner": {
- "id": 1,
- "username": "branchuser@org.com",
- "firstname": "John",
- "lastname": "Smith"
}, - "metadataModelType": {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}, - "filterRulesExpression": {
- "condition": "AND",
- "rules": [
- {
- "id": "officeId",
- "field": "officeId",
- "type": "integer",
- "input": "select",
- "operator": "equal",
- "value": 1
}
]
}, - "responseParameters": [
- {
- "ordinal": 0,
- "name": "accountNo"
}
], - "sortByParameters": [
- {
- "ordinal": 0,
- "name": "accountNo",
- "direction": "ASC"
}
], - "auditData": {
- "createdOnTimestamp": 1634149191,
- "createdByUsername": "Sys Admin",
- "lastModifiedOnTimestamp": 1634149191,
- "lastModifiedByUsername": "Sys Admin"
}
}
Any attribute of the Data Filter can be updated in isolation.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
id required | integer <int64> Example: 1 The unique identifer of a Data Filter. |
name | string [ 1 .. 100 ] characters The name of the filter |
description | string A description to provide users with more information about the filter. |
object (DataFilterRulesExpression) A valid filter rule expression as generated by QueryBuilder | |
Array of objects (DataFilterResponseParameter) | |
Array of objects (DataFilterSortByParameter) |
{- "name": "All Loans Pending",
- "description": "This filter shows all loans that are pending approval and also are above $1,000.",
- "filterRulesExpression": {
- "condition": "AND",
- "rules": [
- {
- "id": "officeId",
- "field": "officeId",
- "type": "integer",
- "input": "select",
- "operator": "equal",
- "value": 1
}
]
}, - "responseParameters": [
- {
- "ordinal": 0,
- "name": "accountNo"
}
], - "sortByParameters": [
- {
- "ordinal": 0,
- "name": "accountNo",
- "direction": "ASC"
}
]
}
{- "resourceId": 1,
- "changes": { }
}
A user may only delete data filters where they are the owner
. The deletion is hard and not recoverable by the end user.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
id required | integer <int64> Example: 1 The unique identifer of a Data Filter. |
{- "resourceId": 112
}
Executes the data filter and returns the response.
The response returned is dynamic and based upon the metadataModelType
and responseParameters
of the saved filter.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
id required | integer <int64> Example: 1 The unique identifer of a Data Filter. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
{- "totalFilteredRecords": 52,
- "pageItems": [
- { },
- { }
]
}
Data Exports are used to generate exports of data from tables linked to a specified base entity
List all Data Exports
[- {
- "id": 4709,
- "name": "Loan Data Export",
- "baseEntityName": "loan",
- "userRequestMap": {
- "name": "Loan Data Export",
- "baseEntityName": "loan",
- "filters": { },
- "datatables": [ ],
- "columns": [
- "account_no",
- "total_overdue_derived"
]
}, - "filename": "Loan_Data_Export_20211213091716",
- "fileDownloadCount": 1,
- "timeline": {
- "createdOnDate": [
- 2000,
- 1,
- 1
], - "createdByUsername": "musoni",
- "createdByFirstname": "musoni",
- "createdByLastname": "musoni",
- "modifiedOnDate": [
- 2000,
- 1,
- 1
], - "modifiedByUsername": "musoni",
- "modifiedByFirstname": "musoni",
- "modifiedByLastname": "musoni"
}, - "editable": true
}
]
The supported schema for creating data exports.
name
, baseEntityName
are required. locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
name required | string [ 1 .. 100 ] characters The name of the Data Export |
baseEntityName required | string Enum: "loan" "client" "group" "savings_account" "loan_transaction" "savings_account_transaction" "loan_repayment_schedule" "group_loan_member_allocation" "share_account" "standing_instruction" "loan_charge" "savings_account_charge" "share_account_charge" "journal_entry" "client_transfer" "mobile_money" "office" "task" "savings_product" "product_loan" "share_account_dividend" "share_account_transaction" The identifier of the base entity for the Data Export |
object (DataFilterRulesExpression) A valid filter rule expression as generated by QueryBuilder | |
datatables | Array of strings An array datatable names to be included in the data export. |
columns | Array of strings[ items [ 1 .. 200 ] characters ] The name of the fields to be selected for the data export |
version required | string Value: "v2" The identifier of the version of the Data Export implementation. Only "v2" is currently supported. |
{- "name": "End of Month Account Report",
- "baseEntityName": "loan",
- "filters": {
- "condition": "AND",
- "rules": [
- {
- "id": "officeId",
- "field": "officeId",
- "type": "integer",
- "input": "select",
- "operator": "equal",
- "value": 1
}
]
}, - "datatables": [
- "ml_loan_details"
], - "columns": [
- "account_no"
], - "version": "v2"
}
{- "resourceId": 12
}
Retrieves a Data Export entity by id
id required | integer <int64> Example: 1 The unique identifer of a data export. |
{- "id": 4709,
- "name": "Loan Data Export",
- "baseEntityName": "loan",
- "userRequestMap": {
- "name": "Loan Data Export",
- "baseEntityName": "loan",
- "filters": { },
- "datatables": [ ],
- "columns": [
- "account_no",
- "total_overdue_derived"
]
}, - "filename": "Loan_Data_Export_20211213091716",
- "fileDownloadCount": 1,
- "timeline": {
- "createdOnDate": [
- 2000,
- 1,
- 1
], - "createdByUsername": "musoni",
- "createdByFirstname": "musoni",
- "createdByLastname": "musoni",
- "modifiedOnDate": [
- 2000,
- 1,
- 1
], - "modifiedByUsername": "musoni",
- "modifiedByFirstname": "musoni",
- "modifiedByLastname": "musoni"
}, - "editable": true
}
The supported schema for data export updates. name
, baseEntityName
, filters
, datatables
, columns
and version
can be updated in isolation or together.
locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
id required | integer <int64> Example: 1 The unique identifer of a data export. |
Update exisitng data export
name | string [ 1 .. 100 ] characters The name of the Data Export |
baseEntityName | string Enum: "loan" "client" "group" "savings_account" "loan_transaction" "savings_account_transaction" "loan_repayment_schedule" "group_loan_member_allocation" "share_account" "standing_instruction" "loan_charge" "savings_account_charge" "share_account_charge" "journal_entry" "client_transfer" "mobile_money" "office" "task" "savings_product" "product_loan" "share_account_dividend" "share_account_transaction" The identifier of the base entity for the Data Export |
object (DataFilterRulesExpression) A valid filter rule expression as generated by QueryBuilder | |
datatables | Array of strings An array datatable names to be included in the data export. |
columns | Array of strings[ items [ 1 .. 200 ] characters ] The name of the fields to be selected for the data export |
version | string Value: "v2" The identifier of the version of the Data Export implementation. Only "v2" is currently supported. |
{- "name": "End of Month Account Report",
- "baseEntityName": "loan",
- "filters": {
- "condition": "AND",
- "rules": [
- {
- "id": "officeId",
- "field": "officeId",
- "type": "integer",
- "input": "select",
- "operator": "equal",
- "value": 1
}
]
}, - "datatables": [
- "ml_loan_details"
], - "columns": [
- "account_no"
], - "version": "v2"
}
{- "resourceId": 1,
- "changes": { }
}
Deletes an existing Data Export entity
id required | integer <int64> Example: 1 The unique identifer of a data export. |
{- "resourceId": 1,
- "changes": { }
}
Partially updates the CSV configuration for an existing DataExport entity.
Only the csvConfig
section is expected in this PATCH request.
id required | integer <int64> ID of the DataExport resource to update |
JSON payload containing the CSV configuration to patch
locale | string |
object |
{- "locale": "en",
- "csvConfig": {
- "includeHeaders": true,
- "delimiter": 1,
- "quotePolicy": 2
}
}
{- "resourceId": 123,
- "changes": {
- "csvConfig.includeHeaders": true,
- "csvConfig.delimiter": 2,
- "csvConfig.quotePolicy": 3
}
}
This is a convenience api.
It can be useful when building maintenance user interface screens for data export creation/update.
It returns fields with default values and dropdown list values.
baseEntityName required | string Enum: "loan" "client" "group" "savings_account" "loan_transaction" "savings_account_transaction" "loan_repayment_schedule" "group_loan_member_allocation" "share_account" "standing_instruction" "loan_charge" "savings_account_charge" "share_account_charge" "journal_entry" "client_transfer" "mobile_money" "office" "task" "savings_product" "product_loan" "share_account_dividend" "share_account_transaction" Example: loan An enum that describes the metadata model that is to be associated with the data export. |
{- "entityName": "loan",
- "tableName": "m_loan",
- "datatables": [
- {
- "applicationTableName": "m_loan",
- "registeredTableName": "ml_loan_details",
- "category": 176,
- "displayName": "Loan Details",
- "systemDefined": true
}
], - "columns": [
- {
- "name": "account_no",
- "label": "account no",
- "type": "VARCHAR",
- "isNullable": true
}
], - "csvConfig": {
- "delimiterOptions": [
- {
- "id": 1,
- "code": "DataExportCsvDelimiter.COMMA",
- "value": "Comma (,)"
}, - {
- "id": 2,
- "code": "DataExportCsvDelimiter.SEMICOLON",
- "value": "Semicolon (;)"
}, - {
- "id": 3,
- "code": "DataExportCsvDelimiter.TAB",
- "value": "Tab"
}, - {
- "id": 4,
- "code": "DataExportCsvDelimiter.PIPE",
- "value": "Pipe (|)"
}, - {
- "id": 5,
- "code": "DataExportCsvDelimiter.SPACE",
- "value": "Space"
}
], - "quotePolicyOptions": [
- {
- "id": 1,
- "code": "DataExportCsvQuotePolicy.ALWAYS",
- "value": "Always use double quotes"
}, - {
- "id": 2,
- "code": "DataExportCsvQuotePolicy.NEVER",
- "value": "Never use double quotes"
}, - {
- "id": 3,
- "code": "DataExportCsvQuotePolicy.AS_NEEDED",
- "value": "Use double quotes when needed"
}
], - "includeHeadersOptions": [
- {
- "id": 1,
- "code": "boolean.true",
- "value": true
}, - {
- "id": 0,
- "code": "boolean.false",
- "value": false
}
]
}
}
Downloads Data Export file in specified file format.
id required | integer <int64> Example: 1 The unique identifer of a data export. |
fileFormat required | string Enum: "csv" "xls" "xml" Example: fileFormat=csv The format of the file to be generated for the Data Export |
{ "response": { "value": "{file}" } }
Adds request to generate a data export file to a processing queue.
exportId required | string The id of the data export whose file needs to be generated |
fileFormat required | string Enum: "csv" "xls" "pdf" Example: fileFormat=csv Expected output of the file to be generated |
{ "response": { "value": 1 } }
Retrieves a Data Export Queue by id
id required | integer <int64> Example: 1 The unique identifer of a data export. |
{- "preparedDataExportId": 4709,
- "exportId": 345,
- "name": "Loan Data Export",
- "createOn": "12-01-2022 10:14:20",
- "finishedOn": "12-01-2022 10:15:20",
- "status": "IN_PROGRESS",
- "exportType": "PDF",
- "expiredOn": "19-01-2022 10:14:20",
- "daysBeforeExpiration": 7,
- "documentId": 500,
- "createdByUsername": "musoni",
- "baseEntity": "loan",
- "runType": "manual",
- "scheduledDataExportId": 200
}
Document templates (a.k.a User Generated Documents) can be used to generate customised documents as loan contracts, repayment schedules etc.
Document templates use Mustache templates with various handlebars helper extensions to allow more advanced operations.
Supports ability to search and list document templates
entityId | integer <int32> Default: -1 Restrict response to templates associated with provided entity categorisation:
Note: |
typeId | integer <int32> Default: -1 Restrict response to templates associated with provided document type categorisation:
Note: |
showSystemDefined | any <int32> Default: false Restrict response to templates marked as system defined or not. Note: |
[- {
- "id": 1,
- "name": "Loan Contract",
- "entity": "client",
- "type": "document",
- "text": "<h1>Loan Schedule</h1>\r\n{{#or (eq loan.status.value \"Submitted and pending approval\") (eq loan.status.value \"Approved\")}}\r\n",
- "mappers": [
- {
- "id": 0,
- "mapperOrder": 1,
- "mapperKey": "loan",
- "mapperValue": "loans/{{loanId}}?tenantIdentifier={{tenantIdentifier}}&associations=repaymentSchedule"
}
], - "paperSize": "A4",
- "isSystemDefined": false
}
]
Creates a new document template
name required | string [ 1 .. 100 ] characters The name of the template |
entity required | integer <int32> A categorisation type for the template based on core entity types in the system:
|
type required | integer <int32> A categorisation type for the template based on usage type:
|
paperSize required | integer <int32> A enumeration type for the template to indicate page size / orientation for template rendering:
|
isSystemDefined required | boolean Indicates if this template is system defined or not |
text required | string A mustache compatible text/markdown |
required | Array of objects An array of mapper details which are APIs that can be trigger to provide content to the template |
{- "name": "loan-template",
- "entity": 1,
- "type": 0,
- "paperSize": 1,
- "isSystemDefined": false,
- "text": "Client name: {{loan.clientName}}",
- "mappers": [
- {
- "mappersorder": 0,
- "mapperskey": "loan",
- "mappersvalue": "loans/{{loanId}}?tenantIdentifier={{tenantIdentifier}}&associations=repaymentSchedule&isRaw=true"
}
]
}
{- "resourceId": 12
}
Find a document template by id.
id required | integer <int64> Example: 1 The unique identifer of a document template. |
{- "id": 1,
- "name": "Loan Contract",
- "entity": "client",
- "type": "document",
- "text": "<h1>Loan Schedule</h1>\r\n{{#or (eq loan.status.value \"Submitted and pending approval\") (eq loan.status.value \"Approved\")}}\r\n",
- "mappers": [
- {
- "id": 0,
- "mapperOrder": 1,
- "mapperKey": "loan",
- "mapperValue": "loans/{{loanId}}?tenantIdentifier={{tenantIdentifier}}&associations=repaymentSchedule"
}
], - "paperSize": "A4",
- "isSystemDefined": false
}
Allows update of document template details
id required | integer <int64> Example: 1 The unique identifer of a document template. |
name required | string [ 1 .. 100 ] characters The name of the template |
entity required | integer <int32> A categorisation type for the template based on core entity types in the system:
|
type required | integer <int32> A categorisation type for the template based on usage type:
|
paperSize required | integer <int32> A enumeration type for the template to indicate page size / orientation for template rendering:
|
isSystemDefined required | boolean Indicates if this template is system defined or not |
text required | string A mustache compatible text/markdown |
required | Array of objects An array of mapper details which are APIs that can be trigger to provide content to the template |
{- "name": "loan-template",
- "entity": 1,
- "type": 0,
- "paperSize": 1,
- "isSystemDefined": false,
- "text": "Client name: {{loan.clientName}}",
- "mappers": [
- {
- "mappersorder": 0,
- "mapperskey": "loan",
- "mappersvalue": "loans/{{loanId}}?tenantIdentifier={{tenantIdentifier}}&associations=repaymentSchedule&isRaw=true"
}
]
}
{- "resourceId": 1,
- "changes": { }
}
Executes the template mapper APIs and uses this content to render the template provided updating the template markers where found in scope of API responses.
id required | integer <int64> Example: 1 The unique identifer of a document template. |
locale required | string The locale to use when interpreting number and date fields in the request. |
dateFormat required | string The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
clientId required | integer A valid id for a customer. |
tenantIdentifier | string <= 30 characters The identifier of the tenant running the template. |
tenantUrl | string <= 30 characters The external FQDN of the customers environment, used for referring to logo's etc. |
{- "locale": "en",
- "dateFormat": "dd MMMM yyyy",
- "clientId": "1",
- "tenantIdentifier": "demo",
}
{ "response": { "value": "<html><head>...</head><body>...</body></html>" } }
Allows deletion of a document template
id required | integer <int64> Example: 1 The unique identifer of a document template. |
{ }
{- "commandId": 1,
- "resourceId": 1
}
Lists all resources that have hypermedia support for REST.
{- "totalFilteredRecords": 4,
- "pageItems": [
- {
- "resource": "tasks",
- "permitted": true,
- "hypermediaApi": {
- "name": "findHypermediaByResourceName",
- "method": "GET",
- "href": "/hypermedia/resources/tasks",
- "permitted": true
}
}
]
}
Find resource by name returning the full hypermedia describing resource.
resourceName required | string Example: tasks The name of a resource on the platform that supports hypermedia |
{- "resource": "tasks",
- "permitted": true,
- "hypermediaApi": {
- "name": "string",
- "method": "GET",
- "href": "/hypermedia/{resources|apis}/{name}",
- "permitted": true
}, - "commands": [
- {
- "name": "tasks",
- "resource": "tasks",
- "collection": true,
- "command": true,
- "query": false,
- "method": "POST",
- "href": "/tasks",
- "permitted": true,
- "hypermediaApi": {
- "name": "string",
- "method": "GET",
- "href": "/hypermedia/{resources|apis}/{name}",
- "permitted": true
}, - "pathParameters": [
- {
- "name": "id",
- "dataType": "integer",
- "required": true
}
], - "queryParameters": [
- {
- "name": "offset",
- "value": "command-name",
- "dataType": "integer",
- "required": false,
- "usage": "paging",
- "lookupApi": {
- "name": "lookupByRelationshipName",
- "method": "GET",
- "href": "/lookups/relationships/task-assigned-to-user",
- "queryParameters": [
- {
- "name": "offset",
- "dataType": "integer",
- "required": false,
- "usage": "paging"
}
]
}
}
], - "requestParameters": [
- {
- "name": "offset",
- "dataType": "integer",
- "required": false,
- "minLength": 0,
- "maxLength": 100,
- "lookupApi": {
- "name": "lookupByRelationshipName",
- "method": "GET",
- "href": "/lookups/relationships/task-assigned-to-user",
- "queryParameters": [
- {
- "name": "offset",
- "dataType": "integer",
- "required": false,
- "usage": "paging"
}
]
}
}
]
}
], - "queries": [
- {
- "name": "tasks",
- "resource": "tasks",
- "collection": true,
- "command": true,
- "query": false,
- "method": "POST",
- "href": "/tasks",
- "permitted": true,
- "hypermediaApi": {
- "name": "string",
- "method": "GET",
- "href": "/hypermedia/{resources|apis}/{name}",
- "permitted": true
}, - "pathParameters": [
- {
- "name": "id",
- "dataType": "integer",
- "required": true
}
], - "queryParameters": [
- {
- "name": "offset",
- "value": "command-name",
- "dataType": "integer",
- "required": false,
- "usage": "paging",
- "lookupApi": {
- "name": "lookupByRelationshipName",
- "method": "GET",
- "href": "/lookups/relationships/task-assigned-to-user",
- "queryParameters": [
- {
- "name": "offset",
- "dataType": "integer",
- "required": false,
- "usage": "paging"
}
]
}
}
], - "requestParameters": [
- {
- "name": "offset",
- "dataType": "integer",
- "required": false,
- "minLength": 0,
- "maxLength": 100,
- "lookupApi": {
- "name": "lookupByRelationshipName",
- "method": "GET",
- "href": "/lookups/relationships/task-assigned-to-user",
- "queryParameters": [
- {
- "name": "offset",
- "dataType": "integer",
- "required": false,
- "usage": "paging"
}
]
}
}
]
}
]
}
Lists all APIs that have hypermedia support for REST.
{- "totalFilteredRecords": 4,
- "pageItems": [
- {
- "name": "createNewTask",
- "resource": "tasks",
- "collection": true,
- "command": true,
- "query": false,
- "method": "POST",
- "href": "/tasks",
- "permitted": true,
- "hypermediaApi": {
- "name": "findHypermediaByApiName",
- "method": "GET",
- "href": "/hypermedia/apis/createNewTask",
- "permitted": true
}
}
]
}
Find one API by name.
apiName required | string Example: createNewTask The name of a api on the platform that supports hypermedia |
{- "totalFilteredRecords": 4,
- "pageItems": [
- {
- "name": "createNewTask",
- "resource": "tasks",
- "collection": true,
- "command": true,
- "query": false,
- "method": "POST",
- "href": "/tasks",
- "permitted": true,
- "hypermediaApi": {
- "name": "findHypermediaByApiName",
- "method": "GET",
- "href": "/hypermedia/apis/createNewTask",
- "permitted": true
}
}
]
}
This API returns the metadata for the groups
model.
Application developers can use this to help buid forms and components.
{- "metadata": {
- "type": "object",
- "resource": "groups",
- "description": "The map of supported properties.",
- "properties": {
- "id": {
- "type": "integer",
- "resource": "groups"
}, - "accountNo": {
- "type": "integer",
- "resource": "groups"
}, - "externalId": {
- "type": "integer",
- "resource": "groups"
}, - "status": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "name": {
- "type": "integer",
- "resource": "groups"
}, - "submittedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "submittedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "submittedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "activationOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "activatedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "activatedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "closureDate": {
- "type": "integer",
- "resource": "groups"
}, - "closureByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "closureByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "closureReasonId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "closureReasonValue": {
- "type": "integer",
- "resource": "groups"
}, - "officeId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "officeName": {
- "type": "integer",
- "resource": "groups"
}, - "staffId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "staffName": {
- "type": "integer",
- "resource": "groups"
}
}
}
}
This API returns the metadata for the loans
model.
Application developers can use this to help buid forms and components.
{- "metadata": {
- "type": "object",
- "resource": "loans",
- "description": "The map of supported properties.",
- "properties": {
- "id": {
- "type": "integer",
- "resource": "groups"
}, - "accountNo": {
- "type": "integer",
- "resource": "groups"
}, - "externalId": {
- "type": "integer",
- "resource": "groups"
}, - "loanType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "loanPurposeId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "loanPurposeValue": {
- "type": "integer",
- "resource": "groups"
}, - "status": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "subStatus": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "subStatusId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "subStatusValue": {
- "type": "integer",
- "resource": "groups"
}, - "originChannel": {
- "type": "integer",
- "resource": "groups"
}, - "officeId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "officeName": {
- "type": "integer",
- "resource": "groups"
}, - "loanProductId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "loanProductName": {
- "type": "integer",
- "resource": "groups"
}, - "productGroupId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "productGroupName": {
- "type": "integer",
- "resource": "groups"
}, - "clientId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "clientAccountNo": {
- "type": "integer",
- "resource": "groups"
}, - "clientName": {
- "type": "integer",
- "resource": "groups"
}, - "clientExternalId": {
- "type": "integer",
- "resource": "groups"
}, - "clientGenderId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "clientGenderValue": {
- "type": "integer",
- "resource": "groups"
}, - "clientMobileNo": {
- "type": "integer",
- "resource": "groups"
}, - "clientDateOfBirth": {
- "type": "integer",
- "resource": "groups"
}, - "groupId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "groupAccountNo": {
- "type": "integer",
- "resource": "groups"
}, - "groupName": {
- "type": "integer",
- "resource": "groups"
}, - "groupExternalId": {
- "type": "integer",
- "resource": "groups"
}, - "fundId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "fundName": {
- "type": "integer",
- "resource": "groups"
}, - "loanOfficerId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "loanOfficerName": {
- "type": "integer",
- "resource": "groups"
}, - "transactionStrategyId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "transactionStrategyName": {
- "type": "integer",
- "resource": "groups"
}, - "currencyCode": {
- "type": "integer",
- "resource": "groups"
}, - "currencyDigitsAfterDecimal": {
- "type": "integer",
- "resource": "groups"
}, - "currencyInMultiplesOf": {
- "type": "integer",
- "resource": "groups"
}, - "proposedPrincipal": {
- "type": "integer",
- "resource": "groups"
}, - "principal": {
- "type": "integer",
- "resource": "groups"
}, - "approvedPrincipal": {
- "type": "integer",
- "resource": "groups"
}, - "loanTermFrequency": {
- "type": "integer",
- "resource": "groups"
}, - "loanTermFrequencyType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "numberOfRepayments": {
- "type": "integer",
- "resource": "groups"
}, - "currentNumberOfRepayments": {
- "type": "integer",
- "resource": "groups"
}, - "repaymentEvery": {
- "type": "integer",
- "resource": "groups"
}, - "repaymentFrequencyType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "interestRatePerPeriod": {
- "type": "integer",
- "resource": "groups"
}, - "interestRateFrequencyType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "annualInterestRate": {
- "type": "integer",
- "resource": "groups"
}, - "effectiveInterestRate": {
- "type": "integer",
- "resource": "groups"
}, - "interestType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "amortizationType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "interestCalculationPeriodType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "daysInMonthType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "daysInYearType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "repaymentsStartingFromDate": {
- "type": "integer",
- "resource": "groups"
}, - "interestChargedFromDate": {
- "type": "integer",
- "resource": "groups"
}, - "graceOnPrincipalPayment": {
- "type": "integer",
- "resource": "groups"
}, - "recurringMoratoriumOnPrincipalPeriods": {
- "type": "integer",
- "resource": "groups"
}, - "graceOnInterestPayment": {
- "type": "integer",
- "resource": "groups"
}, - "graceOnInterestCharged": {
- "type": "integer",
- "resource": "groups"
}, - "graceOnArrearsAgeing": {
- "type": "integer",
- "resource": "groups"
}, - "fixedEmiAmount": {
- "type": "integer",
- "resource": "groups"
}, - "maxOutstandingLoanBalance": {
- "type": "integer",
- "resource": "groups"
}, - "repayPrincipalEvery": {
- "type": "integer",
- "resource": "groups"
}, - "repayInterestEvery": {
- "type": "integer",
- "resource": "groups"
}, - "isInterestRecalculationEnabled": {
- "type": "integer",
- "resource": "groups"
}, - "interestRecalcualatedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "allowPartialPeriodInterestCalcualtion": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "isInDuplum": {
- "type": "integer",
- "resource": "groups"
}, - "syncDisbursementWithMeeting": {
- "type": "integer",
- "resource": "groups"
}, - "createStandingInstructionAtDisbursement": {
- "type": "integer",
- "resource": "groups"
}, - "isTopup": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "isNPA": {
- "type": "integer",
- "resource": "groups"
}, - "isSuspendedIncome": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "isKeepAccruingAfterWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "accrueUntilDate": {
- "type": "integer",
- "resource": "groups"
}, - "compoundType": {
- "type": "integer",
- "resource": "groups"
}, - "rescheduleStrategy": {
- "type": "integer",
- "resource": "groups"
}, - "restFrequencyEnum": {
- "type": "integer",
- "resource": "groups"
}, - "restFrequencyInterval": {
- "type": "integer",
- "resource": "groups"
}, - "restFrequencyNthDayEnum": {
- "type": "integer",
- "resource": "groups"
}, - "restFrequencyWeekDayEnum": {
- "type": "integer",
- "resource": "groups"
}, - "restFrequencyOnDay": {
- "type": "integer",
- "resource": "groups"
}, - "compoundingFrequencyEnum": {
- "type": "integer",
- "resource": "groups"
}, - "compoundingInterval": {
- "type": "integer",
- "resource": "groups"
}, - "compoundingFrequencyNthDayEnum": {
- "type": "integer",
- "resource": "groups"
}, - "compoundingFrequencyWeekDayEnum": {
- "type": "integer",
- "resource": "groups"
}, - "isCompoundingToBePostedAsTransaction": {
- "type": "integer",
- "resource": "groups"
}, - "allowCompoundingOnEod": {
- "type": "integer",
- "resource": "groups"
}, - "restrictSavingsProductId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "mandatorySavingsMethod": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "mandatorySavingsPercentage": {
- "type": "integer",
- "resource": "groups"
}, - "loanCounter": {
- "type": "integer",
- "resource": "groups"
}, - "loanProductCounter": {
- "type": "integer",
- "resource": "groups"
}, - "internalRateOfReturn": {
- "type": "integer",
- "resource": "groups"
}, - "guaranteeAmount": {
- "type": "integer",
- "resource": "groups"
}, - "principalDisbursed": {
- "type": "integer",
- "resource": "groups"
}, - "principalPaid": {
- "type": "integer",
- "resource": "groups"
}, - "principalWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "principalOutstanding": {
- "type": "integer",
- "resource": "groups"
}, - "interestCharged": {
- "type": "integer",
- "resource": "groups"
}, - "interestPaid": {
- "type": "integer",
- "resource": "groups"
}, - "interestWaived": {
- "type": "integer",
- "resource": "groups"
}, - "interestWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "interestOutstanding": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesCharged": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesDueAtDisbursementCharged": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesPaid": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesWaived": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesOutstanding": {
- "type": "integer",
- "resource": "groups"
}, - "penaltyChargesCharged": {
- "type": "integer",
- "resource": "groups"
}, - "penaltyChargesPaid": {
- "type": "integer",
- "resource": "groups"
}, - "penaltyChargesWaived": {
- "type": "integer",
- "resource": "groups"
}, - "penaltyChargesWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "penaltyChargesOutstanding": {
- "type": "integer",
- "resource": "groups"
}, - "totalExpectedRepayment": {
- "type": "integer",
- "resource": "groups"
}, - "totalRepayment": {
- "type": "integer",
- "resource": "groups"
}, - "totalExpectedCostOfLoan": {
- "type": "integer",
- "resource": "groups"
}, - "totalCostOfLoan": {
- "type": "integer",
- "resource": "groups"
}, - "totalWaived": {
- "type": "integer",
- "resource": "groups"
}, - "totalWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "totalRecovered": {
- "type": "integer",
- "resource": "groups"
}, - "totalOutstanding": {
- "type": "integer",
- "resource": "groups"
}, - "totalOverpaid": {
- "type": "integer",
- "resource": "groups"
}, - "principalOverdue": {
- "type": "integer",
- "resource": "groups"
}, - "interestOverdue": {
- "type": "integer",
- "resource": "groups"
}, - "feeChargesOverdue": {
- "type": "integer",
- "resource": "groups"
}, - "penaltyChargesOverdue": {
- "type": "integer",
- "resource": "groups"
}, - "totalOverdue": {
- "type": "integer",
- "resource": "groups"
}, - "overdueSinceDate": {
- "type": "integer",
- "resource": "groups"
}, - "daysInArrears": {
- "type": "integer",
- "resource": "groups"
}, - "submittedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "submittedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "submittedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "approvedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "approvedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "approvedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "expectedDisbursementDate": {
- "type": "integer",
- "resource": "groups"
}, - "actualDisbursementDate": {
- "type": "integer",
- "resource": "groups"
}, - "disbursedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "disbursedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "expectedMaturityOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "actualMaturityOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "closedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "closedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "closedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "rescheduledOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "rescheduledByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "rescheduledByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "restructuredAndProvisioned": {
- "type": "integer",
- "resource": "groups"
}, - "rejectedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "rejectedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "rejectedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "withdrawnOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "withdrawnByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "withdrawnByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "writtenOffOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "writeOffReasonId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "writeOffReasonValue": {
- "type": "integer",
- "resource": "groups"
}, - "createdByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "createdByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "createdOnTimestamp": {
- "type": "integer",
- "resource": "groups"
}, - "lastModifiedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "lastModifiedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "lastModifiedOnTimestamp": {
- "type": "integer",
- "resource": "groups"
}
}
}
}
This API returns the metadata for the savingsaccounts
model.
Application developers can use this to help buid forms and components.
{- "metadata": {
- "type": "object",
- "resource": "loans",
- "description": "The map of supported properties.",
- "properties": {
- "id": {
- "type": "integer",
- "resource": "groups"
}, - "accountNo": {
- "type": "integer",
- "resource": "groups"
}, - "externalId": {
- "type": "integer",
- "resource": "groups"
}, - "status": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "subStatus": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "accountType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "depositType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "officeId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "officeName": {
- "type": "integer",
- "resource": "groups"
}, - "savingsProductId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "savingsProductName": {
- "type": "integer",
- "resource": "groups"
}, - "clientId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "clientAccountNo": {
- "type": "integer",
- "resource": "groups"
}, - "clientName": {
- "type": "integer",
- "resource": "groups"
}, - "clientExternalId": {
- "type": "integer",
- "resource": "groups"
}, - "clientGenderId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "clientGenderValue": {
- "type": "integer",
- "resource": "groups"
}, - "clientMobileNo": {
- "type": "integer",
- "resource": "groups"
}, - "clientDateOfBirth": {
- "type": "integer",
- "resource": "groups"
}, - "groupId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "groupAccountNo": {
- "type": "integer",
- "resource": "groups"
}, - "groupName": {
- "type": "integer",
- "resource": "groups"
}, - "groupExternalId": {
- "type": "integer",
- "resource": "groups"
}, - "fieldOfficerId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "fieldOfficerName": {
- "type": "integer",
- "resource": "groups"
}, - "taxGroupId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "taxGroupName": {
- "type": "integer",
- "resource": "groups"
}, - "currencyCode": {
- "type": "integer",
- "resource": "groups"
}, - "currencyDigitsAfterDecimal": {
- "type": "integer",
- "resource": "groups"
}, - "currencyInMultiplesOf": {
- "type": "integer",
- "resource": "groups"
}, - "nominalAnnualInterestRate": {
- "type": "integer",
- "resource": "groups"
}, - "interestCompoundingPeriodType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "interestPostingPeriodType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "interestCalculationType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "interestCalculationDaysInYearType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "lockinPeriodFrequency": {
- "type": "integer",
- "resource": "groups"
}, - "lockinPeriodFrequencyType": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "withdrawalFeeForTransfers": {
- "type": "integer",
- "resource": "groups"
}, - "allowOverdraft": {
- "type": "integer",
- "resource": "groups"
}, - "overdraftLimit": {
- "type": "integer",
- "resource": "groups"
}, - "nominalAnnualInterestRateOverdraft": {
- "type": "integer",
- "resource": "groups"
}, - "minOverdraftForInterestCalculation": {
- "type": "integer",
- "resource": "groups"
}, - "minRequiredBalance": {
- "type": "integer",
- "resource": "groups"
}, - "minBalanceForInterestCalculation": {
- "type": "integer",
- "resource": "groups"
}, - "enforceMinRequiredBalance": {
- "type": "integer",
- "resource": "groups"
}, - "isAutoRenewOnClosure": {
- "type": "integer",
- "resource": "groups"
}, - "withHoldTax": {
- "type": "integer",
- "resource": "groups"
}, - "calculateInterestDuringDormancy": {
- "type": "integer",
- "resource": "groups"
}, - "startInterestCalculationDate": {
- "type": "integer",
- "resource": "groups"
}, - "lastInterestCalculationDate": {
- "type": "integer",
- "resource": "groups"
}, - "lastQuarterlyCalculationDate": {
- "type": "integer",
- "resource": "groups"
}, - "lastActivityDate": {
- "type": "integer",
- "resource": "groups"
}, - "lockinPeriodUntilDateDerived": {
- "type": "integer",
- "resource": "groups"
}, - "totalDeposits": {
- "type": "integer",
- "resource": "groups"
}, - "totalWithdrawals": {
- "type": "integer",
- "resource": "groups"
}, - "totalWithdrawalFees": {
- "type": "integer",
- "resource": "groups"
}, - "totalFeeCharge": {
- "type": "integer",
- "resource": "groups"
}, - "totalPenaltyCharge": {
- "type": "integer",
- "resource": "groups"
}, - "totalAnnualFees": {
- "type": "integer",
- "resource": "groups"
}, - "totalQuarterlyFeesOwed": {
- "type": "integer",
- "resource": "groups"
}, - "totalQuarterlyFees": {
- "type": "integer",
- "resource": "groups"
}, - "totalInterestEarned": {
- "type": "integer",
- "resource": "groups"
}, - "totalInterestPosted": {
- "type": "integer",
- "resource": "groups"
}, - "totalOverdraftInterestDerived": {
- "type": "integer",
- "resource": "groups"
}, - "totalWithholdTax": {
- "type": "integer",
- "resource": "groups"
}, - "totalWrittenOff": {
- "type": "integer",
- "resource": "groups"
}, - "accountBalance": {
- "type": "integer",
- "resource": "groups"
}, - "onHoldFunds": {
- "type": "integer",
- "resource": "groups"
}, - "submittedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "submittedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "submittedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "approvedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "approvedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "approvedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "rejectedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "rejectedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "rejectedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "withdrawnOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "withdrawnByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "withdrawnByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "activatedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "activatedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "activatedByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "closedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "closedByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "closedByUsername": {
- "type": "integer",
- "resource": "groups"
}
}
}
}
This API returns the metadata for the tasks
model.
Application developers can use this to help buid forms and components.
{- "metadata": {
- "type": "object",
- "resource": "tasks",
- "description": "The map of supported properties.",
- "properties": {
- "id": {
- "type": "integer",
- "resource": "groups"
}, - "summary": {
- "type": "integer",
- "resource": "groups"
}, - "description": {
- "type": "integer",
- "resource": "groups"
}, - "dueDate": {
- "type": "integer",
- "resource": "groups"
}, - "completedOnDate": {
- "type": "integer",
- "resource": "groups"
}, - "completed": {
- "type": "integer",
- "resource": "groups"
}, - "statusId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "statusValue": {
- "type": "integer",
- "resource": "groups"
}, - "priorityId": {
- "type": "integer",
- "resource": "codevalues",
- "optionsType": "codevalues-fixed-list",
- "codeName": "GroupClosureReason",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
}, - "priorityValue": {
- "type": "integer",
- "resource": "groups"
}, - "assignedToUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "assignedToUsername": {
- "type": "integer",
- "resource": "groups"
}, - "clientId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "clientAccountNo": {
- "type": "integer",
- "resource": "groups"
}, - "clientName": {
- "type": "integer",
- "resource": "groups"
}, - "clientExternalId": {
- "type": "integer",
- "resource": "groups"
}, - "groupId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "groupAccountNo": {
- "type": "integer",
- "resource": "groups"
}, - "groupName": {
- "type": "integer",
- "resource": "groups"
}, - "groupExternalId": {
- "type": "integer",
- "resource": "groups"
}, - "createdByUserId": {
- "type": "integer",
- "resource": "groups",
- "optionsType": "association-fixed-list",
- "options": [
- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
], - "lookups": {
- "href": "/lookups/groups/parameters/submittedByUserId",
- "rel": "lookup",
- "type": "GET",
- "queryParams": [
- {
- "name": "limit",
- "type": "integer"
}, - {
- "name": "offset",
- "type": "integer"
}, - {
- "name": "searchTerm",
- "type": "string",
- "minLength": 0
}
]
}
}, - "createdByUsername": {
- "type": "integer",
- "resource": "groups"
}, - "createdOnTimestamp": {
- "type": "integer",
- "resource": "groups"
}
}
}
}
Lists all the lookup options that are available for the specified metadataModelType
and apiParameterName
.
metadataModelType required | string Enum: "clients" "groups" "loans" "savingsaccounts" "shares" "audits" Example: groups An enum that describes the metadata model that is to be associated with the filter. |
apiParameterName required | string Example: apiParameterName The name of an parameter on a metadata model. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
searchTerm | string Example: searchTerm=ack When provided the lookup is restricted to to entries that match the search term provided. |
{- "totalFilteredRecords": 200,
- "pageItems": [
- {
- "value": "1",
- "displayValue": "Head Office",
- "displayValueCode": null
}, - {
- "value": "3",
- "displayValue": "New_Office_PZE1",
- "displayValueCode": null
}
]
}
Lists all the lookup options that are available for the specified relationship
.
relationshipName required | string Example: relationshipName The name of a relationsip. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
searchTerm | string Example: searchTerm=ack When provided the lookup is restricted to to entries that match the search term provided. |
{- "totalFilteredRecords": 200,
- "pageItems": [
- {
- "value": "1",
- "displayValue": "Head Office",
- "displayValueCode": null
}, - {
- "value": "3",
- "displayValue": "New_Office_PZE1",
- "displayValueCode": null
}
]
}
Search API allows scoped search across portfolio resources suchs as clients, groups, loans and savings.
Search API allows scoped search across portfolio resources:
It searches key fields of each resource for search term provided.
Client:
Group:
Client Identifiers:
Loan:
query required | string The search term to be searched for across scoped resources. |
resource | string Enum: "clients" "clientidentifiers" "groups" "loans" "savings" "ftd" "shares" Scoped resources on which search can be performed. If there is no resource parameter passed then search will be performed on all scoped resources. Resources can be combined through a comma seperated list to include multiple resources e.g |
exactMatch | boolean Default: false Example: exactMatch=false If there is no exactMatch parameter passed or set to false, then search will perform partial match search across scoped resources. If set to true will only return exactly matching results. Useful when searching a specific accountId or client phonenumber. |
limit | integer Default: 500 Limits the number of search results returned. If not set defaults to 500 results. |
[- {
- "entityId": 123,
- "entityAccountNo": 1,
- "entityType": "SAVING",
- "entityName": "Loan Product Account Savings-7h0x",
- "parentId": 24,
- "parentName": "Jane Doe",
- "parentType": "Client",
- "officeId": 1,
- "officeName": "Head office",
- "entityStatus": 200
}
]
Hooks are a mechanism to trigger custom code on the occurence of events.
Each template during hook creation represents custom behaviour on what actions should be taken on the triggering of a registered event for a hook. The action taken might be firing a HTTP request to another server or execute internal code.
In order for Musoni to send webhook payloads, your server needs to be accessible from the Internet. Musoni will send along a few HTTP headers to differentiate between event types as well as a basic payload received from the event that triggered the hook.
__ Webhooks are fire and forget, the system will not retry webhooks and will also abandon any attempt to send if the receiving party is not responding within 5s __
X-Musoni-Entity - The entity type that was triggered. X-Musoni-Action - The action triggered on the entity type. X-Musoni-Platform-TenantId - The tenant which experienced the event. X-Musoni-HMAC-Signature - If type is secured webhook, the HMAC Signature will be provided here.
HMac Signatures can be validated using the following sample Javascript code:
// Includes crypto module
const crypto = require('crypto');
// Defining key
const secret = '<your secret>';
const payloadString = JSON.stringify(<The JSON Body of the request>);
// Calling createHmac method
const hash = crypto.createHmac('sha256', secret)
// updating data
.update(JSON.stringify(payloadString))
// Encoding to be used
.digest('hex');
// Displays output
console.log(hash);
Returns the list of hooks.
[- {
- "id": 0,
- "name": "string",
- "displayName": "string",
- "isActive": true,
- "createdAt": [
- 0
], - "updatedAt": [
- 0
], - "templateName": "string",
- "events": [
- {
- "actionName": "string",
- "entityName": "string"
}
], - "config": [
- {
- "fieldName": "string",
- "fieldValue": "string"
}
]
}
]
The following parameters can be passed for the creation of a hook :
name - string - Required. The name of the template that is being called. (See /hooks/template for the list of valid hook names.)
isActive - boolean - Determines whether the hook is actually triggered.
events - array - Determines what events the hook is triggered for.
config - hash - Required. Key/value pairs to provide settings for this hook. These settings vary between the templates.
name required | string |
isActive required | boolean |
displayName required | string |
templateId | integer |
required | Array of objects |
required | object |
{- "example1": {
- "value": {
- "name": "Web",
- "isActive": true,
- "displayName": "My Webhook",
- "events": [
- {
- "actionName": "DISBURSE",
- "entityName": "LOAN"
}, - {
- "actionName": "REPAYMENT",
- "entityName": "LOAN"
}
],
}
}, - "example2": {
- "value": {
- "name": "Web - Secured with HMAC",
- "isActive": true,
- "displayName": "My Secure Webhook",
- "events": [
- {
- "actionName": "DISBURSE",
- "entityName": "LOAN"
}, - {
- "actionName": "REPAYMENT",
- "entityName": "LOAN"
}
], - "config": {
- "Content Type": "application/json",
- "HMAC Secret": "mySecret",
- "HMAC Algorithm": "HmacSHA256"
}
}
}
}
{- "resourceId": 12
}
Update webhook
id required | integer Example: 4 |
name | string |
isActive | boolean |
displayName | string |
Array of objects | |
object |
{- "name": "string",
- "isActive": true,
- "displayName": "string",
- "events": [
- {
- "actionName": "string",
- "entityName": "string"
}
], - "config": {
- "Payload URL": "string",
- "Content Type": "string"
}
}
{- "resourceId": 1,
- "changes": { }
}
This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of: Field Defaults Allowed Value Lists
{- "templates": [
- {
- "name": "string",
- "schema": [
- {
- "fieldName": "string",
- "fieldType": "string",
- "optional": true,
- "placeholder": "string"
}
]
}
], - "groupings": [
- {
- "name": "string",
- "entities": [
- {
- "name": "string",
- "actions": [
- "string"
]
}
]
}
]
}
Fetch SMS messages from the API. The fetched messages can be sent to a third-party SMS provider using the provided Python script.
The following Python script demonstrates how to fetch SMS messages from this API and send them to a third-party SMS provider:
import requests
import json
from time import sleep
from datetime import datetime
# Define your Infobip API credentials and endpoints
INFOBIP_API_BASE_URL = "http://exqq2.api.infobip.com/"
INFOBIP_API_KEY = "your_infobip_api_key"
SENDER = "your_sender_id"
SLEEP_INTERVAL = 10 # seconds to wait before checking status
# Define your Musoni API endpoint
MUSONI_API_URL = "musoni_api_base_url/api/v1/sms"
MUSONI_API_KEY = "your_musoni_api_key"
PAGE_SIZE = 10 # Number of records per page
def retrieve_messages(musoni_api_url, musoni_api_key, offset=0, limit=PAGE_SIZE):
headers = {
"Authorization": f"Bearer {musoni_api_key}",
"Accept": "application/json",
"X-Fineract-Platform-TenantId": ""
}
params = {
"offset": offset,
"limit": limit,
"paged": true
}
response = requests.get(musoni_api_url, headers=headers, params=params, verify=False) # Disable SSL verification
if response.status_code == 200:
return response.json() # Return JSON response
else:
raise Exception(f"Failed to retrieve messages: {response.status_code} {response.text}")
def send_sms(api_key, sender, recipient, message_text):
url = f"{INFOBIP_API_BASE_URL}/sms/2/text/advanced"
headers = {
"Authorization": f"App {api_key}",
"Content-Type": "application/json",
"Accept": "application/json"
}
payload = {
"messages": [
{
"from": sender,
"destinations": [
{"to": recipient}
],
"text": message_text
}
]
}
response = requests.post(url, headers=headers, data=json.dumps(payload), verify=False) # Disable SSL verification
if response.status_code == 200:
response_data = response.json()
message_id = response_data['messages'][0]['messageId']
return message_id
else:
raise Exception(f"Failed to send SMS: {response.status_code} {response.text}")
def check_sms_status(api_key, message_id):
url = f"{INFOBIP_API_BASE_URL}/sms/1/reports"
headers = {
"Authorization": f"App {api_key}",
"Content-Type": "application/json",
"Accept": "application/json"
}
params = {
"messageId": message_id
}
response = requests.get(url, headers=headers, params=params, verify=False) # Disable SSL verification
if response.status_code == 200:
response_data = response.json()
return response_data['results'][0]['status']['groupName']
else:
raise Exception(f"Failed to check SMS status: {response.status_code} {response.text}")
def update_message_status(musoni_api_url, musoni_api_key, musoni_message_id, infobip_message_id, status_code, status_value):
url = f"{musoni_api_url}/{musoni_message_id}"
headers = {
"Authorization": f"Bearer {musoni_api_key}",
"Content-Type": "application/json",
"Accept": "application/json",
"X-Fineract-Platform-TenantId": ""
}
status = 400
if status_code == "DELIVERED":
status = 300
elif status_code == "PENDING":
status = 200
payload = {
"status": status,
"externalId": infobip_message_id
}
if status_code == "PENDING":
payload["sentOnDate"] = datetime.now().date().isoformat()
response = requests.put(url, headers=headers, data=json.dumps(payload), verify=False) # Disable SSL verification
if response.status_code == 200:
print(f"Message ID {musoni_message_id} status updated successfully.")
else:
raise Exception(f"Failed to update message status: {response.status_code} {response.text}")
def format_number_with_country_code(phone_number):
if not phone_number.startswith("+31"):
return "+31" + phone_number.lstrip("0")
return phone_number
def main():
try:
offset = 0
while True:
# Retrieve a page of messages from the Musoni API
response_data = retrieve_messages(MUSONI_API_URL, MUSONI_API_KEY, offset)
print(f"Messages retrieved successfully for offset {offset}.")
# Extract messages from the response
messages = response_data.get('pageItems', [])
if not messages:
break # No more messages to process
for message in messages:
musoni_message_id = message['id']
recipient = format_number_with_country_code(message['mobileNo'])
message_text = message['message']
# Send SMS message
infobip_message_id = send_sms(INFOBIP_API_KEY, SENDER, recipient, message_text)
print(f"Message sent successfully. Infobip Message ID: {infobip_message_id}")
# Check SMS status
while True:
status = check_sms_status(INFOBIP_API_KEY, infobip_message_id)
print(f"Current status for Infobip Message ID {infobip_message_id}: {status}")
if status in ["DELIVERED", "UNDELIVERABLE", "EXPIRED", "REJECTED"]:
# Update the status on the Musoni system
update_message_status(MUSONI_API_URL, MUSONI_API_KEY, musoni_message_id, infobip_message_id, "smsMessageStatusType.delivered", status)
break
sleep(SLEEP_INTERVAL)
# Increment offset to retrieve the next page
offset += PAGE_SIZE
except Exception as e:
print(str(e))
if __name__ == "__main__":
main()
Replace musoni_api_base_url
with the Musoni API base URL of your environment and http://exqq2.api.infobip.com/
with the third-party SMS provider's endpoint.
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
orderBy | string Enum: "id" "external_id" "group_id" "client_id" "staff_id" "status_enum" "campaign_name" "submittedon_date" "senton_date" The database field name that you wish to order the list of SMS messages by. |
sortOrder | string Enum: "ASC" "DESC" Used with |
fromDate | string Example: fromDate=2020-01-01 Allows to only return a subset of SMS messages based on sent date if message marked as sent, else submitted date, should be provided in format "yyyy-MM-dd" |
toDate | string Example: toDate=2021-01-01 Allows to only return a subset of SMS messages based on sent date if message marked as sent, else submitted date, should be provided in format "yyyy-MM-dd" |
paged | boolean Example: paged=true If set to true, a paged response will be returned cotaining "totalFilteredRecords" and "pageItems" properties |
maskMessage | boolean Example: maskMessage=true If set to true, sensitive SMS message content/text marked as masked will be returned unmasked |
[- {
- "id": 500,
- "externalId": 2034070510160109000,
- "groupId": 1,
- "clientId": 1,
- "staffId": 1,
- "status": {
- "id": 300,
- "code": "smsMessageStatusType.delivered",
- "value": "DELIVERED"
}, - "sourceAddress": "MUSONI",
- "mobileNo": 712345678,
- "message": "Dear customer, your loan instalment is due today. Greetings, Musoni.",
- "campaignName": "Repayment Reminder.",
- "sentDate": [
- 2000,
- 1,
- 1
], - "numberOfSegments": 0,
- "maskMessage": true,
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "dataCoding": {
- "id": 0,
- "code": "ALPHA_DEFAULT",
- "value": "alpha_default"
}
}
]
Create new SMS Message.
groupId required | integer <int64> Identifier for the group associated with the SMS |
staffId | integer <int64> Identifier for the staff associated with the SMS |
clientId | integer <int64> Identifier for the client associated with the SMS |
message required | string Content of the SMS message |
{- "groupId": 0,
- "staffId": 0,
- "clientId": 0,
- "message": "string"
}
{- "resourceId": 12
}
Returns a paginated list of SMS messages. Filters include message status, date range.
status
is 200 (sent), then fromDate
and toDate
refer to the message's sent date.fromDate
and toDate
refer to the date the message was added.locale | string Example: locale=en The locale to use when interpreting number and date fields in the request. |
dateFormat | string Example: dateFormat=dd MMMM yyyy The date format to use when interpreting date fields in the request. Must be suported by Joda Time. |
limit | integer >= 1 Default: 200 Example: limit=10 Maximum number of results to return. |
offset | integer >= 0 Default: 0 Example: offset=0 Number of results to skip. |
status | integer Enum: 100 200 300 400 Example: status=100 Status of the SMS message:
|
fromDate | string <date> Example: fromDate=2020-01-01 Start date for filtering messages. If status = 200, filters by sent date. Otherwise, by added date. (date format = yyyy-MM-dd) |
toDate | string <date> Example: toDate=2020-01-01 End date for filtering messages. If status = 200, filters by sent date. Otherwise, by added date. (date format = yyyy-MM-dd) |
[- {
- "id": 500,
- "externalId": 2034070510160109000,
- "groupId": 1,
- "clientId": 1,
- "staffId": 1,
- "status": {
- "id": 300,
- "code": "smsMessageStatusType.delivered",
- "value": "DELIVERED"
}, - "sourceAddress": "MUSONI",
- "mobileNo": 712345678,
- "message": "Dear customer, your loan instalment is due today. Greetings, Musoni.",
- "campaignName": "Repayment Reminder.",
- "sentDate": [
- 2000,
- 1,
- 1
], - "numberOfSegments": 0,
- "maskMessage": true,
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "dataCoding": {
- "id": 0,
- "code": "ALPHA_DEFAULT",
- "value": "alpha_default"
}
}
]
Find an SMS message by id
id required | integer <int64> Example: 1 The unique identifer of an SMS message. |
[- {
- "id": 500,
- "externalId": 2034070510160109000,
- "groupId": 1,
- "clientId": 1,
- "staffId": 1,
- "status": {
- "id": 300,
- "code": "smsMessageStatusType.delivered",
- "value": "DELIVERED"
}, - "sourceAddress": "MUSONI",
- "mobileNo": 712345678,
- "message": "Dear customer, your loan instalment is due today. Greetings, Musoni.",
- "campaignName": "Repayment Reminder.",
- "sentDate": [
- 2000,
- 1,
- 1
], - "numberOfSegments": 0,
- "maskMessage": true,
- "submittedOnDate": [
- 2000,
- 1,
- 1
], - "dataCoding": {
- "id": 0,
- "code": "ALPHA_DEFAULT",
- "value": "alpha_default"
}
}
]
The supported schema for SMS message updates. status
, externalId
, submittedOnDate
can be updated in isolation or together.
locale
is required when dealing with numbers or dates dateFormat
is required when dealing with dates
id required | integer <int64> Example: 1 The unique identifer of an SMS message. |
Update existing SMS message
status required | integer Enum: 100 101 200 300 400 Status of the SMS. Possible values:
|
externalid | string External identifier for the SMS |
sentdate | string <date> Date when the SMS was sent |
{- "status": 100,
- "externalid": "string",
- "sentdate": "01 July 2007"
}
{- "resourceId": 1,
- "changes": { }
}
Code and code values: Codes represent a specific category of data, their code values are a specific instance of that category.
Codes are mostly system defined which means the code itself comes out of the box and cannot be modified however its code values can be. e.g. 'Customer Identifier', it defaults to a code value of 'Passport' but could be 'Drivers License, National Id' etc
Retrieves a list of all available codes in the system. Codes are used for defining dropdowns and other configurable lists within the Musoni platform.
[- {
- "id": 0,
- "name": "string",
- "codeLabel": "string",
- "systemDefined": true,
- "defaultValue": 0
}
]
Creates a new Code definition in the system. Codes are used for defining dropdowns and other configurable lists within the Musoni platform.
name | string The name of the code to create. |
codeLabel | string The label that can be used for the code identifier. |
{- "name": "string",
- "codeLabel": "string"
}
{- "resourceId": 0
}
Retrieves the details of a single code definition using its unique identifier.
codeId required | integer The ID of the code to retrieve. |
{- "id": 0,
- "name": "string",
- "codeLabel": "string",
- "systemDefined": true,
- "defaultValue": 0
}
Updates an existing code definition identified by its unique identifier.
codeId required | integer The ID of the code to update. |
name | string The updated name of the code. |
codeLabel | string The label that can be used for the code identifier. |
{- "name": "string",
- "codeLabel": "string"
}
{- "resourceId": 0
}
Deletes a code definition from the system using its unique identifier.
codeId required | integer The ID of the code to delete. |
{- "resourceId": 0
}
Code and code values: Codes represent a specific category of data, their code values are a specific instance of that category.
Codes are mostly system defined which means the code itself comes out of the box and cannot be modified however its code values can be. e.g. 'Customer Identifier', it defaults to a code value of 'Passport' but could be 'Drivers License, National Id' etc
codeId required | integer <int64> |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
includeInactiveCodeValues | boolean Default: false Example: includeInactiveCodeValues=false when set to true, code values that are not active are also returned |
[- {
- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
]
codeId required | integer <int64> |
name required | string The name of the code value. |
description | string A brief description of the code value. |
position required | integer <int32> The display order of the code value. Lower numbers appear first. |
enabled required | boolean Indicates if the code value is enabled. |
{- "name": "Example Code Value",
- "description": "This is an example code value.",
- "position": 1,
- "enabled": true
}
{- "resourceId": 12
}
codeId required | integer <int64> |
codevalueId required | integer <int64> |
{- "id": 1,
- "name": "Example Code Value",
- "position": 1,
- "description": "This is an example code value.",
- "active": true,
- "isDefault": true
}
codeId required | integer <int64> |
codevalueId required | integer <int64> |
name | string The updated name of the code value. |
description | string An updated brief description of the code value. |
position | integer <int32> The updated display order of the code value. Lower numbers appear first. |
enabled | boolean Updates whether the code value is enabled. |
{- "name": "Updated Code Value Name",
- "description": "This is an updated example code value.",
- "position": 2,
- "enabled": false
}
{- "resourceId": 1,
- "changes": { }
}
Maker checker functionality allows one user to create or modify an entry, and another user with "Checker" rights to inspect and approve the data.
Checkers can only check and approve entries they are permitted to and that are within their data scope.
'Head office' checkers can check and approve all entries, including those not office/branch related.
Retrieves a list of Maker Checker entries that are pending approval or rejection. The list can be filtered by various criteria such as action name, entity name, maker, checker, date ranges, and office.
actionName | string Filter by action name.
Example: |
entityName | string Filter by entity name.
Example: |
resourceId | integer <int64> Filter by resource ID.
Example: |
makerId | integer <int64> Filter by maker user ID.
Example: |
makerDateTimeFrom | string <date-time> Filter by maker date time from (yyyy-MM-dd HH:mm:ss).
Example: |
makerDateTimeTo | string <date-time> Filter by maker date time to (yyyy-MM-dd HH:mm:ss).
Example: |
checkerId | integer <int64> Filter by checker user ID.
Example: |
checkerDateTimeFrom | string <date-time> Filter by checker date time from (yyyy-MM-dd HH:mm:ss).
Example: |
checkerDateTimeTo | string <date-time> Filter by checker date time to (yyyy-MM-dd HH:mm:ss).
Example: |
officeId | integer <int64> Filter by office ID.
Example: |
groupId | integer <int64> Filter by group ID.
Example: |
clientId | integer <int64> Filter by client ID.
Example: |
loanid | integer <int64> Filter by loan ID.
Example: |
savingsAccountId | integer <int64> Filter by savings account ID.
Example: |
paged | boolean Flag to indicate if the results should be returned in a paged format.
Set to |
offset | integer <int32> The number of results to skip from the beginning of the list when |
limit | integer <int32> The maximum number of results to return per page when |
orderBy | string Order the results by the specified field.
Example: |
sortOrder | string Enum: "ASC" "DESC" Specify the sort order (ASC or DESC).
Example: |
includeJson | boolean Include JSON representation of the command in the response.
Example: |
[- {
- "id": 654,
- "actionName": "CREATE",
- "entityName": "LOANPRODUCT",
- "resourceId": 15,
- "maker": "keithwoodlock",
- "madeOnDate": "1364924512000",
- "processingResult": "awaiting.approval"
}, - {
- "id": 666,
- "actionName": "CREATE",
- "entityName": "CLIENT",
- "resourceId": 363,
- "maker": "keithwoodlock",
- "madeOnDate": "1365012843000",
- "processingResult": "awaiting.approval",
- "officeName": "my office name"
}, - {
- "id": 670,
- "actionName": "CREATE",
- "entityName": "CLIENTNOTE",
- "resourceId": 287,
- "maker": "keithwoodlock",
- "madeOnDate": "1365014204000",
- "processingResult": "awaiting.approval",
- "officeName": "my office name",
- "clientName": "gg ggg"
}, - {
- "id": 675,
- "actionName": "UPDATE",
- "entityName": "LOAN",
- "resourceId": 101,
- "maker": "janedoe",
- "madeOnDate": "1678886400000",
- "processingResult": "awaiting.approval",
- "loanAccountNo": "L101"
}
]
Retrieves a template for searching Maker Checker entries. This resource provides lists of possible values for various search criteria, such as users, action names, and entity names. It can be useful when building user interfaces for searching maker checker entries.
fields | string Comma separated list of fields to include in the response.
Example: |
{- "appUsers": [
- { }
], - "actionNames": [
- "string"
], - "entityNames": [
- "string"
]
}
Approves or rejects a specific Maker Checker entry.
auditId required | integer <int64> Example: 1 The ID of an audit entry |
command required | string Enum: "approve" "reject" The command to perform on the maker checker entry. Must be either 'approve' or 'reject'. |
Optional request body for providing additional details for approval or rejection.
{ }
{- "resourceId": 1
}
Deletes a specific Maker Checker entry. This is typically used to remove entries that are no longer needed or were created in error.
auditId required | integer <int64> Example: 1 The ID of an audit entry |
{ }
Every Command API request is audited. A fully processed request can not be changed or deleted. See maker checker api for situations where an audit is not fully processed.
Permissions: To search and look at audit entries a user needs to be attached to a role that has one of the ALL_FUNCTIONS, ALL_FUNCTIONS_READ or READ_AUDIT permissions.
Data Scope: A user can only see audits that are within their data scope. However, 'head office' users can see all audits including those that aren't office/branch related e.g. Loan Product changes.
Retrieves a list of Audit entries. Every non-read API request is audited, and this resource provides access to those audit logs. The list can be filtered by various criteria such as action name, entity name, maker, checker, date ranges, and office. Results are typically sorted by audit entry ID in descending order.
actionName | string Filter by action name.
Example: |
entityName | string Filter by entity name.
Example: |
resourceId | integer <int64> Filter by resource ID.
Example: |
makerId | integer <int64> Filter by maker user ID.
Example: |
makerDateTimeFrom | string <date-time> Filter by maker date time from (yyyy-MM-dd HH:mm:ss).
Example: |
makerDateTimeTo | string <date-time> Filter by maker date time to (yyyy-MM-dd HH:mm:ss).
Example: |
checkerId | integer <int64> Filter by checker user ID.
Example: |
checkerDateTimeFrom | string <date-time> Filter by checker date time from (yyyy-MM-dd HH:mm:ss).
Example: |
checkerDateTimeTo | string <date-time> Filter by checker date time to (yyyy-MM-dd HH:mm:ss).
Example: |
processingResult | integer <int32> Filter by processing result.
1: Success
2: Failure
3: Processing
Example: |
officeId | integer <int64> Filter by office ID.
Example: |
groupId | integer <int64> Filter by group ID.
Example: |
clientId | integer <int64> Filter by client ID.
Example: |
loanId | integer <int64> Filter by loan ID.
Example: |
savingsAccountId | integer <int64> Filter by savings account ID.
Example: |
shareAccountId | integer <int32> Filter by share account ID.
Example: |
paged | boolean Flag to indicate if the results should be returned in a paged format.
Set to |
offset | integer <int32> The number of results to skip from the beginning of the list when |
limit | integer <int32> The maximum number of results to return per page when |
orderBy | string Order the results by the specified field.
Example: |
sortOrder | string Enum: "ASC" "DESC" Specify the sort order (ASC or DESC).
Example: |
includeJson | boolean Include JSON representation of the command in the response.
Example: |
[- {
- "id": 671,
- "actionName": "PERMISSIONS",
- "entityName": "ROLE",
- "resourceId": 6,
- "maker": "keithwoodlock",
- "madeOnDate": "1365014262000",
- "processingResult": "processed"
}, - {
- "id": 670,
- "actionName": "CREATE",
- "entityName": "CLIENTNOTE",
- "resourceId": 287,
- "maker": "keithwoodlock",
- "madeOnDate": "1365014204000",
- "processingResult": "awaiting.approval",
- "officeName": "my office",
- "clientName": "gg ggg"
}, - {
- "id": 668,
- "actionName": "UPDATE",
- "entityName": "PERMISSION",
- "maker": "keithwoodlock",
- "madeOnDate": "1365014186000",
- "processingResult": "processed"
}, - {
- "id": 667,
- "actionName": "CREATE",
- "entityName": "CLIENTNOTE",
- "resourceId": 286,
- "maker": "keithwoodlock",
- "madeOnDate": "1365014169000",
- "processingResult": "processed",
- "officeName": "my office name",
- "clientName": "gg ggg"
}, - {
- "id": 666,
- "actionName": "CREATE",
- "entityName": "CLIENT",
- "resourceId": 363,
- "maker": "keithwoodlock",
- "madeOnDate": "1365012843000",
- "processingResult": "awaiting.approval",
- "officeName": "my office name"
}, - {
- "id": 657,
- "actionName": "CREATE",
- "entityName": "CLIENT",
- "resourceId": 362,
- "maker": "ii",
- "madeOnDate": "1364953928000",
- "checker": "ii",
- "checkedOnDate": "1365010060000",
- "processingResult": "processed",
- "officeName": "my office name",
- "clientName": "gg ggg"
}, - {
- "id": 645,
- "actionName": "CREATE",
- "entityName": "LOAN",
- "resourceId": 373,
- "maker": "keithwoodlock",
- "madeOnDate": "1364860260000",
- "checker": "keithwoodlock",
- "checkedOnDate": "1364861222000",
- "processingResult": "processed",
- "officeName": "another office",
- "clientName": "another client",
- "loanAccountNo": "000000373"
}
]
Retrieves a template for searching Audit entries. This resource provides lists of possible values for various search criteria, such as users, action names, entity names, and processing results. It can be useful when building user interfaces for searching audit entries.
fields | string Comma separated list of fields to include in the response.
Example: |
{- "appUsers": [
- { }
], - "actionNames": [
- "string"
], - "entityNames": [
- "string"
], - "processingResults": [
- { }
]
}
Datatables functionality enables dynamic user-defined relational tables that can be associated with existing core resources (clients, loans, etc.).
They allow for extending the data model on a tenant basis without modifying the core schema.
This API enables creating and managing datatable definitions.
Lists all existing registered datatables.
A registered datatable is a table that is created on the schema and associated against its "application" resource together with metadata details.
Optionally, filter by application table name to only return datatables associated with a specific entity type.
apptable | string
Filters the search results to limit them to only datatables associated with this application table name. |
excludeCodeValues | boolean Default: false Whether to exclude code values in the response |
[- {
- "applicationTableName": "string",
- "registeredTableName": "string",
- "displayName": "string",
- "category": 0,
- "systemDefined": true,
- "columnHeaderData": [
- {
- "columnName": "string",
- "columnType": "string",
- "isNullable": true,
- "isPrimaryKey": true,
- "columnValues": [
- "string"
]
}
]
}
]
Creates a new datatable.
A registered datatable is a custom table that is created on the schema and associated against its "application" resource together with metadata details.
(e.g. apptableName for clients its m_client
, for loans its m_loan
)
The datatable name must be unique and must not use a reserved prefix (e.g., m_, x_).
datatableName required | string Name of the datatable. The name must be unique and must not use a reserved prefix (e.g., m_, x_). |
apptableName required | string Name of the application table to link to (e.g. for clients its |
multiRow | boolean Default: false if true, indicates this datatable is in a one-to-many relationship with the application table and supports adding multiple entries. if false, indicates this datatable is in a one-to-one relationship with the appllication table and supports 0 or 1 entries max. |
required | Array of objects Column definitions |
{- "datatableName": "string",
- "apptableName": "string",
- "multiRow": false,
- "columns": [
- {
- "name": "string",
- "type": "string",
- "mandatory": false,
- "length": 0,
- "code": "string"
}
]
}
{- "resourceId": "string"
}
Retrieves the details of a datatable, including its columns and metadata.
datatable required | string The name of the datatable |
excludeCodeValues | boolean Default: false Whether to exclude code values in the response |
{- "applicationTableName": "string",
- "registeredTableName": "string",
- "displayName": "string",
- "category": 0,
- "systemDefined": true,
- "columnHeaderData": [
- {
- "columnName": "string",
- "columnType": "string",
- "isNullable": true,
- "isPrimaryKey": true,
- "columnValues": [
- "string"
]
}
]
}
Updates the structure of an existing datatable.
This API allows adding or modifying columns in a datatable.
datatable required | string The name of the datatable to update |
Array of objects Columns to add to the datatable | |
Array of objects Columns to modify in the datatable | |
dropColumns | Array of strings Columns to remove from the datatable |
{- "addColumns": [
- {
- "name": "string",
- "type": "string",
- "mandatory": false,
- "length": 0,
- "code": "string"
}
], - "changeColumns": [
- {
- "name": "string",
- "newName": "string",
- "length": 0,
- "mandatory": true,
- "code": "string"
}
], - "dropColumns": [
- "string"
]
}
{- "resourceId": "string"
}
Deletes a datatable and all its data.
Note: This action cannot be undone, and all data stored in the datatable will be lost.
datatable required | string The name of the datatable to delete |
{- "resourceId": "string"
}
Retrieves all available datatable categories.
Categories are used to group datatables by purpose or function.
[- {
- "id": 0,
- "name": "string",
- "description": "string",
- "systemDefined": true
}
]
APIs for working with datatable entries.
Datatables can have two types of relationships with core resources:
This API enables adding, updating, and retrieving datatable entries.
Retrieves all entries in a datatable for a specific entity instance.
This API is used for one-to-one relationships between datatables and application tables.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
order | string Sort order (e.g., field1 asc, field2 desc) |
dropdownValues | boolean Default: false Whether to include dropdown values in the response |
imagesAsBase64 | boolean Default: false Whether to include images as base64 encoded strings |
filterField | string Field to filter results by |
{- "data": [
- { }
]
}
Creates a new entry in a datatable for a specific entity instance.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
Dynamic properties based on datatable structure
{ }
{- "resourceId": 0
}
Updates an existing entry in a datatable for a specific entity instance.
This API is used for one-to-one relationships between datatables and application tables.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
Dynamic properties based on datatable structure
{ }
{- "resourceId": 0
}
Deletes all entries in a datatable for a specific entity instance.
This API is used for one-to-one relationships between datatables and application tables.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
{- "resourceId": 0
}
Retrieves a specific entry in a datatable for a specific entity instance.
This API is used for one-to-many relationships between datatables and application tables.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
datatableId required | integer <int64> The ID of the datatable entry |
order | string Sort order (e.g., field1 asc, field2 desc) |
dropdownValues | boolean Default: false Whether to include dropdown values in the response |
filterField | string Field to filter results by |
{ }
Updates a specific entry in a datatable for a specific entity instance.
This API is used for one-to-many relationships between datatables and application tables.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
datatableId required | integer <int64> The ID of the datatable entry |
Dynamic properties based on datatable structure
{ }
{- "resourceId": 0
}
Deletes a specific entry in a datatable for a specific entity instance.
This API is used for one-to-many relationships between datatables and application tables.
datatable required | string The name of the datatable |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
datatableId required | integer <int64> The ID of the datatable entry |
{- "resourceId": 0
}
This allows to retrieve the list of survey tables registered .
[- {
- "datatableData": {
- "applicationTableName": "string",
- "registeredTableName": "string",
- "displayName": "string",
- "category": 0,
- "systemDefined": true,
- "columnHeaderData": [
- {
- "columnName": "string",
- "columnType": "string",
- "isNullable": true,
- "isPrimaryKey": true,
- "columnValues": [
- "string"
]
}
]
}
}
]
Lists a registered survey table details and the application table they are registered to.
surveyName required | string The name of the survey (datatable) |
[- {
- "applicationTableName": "string",
- "registeredTableName": "string",
- "displayName": "string",
- "category": 0,
- "systemDefined": true,
- "columnHeaderData": [
- {
- "columnName": "string",
- "columnType": "string",
- "isNullable": true,
- "isPrimaryKey": true,
- "columnValues": [
- "string"
]
}
]
}
]
Insert an entry in a survey table (fulfill the survey).
surveyName required | string The name of the survey (datatable) |
apptableId required | integer <int64> The ID of the entity instance (e.g., client ID, loan ID) |
Dynamic properties based on datatable structure
{ }
{- "resourceId": 12
}
APIs for managing validation rules through entity datatable checks.
Entity datatable checks are used to enforce validation rules for datatables at specific stages of an entity's lifecycle.
Retrieves all entity datatable checks.
Entity datatable checks are used to enforce validation rules for datatables at specific stages of an entity's lifecycle.
status | integer <int64> Filter by status ID |
entity | string Filter by entity type (e.g., m_client, m_loan) |
productLoanId | integer <int64> Filter by loan product ID |
[- {
- "id": 0,
- "entity": "string",
- "status": 0,
- "datatableName": "string",
- "displayName": "string",
- "systemDefined": true,
- "productId": 0,
- "productName": "string"
}
]
Creates a new entity datatable check.
Entity datatable checks are used to enforce validation rules for datatables at specific stages of an entity's lifecycle.
entity required | string The entity type (e.g., m_client, m_loan) |
status required | integer <int64> The status ID that triggers this check |
datatableName required | string The name of the datatable to check |
productId | integer <int64> The product ID this check applies to (if any) |
{- "entity": "string",
- "status": 0,
- "datatableName": "string",
- "productId": 0
}
{- "resourceId": 0
}
Retrieves template data for creating entity datatable checks.
This API returns the available entities, statuses, and datatables that can be used when creating an entity datatable check.
{- "entities": [
- "string"
], - "statusList": [
- {
- "id": 0,
- "code": "string",
- "value": "string"
}
], - "datatables": [
- {
- "id": "string",
- "value": "string"
}
]
}
Deletes an entity datatable check.
This API removes a validation rule for a datatable.
entityDatatableCheckId required | integer <int64> The ID of the entity datatable check to delete |
{- "resourceId": 0
}
Jobs refers to a set of backend tasks that are performed and controlled by the Platform.
At any point, you can view the list of jobs scheduled to run along with other details specific to each job.
Returns all jobs configured with the scheduler.
Permission: READ_SCHEDULER
[- {
- "jobId": 4709,
- "displayName": "Update loan Summary",
- "nextRunTime": "Oct 13, 2023 9:00:00 PM",
- "cronExpression": "0 0 22 1/1 * ? *",
- "active": true,
- "currentlyRunning": true,
- "lastRunHistory": {
- "version": 0,
- "jobRunStartTime": "Oct 13, 2023 9:00:00 PM",
- "jobRunEndTime": "Oct 13, 2023 9:02:05 PM",
- "status": "success",
- "triggerType": "cron",
- "jobRunErrorMessage": "This job failed due to ...",
- "jobRunErrorLog": null
}
}
]
Returns details of the job
Permission: READ_SCHEDULER
id required | integer <int64> Example: 1 The unique identifer of a job. |
{- "jobId": 4709,
- "displayName": "Update loan Summary",
- "nextRunTime": "Oct 13, 2023 9:00:00 PM",
- "cronExpression": "0 0 22 1/1 * ? *",
- "active": true,
- "currentlyRunning": true,
- "lastRunHistory": {
- "version": 0,
- "jobRunStartTime": "Oct 13, 2023 9:00:00 PM",
- "jobRunEndTime": "Oct 13, 2023 9:02:05 PM",
- "status": "success",
- "triggerType": "cron",
- "jobRunErrorMessage": "This job failed due to ...",
- "jobRunErrorLog": null
}
}
Manually execute the job.
Jobs in this system are automatically triggered as part of standard operations and do not require manual execution. Manually triggering jobs can lead to data inconsistencies and performance issues due to incorrect execution order.
Proceed only if you fully understand the impact. For assistance, contact the support team.
id required | integer <int64> Example: 1 The unique identifer of a job. |
command required | string Default: "executeJob" Example: command=executeJob The executeJob command. |
{ }
{- "timestamp": 521630352275443,
- "status": 401,
- "error": "Unauthorized",
- "message": "Full authentication is required to access this resource",
- "path": "/api/v1/{resourceName}"
}
Returns the history of job executions for a specific job.
Permission: READ_SCHEDULER
id required | integer <int64> Example: 1 The unique identifer of a job. |
offset | integer Default: 0 Example: offset=100 sets the offset for pagination, used in combination with limit |
limit | integer Default: 200 Example: limit=100 Sets the limit of records returned, if not provided the limit will be 200, if a higher limit than 2500 is provided limit will be restricted at 2500, pagination should be used to retrieve subsequent pages of data. |
orderBy | string Enum: "id" "job_id" "version" "start_time" "end_time" "status" "trigger_type" "error_message" "error_log" The SQL,Database name of the field |
sortOrder | string DESC or ASC |
[- {
- "version": 0,
- "jobRunStartTime": "Oct 13, 2023 9:00:00 PM",
- "jobRunEndTime": "Oct 13, 2023 9:02:05 PM",
- "status": "success",
- "triggerType": "cron",
- "jobRunErrorMessage": "This job failed due to ...",
- "jobRunErrorLog": null
}
]
An API capability to support administration of application users.
User accounts are setup so people or processes can authenticate before using APIs.
Users are associated with an office in the organisation. The platform data-scoping feature will limit what users can see and do based on their assigned office.
Users can be associated with a staff e.g loan officers
For self-service functionality users can be associated with a client allowing that user to login and view their account details.
Returns all non-deleted users.
Permission: READ_USER
[- {
- "id": 4709,
- "username": "exampleuser@example.com",
- "firstname": "John",
- "lastname": "Smith",
- "email": "exampleuser@example.com",
- "isSelfServiceUser": false,
- "systemDefined": true,
- "isEnabled": true,
- "accountNonLocked": true,
- "passwordNeverExpires": false,
- "renewPasswordOnNextLogin": false,
- "officeId": 1,
- "officeName": "Head Office",
- "staff": {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "userId": 0,
- "firstname": "John",
- "lastname": "Doe",
- "displayname": "John Doe",
- "mobileNo": "+353 78 90987877",
- "externalId": "name",
- "isLoanOfficer": true,
- "isActive": true,
- "joiningDate": [
- 2000,
- 1,
- 1
]
}, - "selectedRoles": {
- "id": 4709,
- "name": "SuperUser",
- "description": "Superadmin Role",
- "disabled": true,
- "systemDefined": true
}
}
]
Creates a new user account.
Permission: CREATE_USER
username required | string [ 1 .. 100 ] characters The username of the user. |
firstname required | string [ 1 .. 100 ] characters The first name of the user. |
lastname required | string [ 1 .. 100 ] characters The last name of the user. |
string <= 100 characters The email of the user. | |
officeId required | integer <int64> The id of the office this user is associated with. |
staffId | integer <int64> The id of the staff member this user is associated with. A staff member can only be associated with one user. |
roles required | Array of integers An array of id's that indicate the roles that are to be assigned to this user. |
sendPasswordToEmail required | boolean Default: false If true, the password generated for the user will be emailed to the users provided |
passwordNeverExpires | boolean Default: false If true, the password will never expire for this user account. |
renewPasswordOnNextLogin | boolean Default: true If true, the user will be requested to change their password on next login. |
password | string The clear text password for the user account. see also |
repeatPassword | string The clear text password for the user account repeated. see also |
isEnabled | boolean Default: true Indicates if the user account is enabled or not. |
isSelfServiceUser | boolean Default: false Indicates if the user account is a "self service" account meaning that this user account is associated with a client. The client will be able to login using this account to check their details and perform self-service actions. |
sendPasswordToSelfServiceClients | boolean Default: false If |
clients | Array of integers If |
{- "username": "johnsmith123",
- "firstname": "John",
- "lastname": "Smith",
- "email": "johnsmith@example.com",
- "officeId": 1,
- "staffId": 1,
- "roles": [
- 1
], - "sendPasswordToEmail": false,
- "passwordNeverExpires": false,
- "renewPasswordOnNextLogin": true,
- "password": "mYFav4our1tPassw0rd",
- "repeatPassword": "mYFav4our1tPassw0rd",
- "isEnabled": true,
- "isSelfServiceUser": false,
- "sendPasswordToSelfServiceClients": false,
- "clients": [
- 1
]
}
{- "resourceId": 12
}
Find User by id
id required | integer <int64> Example: 1 The unique identifer of a user. |
[- {
- "id": 4709,
- "username": "exampleuser@example.com",
- "firstname": "John",
- "lastname": "Smith",
- "email": "exampleuser@example.com",
- "isSelfServiceUser": false,
- "systemDefined": true,
- "isEnabled": true,
- "accountNonLocked": true,
- "passwordNeverExpires": false,
- "renewPasswordOnNextLogin": false,
- "officeId": 1,
- "officeName": "Head Office",
- "staff": {
- "id": 4709,
- "officeId": 1,
- "officeName": "Head Office",
- "userId": 0,
- "firstname": "John",
- "lastname": "Doe",
- "displayname": "John Doe",
- "mobileNo": "+353 78 90987877",
- "externalId": "name",
- "isLoanOfficer": true,
- "isActive": true,
- "joiningDate": [
- 2000,
- 1,
- 1
]
}, - "selectedRoles": {
- "id": 4709,
- "name": "SuperUser",
- "description": "Superadmin Role",
- "disabled": true,
- "systemDefined": true
}
}
]
Support ability to update details of user account.
Note: When updating a password you must provide the repeatPassword parameter also.
id required | integer <int64> Example: 1 The unique identifer of a user. |
Update exisitng user
username required | string [ 1 .. 100 ] characters The username of the user. |
firstname required | string [ 1 .. 100 ] characters The first name of the user. |
lastname required | string [ 1 .. 100 ] characters The last name of the user. |
string <= 100 characters The email of the user. | |
officeId required | integer <int64> The id of the office this user is associated with. |
staffId | integer <int64> The id of the staff member this user is associated with. A staff member can only be associated with one user. |
roles required | Array of integers An array of id's that indicate the roles that are to be assigned to this user. |
sendPasswordToEmail required | boolean Default: false If true, the password generated for the user will be emailed to the users provided |
passwordNeverExpires | boolean Default: false If true, the password will never expire for this user account. |
renewPasswordOnNextLogin | boolean Default: true If true, the user will be requested to change their password on next login. |
password | string The clear text password for the user account. see also |
repeatPassword | string The clear text password for the user account repeated. see also |
isEnabled | boolean Default: true Indicates if the user account is enabled or not. |
isSelfServiceUser | boolean Default: false Indicates if the user account is a "self service" account meaning that this user account is associated with a client. The client will be able to login using this account to check their details and perform self-service actions. |
sendPasswordToSelfServiceClients | boolean Default: false If |
clients | Array of integers If |
lockUser | boolean Default: true Used to lock or unlock an user account on update. |
{- "username": "johnsmith123",
- "firstname": "John",
- "lastname": "Smith",
- "email": "johnsmith@example.com",
- "officeId": 1,
- "staffId": 1,
- "roles": [
- 1
], - "sendPasswordToEmail": false,
- "passwordNeverExpires": false,
- "renewPasswordOnNextLogin": true,
- "password": "mYFav4our1tPassw0rd",
- "repeatPassword": "mYFav4our1tPassw0rd",
- "isEnabled": true,
- "isSelfServiceUser": false,
- "sendPasswordToSelfServiceClients": false,
- "clients": [
- 1
], - "lockUser": true
}
{- "resourceId": 1,
- "changes": { }
}
Supports multi-factor authentication (MFA) related commands on a user.
Note: MFA cannot be enabled on Client Users (users where isSelfServiceUser = true
)
id required | integer <int64> Example: 1 The unique identifer of a user. |
command required | string Enum: "enable-mfa" "disable-mfa" "expire-mfa" "reset-mfa" Example: command=disable The name of the command being performed. |
{ }
{- "resourceId": 1,
- "changes": { }
}
Performs a soft delete of the user.
Any requests to find this user or operate on the user will result in a 404 not found as the resource no longer exists.
id required | integer <int64> Example: 1 The unique identifer of a user. |
{ }
{- "resourceId": 1,
- "changes": { }
}
An API capability to support management of application roles for user administration.
Roles group together permissions. They are typically defined based on a persons role in a organisation or based on the functional access required.
List all Roles
activeRoleOnly | boolean Default: true Example: activeRoleOnly=true if true, returns all active roles |
[- {
- "id": 4709,
- "name": "SuperUser",
- "description": "Superadmin Role",
- "disabled": true,
- "systemDefined": true
}
]
Creates a new role which can then be updated with permissions.
name required | string The name of the role |
description required | string A more extensive description of the role. |
{- "name": "My Role",
- "description": "A more extensive description of the role"
}
{- "resourceId": 12
}
Find Role member by id
id required | integer <int64> Example: 1 The unique identifer of a role. |
[- {
- "id": 4709,
- "name": "SuperUser",
- "description": "Superadmin Role",
- "disabled": true,
- "systemDefined": true
}
]
Supports the ability to update role details.
id required | integer <int64> Example: 1 The unique identifer of a role. |
Update exisitng Role
name required | string The name of the role |
description required | string A more extensive description of the role. |
{- "name": "My Role",
- "description": "A more extensive description of the role"
}
{- "resourceId": 1,
- "changes": { }
}
Supports enable and disable commands on a role
id required | integer <int64> Example: 1 The unique identifer of a role. |
command required | string Enum: "disable" "enable" Example: command=disable The name of the command being performed. |
{ }
{- "resourceId": 1,
- "changes": { }
}
Will perform hard delete of the role unless it is associated with any users.
id required | integer <int64> Example: 1 The unique identifer of a role. |
{ }
{- "resourceId": 1,
- "changes": { }
}
List permissions assocatied with role
id required | integer <int64> Example: 1 The unique identifer of a role. |
[- {
- "id": 4709,
- "name": "SuperUser",
- "description": "Superadmin Role",
- "disabled": true,
- "systemDefined": true,
- "permissionUsageData": {
- "grouping": "SuperUser",
- "code": "CREATE_USER",
- "entityName": "USER",
- "actionName": "CREATE",
- "selected": true
}
}
]
The ability to be able to update what permissions are associated with this role.
id required | integer <int64> Example: 1 The unique identifer of a role. |
Update role permissions
permissions required | object A map where the key is a valid permission The first entry of the array indicates if permission is enabled or not. The second entry is an id of a product grouping. |
{- "permissions": {
- "CREATE_USER": [
- true,
- null
]
}
}
{- "resourceId": 1,
- "changes": { }
}
An API capability to support management of application permissions for user administration.
Permissions come pre-installed as they are directly related to APIs. In order to be authorized to call an API a user must have its associated permission.
Note: We do not directly expose APIs for creation or deletion of permissions.
The update of a permissions is only in place to support the enabling or disabling of Maker-Checker functionality for command related (state changing) APIs.
If makerCheckerable=false
or not supplied then a list of permissions is returned. The selected
attribute is always true in this case.
If makerCheckerable=true
then returns all permissions that can be enabled for maker-checker (which excludes read permissions or special permissions). The selected
attribute shows whether the permission is enabled for Maker-Checker.
Note: Each Musoni transaction is associated with a permission.
makerCheckerable | boolean Default: false Example: makerCheckerable=false boolean to indicate what way to list permissions |
[- {
- "grouping": "SuperUser",
- "code": "CREATE_USER",
- "entityName": "USER",
- "actionName": "CREATE",
- "selected": true
}
]
Allows permissions to be updated to enable/disable maker-checker for them.
Allows permissions to be updated to enable/disable maker-checker for them.
permissions required | object A map where the key is a valid permission |
{- "permissions": {
- "CREATE_USER": true
}
}
{- "resourceId": 1,
- "changes": { }
}
This API enables management of password policy for user administration.
There is no Musoni functionality for creating a validation policy. The validation policies come pre-installed.
Validation policies may be updated
Lists all the active system validation policies.
{- "id": 4709,
- "description": "Password must be at least 1 character and not more that 50 characters long",
- "active": true,
- "activeSelfservice": true,
- "key": "simple",
- "regex": "^.{1,50}$"
}
The ability to update the selected active validation policy for user accounts.
validationPolicyId required | integer The id of the validation policy which you wish to set as the active policy. |
isSelfService | boolean Default: false If true, this updated will be for self-services users valiation policy. |
{- "validationPolicyId": 1234,
- "isSelfService": false
}
{- "resourceId": 1,
- "changes": { }
}
Lists all system validation policies.
[- {
- "id": 4709,
- "description": "Password must be at least 1 character and not more that 50 characters long",
- "active": true,
- "activeSelfservice": true,
- "key": "simple",
- "regex": "^.{1,50}$"
}
]
API for managing reports, including core and non-core reports, parameterized queries, and UI visibility.
Core reports (supplied at installation/upgrade time) can only have their "useReport" updated. "useReport" is used, for example, in the reference UI report page to 'show'/'not show' reports. Reports that have useReport set to false can still be run. Reports only used for workflow purposes are examples of reports that would have their useReport set to false.
Placeholders can be put in the reportSql to act as parameters. They have the format ${paramName}. The runreports api will translate the value of any query parameter beginning R_ with the equivalent placeholder. e.g. query parameter R_myName=john will replace ${myName} with john
There is a special 'automatic' placeholder ${currentUserHierarchy} - if this is included in reportSql it gets replaced by the requesting users' office hierarchy value. This enables data scoping. Usage example "where o.hierarchy like CONCAT('${currentUserHierarchy}', '%')"
Note: The reports api allows parameters (not just placeholders in reportSql) to be associated with reports. These associated parameters are only required to allow the reference UI reporting functionality implement user-friendly parameter input.
Retrieves metadata related to available report types, subtypes, and parameters.
{- "allowedReportTypes": [
- "Table",
- "Pentaho",
- "Chart"
], - "allowedReportSubTypes": [
- "Bar",
- "Pie"
], - "allowedParameters": [
- {
- "id": 1,
- "parameterName": "startDateSelect"
}, - {
- "id": 2,
- "parameterName": "endDateSelect"
}, - {
- "id": 3,
- "parameterName": "obligDateTypeSelect"
}, - {
- "id": 5,
- "parameterName": "OfficeIdSelectOne"
}, - {
- "id": 6,
- "parameterName": "loanOfficerIdSelectAll"
}, - {
- "id": 10,
- "parameterName": "currencyIdSelectAll"
}, - {
- "id": 20,
- "parameterName": "fundIdSelectAll"
}, - {
- "id": 25,
- "parameterName": "loanProductIdSelectAll"
}, - {
- "id": 26,
- "parameterName": "loanPurposeIdSelectAll"
}, - {
- "id": 100,
- "parameterName": "parTypeSelect"
}
]
}
Retrieves a list of all reports, including core and non-core reports.
[- {
- "reportName": "Loan Report",
- "reportType": "Table",
- "reportSubType": "Detailed",
- "reportCategory": "Client",
- "reportSQL": "SELECT * FROM m_loan WHERE loan_status_id = 300",
- "description": "A report detailing active client loans.",
- "useReport": true,
- "reportParameters": [
- {
- "id": 1,
- "parameterId": 10,
- "reportParameterName": "loanType"
}
]
}
]
Adds a new non-core report.
reportName | string The name of the report. |
reportType | string Enum: "Table" "Pentaho" "Chart" "CreditCheck" The type of report, defining how the data is structured and visualized. |
reportSubType | string Additional categorization of the report type, if applicable. |
reportCategory | string The category of the report (e.g., Client), indicating the related business entity. |
reportSQL | string MySQL query defining the report dataset. Supports placeholders |
description | string A brief explanation of the report's purpose. |
useReport | boolean Indicates whether the report is available for selection in the UI. Reports with |
Array of objects (ReportParameter) A list of parameter entities linked to this report, used for dynamic filtering. |
{- "reportName": "Loan Report",
- "reportType": "Table",
- "reportSubType": "Detailed",
- "reportCategory": "Client",
- "reportSQL": "SELECT * FROM m_loan WHERE loan_status_id = 300",
- "description": "A report detailing active client loans.",
- "useReport": true,
- "reportParameters": [
- {
- "id": 1,
- "parameterId": 10,
- "reportParameterName": "loanType"
}
]
}
{- "resourceId": 12
}
Retrieves the details of a specific report.
reportId required | integer The unique identifier of the report. |
{- "reportName": "Loan Report",
- "reportType": "Table",
- "reportSubType": "Detailed",
- "reportCategory": "Client",
- "reportSQL": "SELECT * FROM m_loan WHERE loan_status_id = 300",
- "description": "A report detailing active client loans.",
- "useReport": true,
- "reportParameters": [
- {
- "id": 1,
- "parameterId": 10,
- "reportParameterName": "loanType"
}
]
}
Updates a report. Only useReport
can be updated for core reports.
reportId required | integer The unique identifier of the report. |
reportName | string The name of the report. |
reportType | string Enum: "Table" "Pentaho" "Chart" "CreditCheck" The type of report, defining how the data is structured and visualized. |
reportSubType | string Additional categorization of the report type, if applicable. |
reportCategory | string The category of the report (e.g., Client), indicating the related business entity. |
reportSQL | string MySQL query defining the report dataset. Supports placeholders |
description | string A brief explanation of the report's purpose. |
useReport | boolean Indicates whether the report is available for selection in the UI. Reports with |
Array of objects (ReportParameter) A list of parameter entities linked to this report, used for dynamic filtering. |
{- "reportName": "Loan Report",
- "reportType": "Table",
- "reportSubType": "Detailed",
- "reportCategory": "Client",
- "reportSQL": "SELECT * FROM m_loan WHERE loan_status_id = 300",
- "description": "A report detailing active client loans.",
- "useReport": true,
- "reportParameters": [
- {
- "id": 1,
- "parameterId": 10,
- "reportParameterName": "loanType"
}
]
}
{- "resourceId": 1,
- "changes": { }
}
Retrieves all prepared reports with pagination and filtering options.
Prepared reports are pre-generated reports that can be accessed and downloaded by users. These reports are typically generated asynchronously and stored for later retrieval.
offset | integer Pagination offset (starting index) |
limit | integer Maximum number of records to return |
reportName | string Filter by report name |
exportType | string Enum: "JSON" "PDF" "XLS" "XLSX" "CSV" "HTML" "ZIP" Filter by export type (JSON, PDF, XLS, XLSX, CSV, HTML, ZIP) |
status | string Enum: "CREATED" "PENDING" "IN_PROGRESS" "COMPLETED" "EXPIRED" "FAILED" "DELETED" Filter by status (CREATED, PENDING, IN_PROGRESS, COMPLETED, EXPIRED, FAILED, DELETED) |
dateTo | string <date> Filter by end date (format yyyy-MM-dd) |
dateFrom | string <date> Filter by start date (format yyyy-MM-dd) |
{- "totalFilteredRecords": 0,
- "pageItems": [
- {
- "preparedReportId": 0,
- "name": "string",
- "createOn": "string",
- "finishedOn": "string",
- "status": "CREATED",
- "exportType": "JSON",
- "expiredOn": "string",
- "daysBeforeExpiration": 0,
- "documentId": 0,
- "reportParameters": "string",
- "createdByUsername": "string"
}
]
}
Retrieves multiple prepared reports by their IDs.
Prepared reports are pre-generated reports that can be accessed and downloaded by users. These reports are typically generated asynchronously and stored for later retrieval.
ids required | string Comma-separated list of prepared report IDs |
[- {
- "preparedReportId": 0,
- "name": "string",
- "createOn": "string",
- "finishedOn": "string",
- "status": "CREATED",
- "exportType": "JSON",
- "expiredOn": "string",
- "daysBeforeExpiration": 0,
- "documentId": 0,
- "reportParameters": "string",
- "createdByUsername": "string"
}
]
Retrieves search template data for prepared reports.
This endpoint provides data that can be used to build search forms for prepared reports, such as available report categories, export types, and statuses.
reportCategory | string Optional filter by report category |
{- "creators": [
- 0
], - "exportTypes": [
- "JSON"
], - "statuses": [
- "CREATED"
], - "reportNames": [
- "string"
]
}
Retrieves a prepared report by its ID.
Prepared reports are pre-generated reports that can be accessed and downloaded by users. These reports are typically generated asynchronously and stored for later retrieval.
id required | integer <int64> The ID of the prepared report to retrieve |
{- "preparedReportId": 0,
- "name": "string",
- "createOn": "string",
- "finishedOn": "string",
- "status": "CREATED",
- "exportType": "JSON",
- "expiredOn": "string",
- "daysBeforeExpiration": 0,
- "documentId": 0,
- "reportParameters": "string",
- "createdByUsername": "string"
}
Deletes a prepared report by its ID.
id required | integer <int64> The ID of the prepared report to delete |
{- "resourceId": 0,
- "changes": { },
- "officeId": 0,
- "clientId": 0,
- "loanId": 0,
- "savingsId": 0,
- "groupId": 0,
- "rollbackTransaction": true
}
Downloads a prepared report file.
Prepared reports are pre-generated reports that can be accessed and downloaded by users. These reports are typically generated asynchronously and stored for later retrieval.
id required | integer <int64> The ID of the prepared report to download |
"string"
Generates a temporary direct link to download a prepared report.
Prepared reports are pre-generated reports that can be accessed and downloaded by users. These reports are typically generated asynchronously and stored for later retrieval.
id required | integer <int64> The ID of the prepared report |
{- "key": "temporaryLink",
}
Runs the report on request and does not use the addToQueue
approach.
Reports that are not pentaho specific and execute in reasonable time are ok to be executed via this approach.
reportName required | integer The name of the report (url safe). |
R_XXXX | string Support for custom parameters that are passed through to the report directly. The number and names of the parameters depend on the specific report and how it has been configured.
Note: the prefix R_ stands for Reporting. |
genericResultSet | boolean Default: true Example: genericResultSet=false If 'true' an optimised JSON format is returned suitable for tabular display of data. If 'false' a more standard JSON format is returned. Not applicable to Pentaho reports. |
parameterType | boolean Default: false Example: parameterType=false Determines whether the request looks in the list of reports or the list of parameters for its data. The only valid value is 'true'. If any other value is provided the argument will be ignored. Not applicable to Pentaho reports. |
exportCSV | boolean Default: false Example: exportCSV=false Output will be delivered as a CSV file instead of JSON. The only valid value is 'true'. If any other value is provided the argument will be ignored. Not applicable to Pentaho reports. |
output-type | string Default: "html" Enum: "csv" "xls" "xlsx" "html" "pdf" Example: output-type=csv The output type of the report. Valid values are:
Only applicable to Pentaho reports. |
locale | string Example: locale=en Any valid locale Ex: en_US, en_IN, fr_FR etc Only applicable to Pentaho reports. |
0
Adds the report to a queue for processing.
reportName required | integer The name of the report (url safe). |
output-type required | string Enum: "csv" "xls" "xlsx" "json" The output type of the report. |
0