blob: 9a87171ccca511297917c57fae9b06913f1e4d60 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="apidocs.css" type="text/css" media="screen" title="Apache Fineract API Docs" charset="utf-8" />
<script type="text/javascript" src="jquery-1.7.min.js"></script>
<title>Apache Fineract API Documentation</title>
<script>
QueryParameters = (function() {
var result = {};
if (window.location.search) {
// split up the query string and store in an associaative array
var params = window.location.search.slice(1).split("&");
for ( var i = 0; i < params.length; i++) {
var tmp = params[i].split("=");
result[tmp[0]] = unescape(tmp[1]);
}
}
return result;
}());
getLocation = function(href) {
var l = document.createElement("a");
l.href = href;
return l;
};
baseURL = "";
defQueryParams = "tenantIdentifier=default&pretty=true";
function clickAPILink(apiLink) {
var currentLink = baseURL + apiLink;
if (apiLink.indexOf("?") < 0)
currentLink += "?" + defQueryParams;
else
currentLink += "&" + defQueryParams;
if ((/MSIE (\d+\.\d+);/.test(navigator.userAgent))
|| (apiLink.indexOf("exportCSV") > -1)
|| (apiLink.indexOf("type=CSV") > -1)
|| (apiLink.indexOf("type=XLS") > -1)) { // test for MSIE (not a great browser for the api docs anyhow) or a file download
location.href = currentLink;
} else
window.open(currentLink);
}
function clickAPILinkNotPretty(apiLink) {
var fixedQueryParams = "tenantIdentifier=default";
var currentLink = baseURL + apiLink;
if (apiLink.indexOf("?") < 0)
currentLink += "?" + fixedQueryParams;
else
currentLink += "&" + fixedQueryParams;
if ((/MSIE (\d+\.\d+);/.test(navigator.userAgent))
|| (apiLink.indexOf("exportCSV") > -1)
|| (apiLink.indexOf("type=CSV") > -1)
|| (apiLink.indexOf("type=XLS") > -1)) { // test for MSIE (not a great browser for the api docs anyhow) or a file download
location.href = currentLink;
} else
window.open(currentLink);
}
function getBaseURL(docURL) {
var localhostUrl = "https://localhost:8443/fineract-provider/api/v1/";
var openmfDemoUrl = "/fineract-provider/api/v1/";
var baseUrl = "";
if (docURL.substring(0, 4).toLowerCase() == "http") {
var l = getLocation(docURL);
if (l.hostname == "demo.openmf.org") {
baseUrl = openmfDemoUrl;
} else {
baseUrl = "https://" + l.hostname
+ ":8443/fineract-provider/api/v1/"
}
} else {
//assume running locally
baseUrl = localhostUrl;
}
return baseUrl;
}
</script>
</head>
<body>
<div id="page-wrapper">
<div id="flybar">
<div id="nav-logo">0.4.0-incubating</div>
<div class="flybar-nav">
<h2 class="flybar-button">Overview</h2>
<div class="flybar-menu-overview">
<div class="toc-column1">
<div class="toc-section">
<ul>
<li><a href="#top">Apache Fineract API Documentation</a></li>
<li><a href="#interact">Try The API From Your Browser</a></li>
<li><a href="#genopts">Generic Options</a></li>
<li><a href="#creates_and_updates">Creating and Updating</a></li>
<li><a href="#dates_and_numbers">Updating Dates and Numbers</a></li>
<li><a href="#field_descriptions">Field Descriptions</a></li>
<li><a href="#authentication_overview">Authentication Overview</a></li>
<li><a href="#authentication_basicauth">Authentication HTTP Basic</a></li>
<li><a href="#authentication_oauth">Authentication Oauth2</a></li>
<li><a href="#errors">Errors</a></li>
<li><a href="#batch_api">Batch API</a></li>
<li><a href="#fullapi_matrix">Full API Matrix</a></li>
<li><a href="#betaapi_matrix">Beta API Matrix</a></li>
<li><a href="#paymentapplicationlogic">Payment Application Logic / Transaction Processing Strategies</a></li>
<li><a href="#selfservice_overview">Self Service API</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Client</h2>
<div id="toc-menu-client" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#clients">Client</a></td>
<td>clients</td>
<td><a href="#clients_create">Create a Client</a></td>
<td><a href="#clients_list">List Clients</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}</td>
<td></td>
<td><a href="#clients_retrieve">Retrieve a Client</a></td>
<td><a href="#clients_update">Update a Client</a></td>
<td><a href="#clients_delete">Delete a Client</a></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=activate</td>
<td><a href="#clients_activate">Activate a Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=close</td>
<td><a href="#clients_close">Close a Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=reject</td>
<td><a href="#clients_reject">Reject a Client Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=withdraw</td>
<td><a href="#clients_withdraw">Withdraw a Client Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=reactivate</td>
<td><a href="#clients_reactivate">Reactivate a Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=UndoRejection</td>
<td><a href="#clients_UndoRejection">UndoReject a Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=UndoWithdrawal</td>
<td><a href="#clients_UndoWithdrawal">UndoWithdrawal Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=assignStaff</td>
<td><a href="#clients_assignStaff">Assign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=unassignStaff</td>
<td><a href="#clients_unassignStaff">Unassign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=proposeTransfer</td>
<td><a href="#clients_propose_transfer">Propose a Client Transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=withdrawTransfer</td>
<td><a href="#clients_withdraw_transfer">Withdraw Client Transfer Proposal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=acceptTransfer</td>
<td><a href="#clients_accept_transfer">Accept Client Transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=rejectTransfer</td>
<td><a href="#clients_reject_transfer">Reject Client Transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=updateSavingsAccount</td>
<td><a href="#clients_updateSavingsAccount">Update Default Savings Account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="alt"></td>
<td>clients/{clientId}?command=proposeAndAcceptTransfer</td>
<td><a href="#clients_propose_and_accept_transfer">Propose and Accept a Client Transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/accounts</td>
<td></td>
<td><a href="#clients_loansummary">Retrieve client accounts overview</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#client_address">Client Address</a></td>
<td>client/{clientId}/addresses</td>
<td><a href="#client_address_create">Create an address for a Client</a></td>
<td><a href="#client_address_list">List all Addresses for a Client</a></td>
<td><a href="#client_address_update">Update an address for a Client</a></td>
<td></td>
</tr>
<tr>
<td><a href="#entity_field_list">Entity Field Configuration</a></td>
<td>fieldconfiguration/{entity}</td>
td></td>
<td><a href="#entity_field_list">List all configuration for a entity</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#client_identifiers">Client Identifiers</a></td>
<td>clients/{clientId}/identifiers</td>
<td><a href="#client_identifiers_create">Create an Identifier for a Client</a></td>
<td><a href="#client_identifiers_list">List all Identifiers for a Client</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/identifiers/{identifierId}</td>
<td></td>
<td><a href="#client_identifiers_retrieve">Retrieve a Client Identifier</a></td>
<td><a href="#client_identifiers_update">Update a Client Identifier</a></td>
<td><a href="#client_identifiers_delete">Delete a Client Identifier</a></td>
</tr>
<tr>
<td><a href="#client_images">Client Images</a></td>
<td>clients/{clientId}/images</td>
<td><a href="#client_images_create">Upload an Image for a Client (as DATA URI)</a></td>
<td><a href="#client_images_retrieve">Get Client Image (DATA URI)</a></td>
<td><a href="#client_images_update">Update Client Image (DATA URI)</a></td>
<td><a href="#client_images_delete">Delete Client Image</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a href="#client_images_create_form">
Upload an Image for a Client (Multi-part form data)</a>
</td>
<td><a href="#client_images_retrieve_binary">Get Client Image (Binary file)</a></td>
<td><a href="#client_images_update_form">
Update Client Image (Multi-part form data)</a>
</td>
<td></td>
</tr>
<tr>
<td><a href="#standinginstruction">Standing Instructions</a></td>
<td>standinginstructions</td>
<td><a href="#standinginstruction_create">Create Standing Instruction</a></td>
<td><a href="#standinginstructions_list">List Standing Instructions</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>standinginstructions/{standingInstructionId}</td>
<td></td>
<td><a href="#standinginstructions_retrieve">Retrieve a Standing Instruction</a></td>
<td><a href="#standinginstruction_update">Update Standing Instruction</a></td>
<td><a href="#standinginstruction_delete">Delete Standing Instruction(status change)</a></td>
</tr>
<tr>
<td></td>
<td>standinginstructionrunhistory</td>
<td></td>
<td><a href="#standinginstructions_history">Standing Instructions Run History</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#accounttransfers">Account Transfer</a></td>
<td>accounttransfers</td>
<td><a href="#accounttransfers_create">Create Account Transfer</a></td>
<td><a href="#accounttransfers_list">List Account Transfer</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounttransfers/{accountTransferId}</td>
<td></td>
<td><a href="#accounttransfers_retrieve">Retrieve a Account Transfer</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounttransfers/templateRefundByTransfer</td>
<td></td>
<td><a href="#accounttransfers_retrieve_template_refund_by_transfer">Retrieve Refund of an Active Loan by Transfer Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounttransfers/refundByTransfer</td>
<td><a href="#accounttransfers_refund_by_transfer">Refund an active loan by transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#client_charge">Client Charge</a></td>
<td>clients/{clientId}/charges</td>
<td><a href="#add_clientCharge">Add Client Charge</a></td>
<td><a href="#list_clientCharges">List Client Charges</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/charges/{clientChargeId}</td>
<td></td>
<td><a href="#clientcharges_retrieve">Retrieve a Client Charge</a></td>
<td></td>
<td><a href="#delete_clientCharge">Delete a Client Charge</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/charges/{clientChargeId}?command=pay</td>
<td><a href="#pay_clientCharge">Pay a Client Charge</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/charges/{clientChargeId}?command=waive</td>
<td><a href="#waive_clientCharge">Waive a Client Charge</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#client_transactions">Client Transactions</td>
<td>clients/{clientId}/transactions</td>
<td><a href="#list_clientTransactions">List Client Transactions</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/transactions/{transactionId}?command=undo</td>
<td><a href="#revert_clientCharge">Undo a Client Transaction</a></td>
<td><a href="#clienttransactions_retrieve">Retrieve a Client Transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Savings</h2>
<div id="toc-menu-client" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#savingsaccounts">Savings Accounts</a></td>
<td>savingsaccounts</td>
<td><a href="#savingsaccounts_create">Submit new savings application</a></td>
<td><a href="#savingsaccounts_list">List savings application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}</td>
<td></td>
<td><a href="#savingsaccounts_retrieve">Retrieve a savings application/account</a></td>
<td><a href="#savingsaccounts_update">Modify a savings application</a></td>
<td><a href="#savingsaccounts_delete">Delete a savings application</a></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=updateWithHoldTax</td>
<td></td>
<td></td>
<td><a href="#savingsaccounts_withholdtaxupdate">Modify savings application withhold tax</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=approve</td>
<td><a href="#savingsaccounts_approve">Approve a savings application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=undoApproval</td>
<td><a href="#savingsaccounts_undoapproval">Undo savings application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=assignSavingsOfficer</td>
<td><a href="#savingsaccounts_assignSavingsOfficer">Assign Savings Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unassignSavingsOfficer</td>
<td><a href="#savingsaccounts_unassignSavingsOfficer">Unassign Savings Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=reject</td>
<td><a href="#savingsaccounts_reject">Reject a savings application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=withdraw</td>
<td><a href="#savingsaccounts_withdrawbyapplicant">Withdraw savings application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=activate</td>
<td><a href="#savingsaccounts_activate">Activate a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=close</td>
<td><a href="#savingsaccounts_close">Close a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=calculateInterest</td>
<td><a href="#savingsaccounts_calculate_interest">Calculate interest on a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=postInterest</td>
<td><a href="#savingsaccounts_post_interest">Post interest on a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=block</td>
<td><a href="#savingsaccounts_block">Block savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unblock</td>
<td><a href="#savingsaccounts_unblock">Unblock savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=blockCredit</td>
<td><a href="#savingsaccounts_block_credit">Block Savings Account Credit Transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unblockCredit</td>
<td><a href="#savingsaccounts_unblock_credit">Unblock Savings Account Credit Transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=blockDebit</td>
<td><a href="#savingsaccounts_block_debit">Block Savings Account Debit Transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unblockDebit</td>
<td><a href="#savingsaccounts_unblock_debit">Unblock Savings Account Debit Transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#savingsaccounts_transactions">Savings Transactions</a></td>
<td>savingsaccounts/{accountId}/transactions?command=deposit</td>
<td><a href="#savingsaccounts_deposit">Make a deposit</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions?command=withdrawal</td>
<td><a href="#savingsaccounts_withdrawal">Make a withdrawal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=undo</td>
<td><a href="#savingsaccounts_undotransaction">Undo transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=modify</td>
<td><a href="#savingsaccounts_adjusttransaction">Adjust transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=holdAmount</td>
<td><a href="#savingsaccounts_hold_amount">Hold Amount</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=releaseAmount</td>
<td><a href="#savingsaccounts_release_amount">Release Amount</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/template</td>
<td></td>
<td><a href="#savingsaccounts_transactions_template">Retrieve savings account transaction template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#savingsaccounts_transaction">Retrieve savings account transaction</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#savings_charges">Savings Account Charges</a></td>
<td>savingsaccounts/{accountId}/charges</td>
<td><a href="#savings_charges_create">Add a Savings Account Charge</a></td>
<td><a href="#savings_charges_list">List Savings Account Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}</td>
<td></td>
<td><a href="#savings_charges_retrieve">Retrieve a Savings Account Charge</a></td>
<td><a href="#savings_charges_update">Modify a Savings Account Charge</a></td>
<td><a href="#savings_charges_delete">Delete a Savings Account Charge</a></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=paycharge</td>
<td><a href="#savings_charges_pay">Pay a Savings Account Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=waive</td>
<td><a href="#savings_charges_waive">Waive a Savings Account Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=inactivate</td>
<td><a href="#savings_charges_inactivate">Inactivate a Savings Account Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#fdaccounts">Fixed Deposit Accounts</a></td>
<td>fixeddepositaccounts</td>
<td><a href="#fdaccounts_create">Submit new fixed deposit application</a></td>
<td><a href="#fdaccounts_list">List fixed deposit application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}</td>
<td></td>
<td><a href="#fdaccounts_retrieve">Retrieve a fixed deposit application/account</a></td>
<td><a href="#fdaccounts_update">Modify a fixed deposit application</a></td>
<td><a href="#fdaccounts_delete">Delete a fixed deposit application</a></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=approve</td>
<td><a href="#fdaccounts_approve">Approve a fixed deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=undoApproval</td>
<td><a href="#fdaccounts_undoapproval">Undo fixed deposit application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=reject</td>
<td><a href="#fdaccounts_reject">Reject a fixed deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=withdraw</td>
<td><a href="#fdaccounts_withdrawbyapplicant">Withdraw fixed deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=activate</td>
<td><a href="#fdaccounts_activate">Activate a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=close</td>
<td><a href="#fdaccounts_close">Close a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=prematureClose</td>
<td><a href="#fdaccounts_prematureclose">Premature Close a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=calculatePrematureAmount</td>
<td><a href="#fdaccounts_calculate_premature_amount">Calculate Premature amount on a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=calculateInterest</td>
<td><a href="#fdaccounts_calculate_interest">Calculate interest on a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=postInterest</td>
<td><a href="#fdaccounts_post_interest">Post interest on a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#rdaccounts">Recurring Deposit Accounts</a></td>
<td>recurringdepositaccounts</td>
<td><a href="#rdaccounts_create">Submit new recurring deposit application</a></td>
<td><a href="#rdaccounts_list">List recurring deposit application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}</td>
<td></td>
<td><a href="#rdaccounts_retrieve">Retrieve a recurring deposit application/account</a></td>
<td><a href="#rdaccounts_update">Modify a recurring deposit application</a></td>
<td><a href="#rdaccounts_delete">Delete a recurring deposit application</a></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=approve</td>
<td><a href="#rdaccounts_approve">Approve a recurring deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=undoApproval</td>
<td><a href="#rdaccounts_undoapproval">Undo recurring deposit application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=reject</td>
<td><a href="#rdaccounts_reject">Reject a recurring deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=withdraw</td>
<td><a href="#rdaccounts_withdrawbyapplicant">Withdraw recurring deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=activate</td>
<td><a href="#rdaccounts_activate">Activate a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=updateDepositAmount</td>
<td><a href="#rdaccounts_update_deposit_amount">Update recommended deposit amount</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=close</td>
<td><a href="#rdaccounts_close">Close a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=prematureClose</td>
<td><a href="#rdaccounts_prematureclose">Premature Close a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=calculatePrematureAmount</td>
<td><a href="#rdaccounts_calculate_premature_amount">Calculate Premature amount on a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=calculateInterest</td>
<td><a href="#rdaccounts_calculate_interest">Calculate interest on a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=postInterest</td>
<td><a href="#rdaccounts_post_interest">Post interest on a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#recurringdepositaccounts_transactions">Recurring Deposit Transactions</a></td>
<td>recurringdepositaccounts/{accountId}/transactions?command=deposit</td>
<td><a href="#recurringdepositaccounts_deposit">Make a deposit</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions?command=withdrawal</td>
<td><a href="#recurringdepositaccounts_withdrawal">Make a withdrawal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/{transactionId}?command=undo</td>
<td><a href="#recurringdepositaccounts_undotransaction">Undo transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/{transactionId}?command=modify</td>
<td><a href="#recurringdepositaccounts_adjusttransaction">Adjust transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/template</td>
<td></td>
<td><a href="#recurringdepositaccounts_transactions_template">Retrieve Deposit account transaction template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#recurringdepositaccounts_transaction">Retrieve Deposit account transaction</a></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Shares</h2>
<div id="toc-menu-client" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#shareaccounts">Share Accounts</a></td>
<td>shareaccounts</td>
<td><a href="#shareaccount_create">Submit new share application</a></td>
<td><a href="#shareaccount_list">List share application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}</td>
<td></td>
<td><a href="#shareaccount_retrieve">Retrieve a share application/account</a></td>
<td><a href="#shareaccount_update">Modify a share application</a></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=approve</td>
<td><a href="#shareaccount_approve">Approve a share application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=undoApproval</td>
<td><a href="#shareaccount_undoapproval">Undo share application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=reject</td>
<td><a href="#shareaccount_reject">Reject a share application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=activate</td>
<td><a href="#shareaccount_activate">Activate a share account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=close</td>
<td><a href="#shareaccount_close">Close a share account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=applyadditionalshares</td>
<td><a href="#shareaccount_applyadditionalshares">Apply additional shares on a share account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=approveadditionalshares</td>
<td><a href="#shareaccount_approveadditionalshares">Approve additional shares request on a share account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=rejectadditionalshares</td>
<td><a href="#shareaccount_rejectadditionalshares">Reject additional shares request on a share account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounts/share/{accountId}?command=redeemshares</td>
<td><a href="#shareaccount_redeem">Redeem shares on a share account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Loan</h2>
<div id="toc-menu-loan" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#loans">Loans</a></td>
<td>loans?calculateLoanSchedule</td>
<td><a href="#loans_calculate">Calculate Loan Repayment Schedule</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans</td>
<td><a href="#loans_create">Submit a new Loan Application</a></td>
<td><a href="#loans_list">List Loans/Loan Applications</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}</td>
<td></td>
<td><a href="#loans_retrieve">Retrieve a Loan</a></td>
<td><a href="#loans_update">Update a Loan</a></td>
<td><a href="#loans_delete">Delete a Loan Application</a></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=approve</td>
<td><a href="#loans_approve">Approve Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=undoApproval</td>
<td><a href="#loans_approve_undo">Undo Loan Application Approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=assignLoanOfficer</td>
<td><a href="#loans_assignLoanOfficer">Assign a Loan Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=unassignLoanOfficer</td>
<td><a href="#loans_unassignLoanOfficer">Unassign a Loan Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=reject</td>
<td><a href="#loans_reject">Reject Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=withdraw</td>
<td><a href="#loans_withdraw">Withdraw Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=disburse</td>
<td><a href="#loans_disburse">Disburse Loan</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=disburseToSavings</td>
<td><a href="#loans_disburse_to_savings">Disburse Loan To Savings Account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=undoDisbursal</td>
<td><a href="#loans_disburse_undo">Undo Loan Application Disbursal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=recoverGuarantees</td>
<td><a href="#loans_recoverguarantee">Recover From Guarantors</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loans_transactions">Loan Transactions</a></td>
<td>loans/{loanId}/transactions?command=repayment</td>
<td><a href="#loans_transaction_repayment">Enter a repayment</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=waiveInterest</td>
<td><a href="#loans_transaction_waiveinterest">Waive Interest</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=writeoff</td>
<td><a href="#loans_transaction_write-off_loan">Write-off Loan</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=undowriteoff</td>
<td><a href="#loans_transaction_undo_write-off_loan">Undo Loan Write-off transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=prepayLoan</td>
<td><a href="#loans_transaction_pre_close_loan">Loan Pre-Closure transaction template</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=recoverypayment</td>
<td><a href="#loans_transaction_recovery_payment">Make a Recovery Payment</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#loans_transaction_retrieve">Retrieve a transactions details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions/{transactionId}</td>
<td><a href="#loans_transaction_adjust">Adjust a Transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=refundByCash</td>
<td><a href="#loans_transaction_refund_by_cash">Refund an Active Loan by Cash</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=foreclosure</td>
<td><a href="#loans_transaction_foreclosure">Foreclose an Active Loan</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loans_charges">Loan Charges</a></td>
<td>loans/{loanId}/charges</td>
<td><a href="#loans_charges_create">Add a Loan Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/charges/{loanChargeId}</td>
<td><a href="#loans_charges_pay">Pay Loan Charge from Linked Savings</a></td>
<td><a href="#loans_charges_retrieve">Retrieve a Loan Charge</a></td>
<td><a href="#loans_charges_update">Modify a Loan Charge</a></td>
<td><a href="#loans_charges_delete">Delete a Loan Charge</a></td>
</tr>
<tr>
<td><a href="#guarantors">Loan Guarantors</a></td>
<td>loans/{loanId}/guarantors</td>
<td><a href="#guarantors_create">Create a Guarantor
</a></td>
<td><a href="#guarantors_list">List Guarantors
</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/guarantors/{guarantorId}</td>
<td></td>
<td><a href="#guarantors_retrieve">Retrieve a Guarantor</a></td>
<td><a href="#guarantors_update">Update a Guarantor</a></td>
<td><a href="#guarantors_delete">Delete a Guarantor</a></td>
</tr>
<tr>
<td><a href="#collaterals">Loan Collateral</a></td>
<td>loans/{loanId}/collaterals</td>
<td><a href="#collaterals_create">Create a Collateral
</a></td>
<td><a href="#collaterals_list">List collaterals
</a></td>
<td></td>
<td></td>
</tr>
<tr class="alt">
<td></td>
<td>loans/{loanId}/collaterals/{collateralId}</td>
<td></td>
<td><a href="#collaterals_retrieve">Retrieve a Collateral</a></td>
<td><a href="#collaterals_update">Update a Collateral</a></td>
<td><a href="#collaterals_delete">Delete a Collateral</a></td>
</tr>
<tr>
<td><a href="#loan_rescheduling">Loan Rescheduling</a></td>
<td>rescheduleloans</td>
<td><a href="#loan_reschedule_request_create">Create new loan reschedule request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}</td>
<td></td>
<td><a href="#loan_reschedule_request_retrieve">Retrieve a Loan Reschedule Request</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}?command=previewLoanReschedule</td>
<td></td>
<td><a href="#loan_reschedule_preview_retrieve">Retrieve a Preview of The New Loan Repayment Schedule</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}?command=reject</td>
<td><a href="#loan_reschedule_request_reject">Reject Loan Reschedule Request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}?command=approve</td>
<td><a href="#loan_reschedule_request_approve">Approve Loan Reschedule Request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loan_term_variations">Loan Term Variations</a></td>
<td>/loans/{loanId}/schedule?command=calculateLoanSchedule</td>
<td><a href="#loans_calculate_with_exceptions">Calculate Schedule with Loan Term Variations</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>/loans/{loanId}/schedule?command=addVariations</td>
<td><a href="#loans_update_variations">Create Loan Term Variations</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>/loans/{loanId}/schedule?command=deleteVariations</td>
<td><a href="#loans_delete_variations">Remove All Loan Term Variations</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Groups</h2>
<div id="toc-menu-loan" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#groups">Group</a></td>
<td>groups</td>
<td><a href="#groups_create">Create a Group</a></td>
<td><a href="#groups_list">List Groups</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/template</td>
<td></td>
<td><a href="#groups_template">Retrieve Group Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}</td>
<td></td>
<td><a href="#groups_retrieve">Retrieve a Group</a></td>
<td><a href="#groups_update">Update a Group</a></td>
<td><a href="#groups_delete">Delete a Group</a></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=activate</td>
<td><a href="#groups_activate">Activate a Group</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=associateClients</td>
<td><a href="#groups_associate_clients">Associate Clients</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=disassociateClients</td>
<td><a href="#groups_disassociate_clients">Disassociate Clients</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}/accounts</td>
<td></td>
<td><a href="#groups_accounts">Retrieve Group accounts summary</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=transferClients</td>
<td><a href="#groups_transfer_clients">Bulk Transfer Clients across Groups</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=generateCollectionSheet</td>
<td><a href="#groups_generate_collectionsheet">Generate Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=saveCollectionSheet</td>
<td><a href="#groups_save_collectionsheet">Save Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=unassignStaff</td>
<td><a href="#groups_unassignStaff">Unassign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=assignStaff</td>
<td><a href="#groups_assignStaff">Assign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=close</td>
<td><a href="#groups_close">Close Group</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=assignRole</td>
<td><a href="#groups_assignRole">Assign Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=unassignRole</td>
<td><a href="#groups_unassignRole">Unassign Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=updateRole</td>
<td><a href="#groups_updateRole">Update Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#centers">Center</a></td>
<td>centers</td>
<td><a href="#centers_create">Create a Center</a></td>
<td><a href="#centers_list">List Centers</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/template</td>
<td></td>
<td><a href="#centers_template">Retrieve Center Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}</td>
<td></td>
<td><a href="#centers_retrieve">Retrieve a Center</a></td>
<td><a href="#centers_update">Update a Center</a></td>
<td><a href="#centers_delete">Delete a Center</a></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=activate</td>
<td><a href="#centers_activate">Activate a Center</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=close</td>
<td><a href="#centers_close">Close Center</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=associateGroups</td>
<td><a href="#centers_associate_groups">Associate Groups</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=disassociateGroups</td>
<td><a href="#centers_disassociate_groups">Disassociate Groups</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}/accounts</td>
<td></td>
<td><a href="#centers_accounts">Retrieve Center accounts summary</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=generateCollectionSheet</td>
<td><a href="#centers_generate_collectionsheet">Generate Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=saveCollectionSheet</td>
<td><a href="#centers_save_collectionsheet">Save Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#centers">Collection Sheet</a></td>
<td>collectionsheet?command=generateCollectionSheet</td>
<td><a href="#generate_individual_collection_sheet">Generate Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>collectionsheet?command=saveCollectionSheet</td>
<td><a href="#save_individual_collection_sheet">Save Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Accounting</h2>
<div id="toc-menu-accounting" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#glaccounts">General Ledger Account</a></td>
<td>glaccounts</td>
<td><a href="#glaccounts_create">Create a New Ledger Account</a></td>
<td><a href="#glaccounts_list">List Ledger Accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>glaccounts/{glaccountId}</td>
<td></td>
<td><a href="#glaccounts_retrieve">Retrieve a Ledger Account</a></td>
<td><a href="#glaccounts_update">Update a Ledger Account</a></td>
<td><a href="#glaccounts_delete">Delete a Ledger Account</a></td>
</tr>
<tr>
<td><a href="#glclosures">Accounting Closure</a></td>
<td>glclosures</td>
<td><a href="#glclosures_create">Create an Accounting Closure</a></td>
<td><a href="#glclosures_list">List Accounting Closures</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>glclosures/{glclosureId}</td>
<td></td>
<td><a href="#glclosures_retrieve">Retrieve an Accounting Closure</a></td>
<td><a href="#glclosures_update">Update an Accounting Closure</a></td>
<td><a href="#glclosures_delete">Delete an Accounting Closure</a></td>
</tr>
<tr>
<td><a href="#journalentries">Journal Entries</a></td>
<td>journalentries</td>
<td><a href="#journalentries_create">Create Journal Entries</a></td>
<td><a href="#journalentries_list">List Journal Entries</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>journalentries?command=updateRunningBalance</td>
<td><a href="#journalentries_updatebalance">Update Running Balance for Journal Entries</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>journalentries/{entryId}</td>
<td></td>
<td><a href="#journalentries_retrieve">Retrieve a single Entry</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>journalentries/{transactionId}/reversal</td>
<td><a href="#journalentries_reverse">Reverse Journal Entries</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#accountingrules">Accounting Rules</a></td>
<td>accountingrules</td>
<td><a href="#accountingrules_create">Create a Accounting Rule</a></td>
<td><a href="#accountingrules_list">List Accounting Rules</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accountingrules/{accountingruleId}</td>
<td></td>
<td><a href="#accountingrules_retrieve">Retrieve a Accounting Rule</a></td>
<td><a href="#accountingrules_update">Update a Accounting Rule</a></td>
<td><a href="#accountingrules_delete">Delete a Accounting Rule</a></td>
</tr>
<tr>
<td><a href="#officeglaccount">Mapping Financial Activities to Accounts</a></td>
<td>financialactivityaccounts</td>
<td><a href="#financialactivityaccounts_create">Create Financial Activity to Account Mapping</a><br> </td>
<td><a href="#financialactivityaccounts_list">List Financial Activities to Accounts Mappings</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>financialactivityaccounts/{financialActivityAccountId}</td>
<td></td>
<td><a href="#financialactivityaccounts_retrieve">Retrieve a Financial Activity to Account Mapping</a></td>
<td><a href="#financialactivityaccounts_update">Update a Financial Activity to Account Mapping</a></td>
<td><a href="#financialactivityaccounts_delete">Delete a Financial Activity to Account Mapping</a></td>
</tr>
<tr>
<td><a href="#periodicaccrualaccounting">Periodic Accrual Accounting</a></td>
<td>accrualaccounting</td>
<td><a href="#periodicaccrualaccounting_run">Execute Periodic Accrual Accounting</a><br> </td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#provisioningentries">Provisioning Entries</a></td>
<td>provisioningentries</td>
<td><a href="#provisioningentries_create">Create Provisioning Entry</a><br> </td>
<td><a href="#provisioningentries_list">List Provisioning Entries</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>provisioningentries/{entryId}</td>P
<td></td>
<td><a href="#provisioningentry_retrieve">Retrieve Provisioning Entry</a></td>
<td><a href="#provisioningentry_recreate">Recreates Provisionin Entry</a></td>
<td><a href="#provisioningentry_addjournals">Add Provisioning Journal Entries</a></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Org</h2>
<div id="toc-menu-org" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#offices">Office</a></td>
<td>offices</td>
<td><a href="#offices_create">Create an Office</a></td>
<td><a href="#offices_list">List Offices</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>offices/{officeId}</td>
<td></td>
<td><a href="#offices_retrieve">Retrieve an Office</a></td>
<td><a href="#offices_update">Update an Office</a></td>
<td></td>
</tr>
<tr>
<td><a href="#loanproducts">Loan Product</a></td>
<td>loanproducts</td>
<td><a href="#loanproducts_create">Create a Loan
Product</a></td>
<td><a href="#loanproducts_list">List Loan Products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loanproducts/{productId}</td>
<td></td>
<td><a href="#loanproducts_retrieve">Retrieve a Loan
Product</a></td>
<td><a href="#loanproducts_update">Update a Loan
Product</a></td>
<td></td>
</tr>
<tr>
<td><a href="#savingsproducts">Savings Product</a></td>
<td>savingsproducts</td>
<td><a href="#savingsproducts_create">Create a Savings product</a></td>
<td><a href="#savingsproducts_list">List Savings products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsproducts/{productId}</td>
<td></td>
<td><a href="#savingsproducts_retrieve">Retrieve a savings product</a></td>
<td><a href="#savingsproducts_update">Update a savings product</a></td>
<td><a href="#savingsproducts_delete">Delete a savings product</a></td>
</tr>
<tr>
<td><a href="#fdproducts">Fixed Deposit Product</a></td>
<td>fixeddepositproducts</td>
<td><a href="#fdproducts_create">Create a Fixed Deposit product</a></td>
<td><a href="#fdproducts_list">List Fixed Deposit products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositproducts/{productId}</td>
<td></td>
<td><a href="#fdproducts_retrieve">Retrieve a Fixed Deposit product</a></td>
<td><a href="#fdproducts_update">Update a Fixed Deposit product</a></td>
<td><a href="#fdproducts_delete">Delete a Fixed Deposit product</a></td>
</tr>
<tr>
<td><a href="#rdproducts">Recurring Deposit Product</a></td>
<td>recurringdepositproducts</td>
<td><a href="#rdproducts_create">Create a Recurring Deposit product</a></td>
<td><a href="#rdproducts_list">List Recurring Deposit products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositproducts/{productId}</td>
<td></td>
<td><a href="#rdproducts_retrieve">Retrieve a Recurring Deposit product</a></td>
<td><a href="#rdproducts_update">Update a Recurring Deposit product</a></td>
<td><a href="#rdproducts_delete">Delete a Recurring Deposit product</a></td>
</tr>
<tr>
<td><a href="#shareproducts">Share Product</a></td>
<td>shareproducts</td>
<td><a href="#shareproducts_create">Create a Share product</a></td>
<td><a href="#shareproducts_list">List Share products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>shareproducts/{productId}</td>
<td></td>
<td><a href="#shareproducts_retrieve">Retrieve a Share product</a></td>
<td><a href="#shareproducts_update">Update a Share product</a></td>
</tr>
<tr>
<td><a href="#smscampaigns">SMS Campaigns</a></td>
<td>smscampaigns</td>
<td><a href="#smscampaigns_create">Create a SMS Campaign</a></td>
<td><a href="#smscampaigns_list">List SMS Campaigns</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>smscampaigns/{campaignId}</td>
<td></td>
<td><a href="#smscampaigns_retrieve">Retrieve a SMS Campaign</a></td>
<td><a href="#smscampaigns_update">Update a SMS Campaign</a></td>
<td><a href="#smscampaigns_delete">Delete a SMS Campaign</a></td>
</tr>
<tr>
<td></td>
<td>smscampaigns/{campaignId}command=activate</td>
<td></td>
<td><a href="#smscampaigns_activate">Activate a SMS Campaign</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>smscampaigns/{campaignId}command=close</td>
<td></td>
<td><a href="#smscampaigns_close">Close a SMS Campaign</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>smscampaigns/{campaignId}command=reactivate</td>
<td></td>
<td><a href="#smscampaigns_reactivate">Reactivate a SMS Campaign</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#entitydatatablechecks">Entity-Datatable Checks</a></td>
<td>entityDatatableChecks</td>
<td><a href="#entitydatatablechecks_create">Create an Entity-Datatable Check</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>entityDatatableChecks?limit=15&offset=0</td>
<td></td>
<td><a href="#entitydatatablechecks_list">List Entity-Datatable Checks</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>entityDatatableChecks/template</td>
<td></td>
<td><a href="#entitydatatablechecks_template">Retrieves an Entity-Datatable Check template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>entityDatatableChecks/{entityDatatableCheckId}</td>
<td></td>
<td></td>
<td></td>
<td><a href="#entitydatatablechecks_delete">Delete an Entity-Datatable Check</a></td>
</tr>
<tr>
<td><a href="#configs">Currency</a></td>
<td>currencies</td>
<td></td>
<td><a href="#configs_currencyretrieve">Retrieve
Currency Configuration</a></td>
<td><a href="#configs_currencyupdate">Update Currency
Configuration</a></td>
<td></td>
</tr>
<tr>
<td><a href="#funds">Funds</a></td>
<td>funds</td>
<td><a href="#funds_create">Create a Fund</a></td>
<td><a href="#funds_retrieve">List Funds</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>funds/{fundId}</td>
<td></td>
<td><a href="#fund_retrieve">Retrieve a Fund</a></td>
<td><a href="#fund_update">Update a Fund</a></td>
<td></td>
</tr>
<tr>
<td><a href="#staff">Staff</a></td>
<td>staff</td>
<td><a href="#staff_create">Create a Staff Member</a></td>
<td><a href="#staff_list">List Staff</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>staff/{staffId}</td>
<td></td>
<td><a href="#staff_retrieve">Retrieve a Staff Member</a></td>
<td><a href="#staff_update">Update a Staff Member</a></td>
<td></td>
</tr>
<tr>
<td><a href="#client_images">Staff Images</a></td>
<td>staff/{staffId}/images</td>
<td><a href="#client_images_create">Upload an Image for a Staff Member (as DATA URI)</a></td>
<td><a href="#client_images_retrieve">Get Staff Image (DATA URI)</a></td>
<td><a href="#client_images_update">Update Staff Image (DATA URI)</a></td>
<td><a href="#client_images_delete">Delete Staff Image</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a href="#client_images_create_form">
Upload an Image for a Staff Member (Multi-part form data)</a>
</td>
<td><a href="#client_images_retrieve_binary">Get Staff Image (Binary file)</a></td>
<td><a href="#client_images_update_form">
Update Staff Image (Multi-part form data)</a>
</td>
<td></td>
</tr>
<tr>
<td><a href="#charges">Charges</a></td>
<td>charges</td>
<td><a href="#charges_create">Create a Charge</a></td>
<td><a href="#charges_list">List Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>charges/{chargeId}</td>
<td></td>
<td><a href="#charges_retrieve">Retrieve a Charge</a></td>
<td><a href="#charges_update">Update a Charge</a></td>
<td><a href="#charges_delete">Delete a Charge</a></td>
</tr>
<tr>
<td><a href="#loanproductmix">Loan Product Mix</a></td>
<td>loanproducts?associations=productMixes</td>
<td></td>
<td><a href="#loanproductmix_list">List Loan Products Mix</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loanproducts/{productId}/productmix</td>
<td><a href="#loanproductmix_create">Create a Loan Product Mix</a></td>
<td><a href="#loanproductmix_retrieve">Retrieve Loan Products Mix</a></td>
<td><a href="#loanproductmix_update">Update Loan Product Mix</a></td>
<td><a href="#loanproductmix_delete">Delete Loan Products Mix</a></td>
</tr>
<tr>
<td><a href="#holidays">Holidays</a></td>
<td>holidays</td>
<td><a href="#holidays_create">Create a Holiday</a></td>
<td><a href="#holidays_list">List Holidays</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>holidays/{holidayId}</td>
<td></td>
<td><a href="#holidays_retrieve">Retrieve a Holiday</a></td>
<td><a href="#holidays_update">Update a Holiday</a></td>
<td><a href="#holidays_delete">Delete a Holiday</a></td>
</tr>
<tr>
<td></td>
<td>holidays/{holidayId}?command=activate</td>
<td><a href="#holidays_activate">Activate a Holiday</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#workingdays">Working days</a></td>
<td>workingdays</td>
<td><a href="#workingdays_list">List workingdays</a></td>
<td><a href="#workingdays_template">Working days template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>workingdays/{workingdaysId}</td>
<td></td>
<td><a href="#workingdays_update">Update a workingdays</a></td>
</tr>
<tr>
<td><a href="#templates">User Generated Documents</a></td>
<td>templates</td>
<td><a href="#resources_addtemplate">Create a UGD</a></td>
<td><a href="#resource_templatelist">List UGDs</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>templates/{templateId}</td>
<td></td>
<td><a href="#resources_retrievetemplate">Retrieve a UGD</a></td>
<td><a href="#resources_updatetemplate">Update a UGD</a></td>
<td><a href="#resources_deletetemplate">Delete a UGD</a></td>
</tr>
<tr>
<td><a href="#interestratechart">Interest Rate Charts</a></td>
<td>charts</td>
<td><a href="#interestratechart_create">Create a Chart</a></td>
<td><a href="#interestratechart_list">List Charts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>interestratecharts/{chartId}</td>
<td></td>
<td><a href="#interestratechart_retrieve">Retrieve a Chart</a></td>
<td><a href="#interestratechart_update">Update a Chart</a></td>
<td><a href="#interestratechart_delete">Delete a Chart</a></td>
</tr>
<tr>
<td><a href="#interestrateslab">Interest Rate Slabs</a></td>
<td>slabs</td>
<td><a href="#interestrateslab_create">Create a Slab</a></td>
<td><a href="#interestrateslab_list">List Slabs</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>interestrateslabs/{slabId}</td>
<td></td>
<td><a href="#interestrateslab_retrieve">Retrieve a Slab</a></td>
<td><a href="#interestrateslab_update">Update a Slab</a></td>
<td><a href="#interestrateslab_delete">Delete a Slab</a></td>
</tr>
<tr>
<td><a href="#tellercashmgmt">Teller Cash Management</a></td>
<td>tellers</td>
<td><a href="#createtellers">Create Teller</a></td>
<td><a href="#listtellers">List Tellers</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}</td>
<td></td>
<td><a href="#findtellers">Find Teller</a></td>
<td><a href="#updatetellers">Update Teller</a></td>
<td><a href="#deletetellers">Delete Teller</a></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers</td>
<td><a href="#createcashier">Create Cashier</a></td>
<td><a href="#findallcashiers">Retrieve Cashier</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/{cashierId}</td>
<td></td>
<td><a href="#findaonecashier">Find Cashier</a></td>
<td><a href="#updatecashier">Update Cashier</a></td>
<td><a href="#deletecashier">Delete Cashier</a></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/template</td>
<td></td>
<td><a href="#updatecashier">Retrieve Cashier Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/{cashierId}/allocate</td>
<td><a href="#allocateCashToCashier">Allocate Cash To Cashier</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/{cashierId}/settle</td>
<td><a href="#settleCashFromCashier">Settle Cash From Cashier</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/{cashierId}/transactions</td>
<td></td>
<td><a href="#transactionsForCashier">Retrieve Cashier Transactions</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/{cashierId}/summaryandtransactions</td>
<td></td>
<td><a href="#getTransactionsWtihSummaryForCashier">Retrieve Cashier Transactions With Summary</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>tellers/{tellerId}/cashiers/{cashierId}/transactions/template</td>
<td></td>
<td><a href="#retrieveCashierTxnTemplate">Retrieve Cashier Transaction Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#paymenttype">Payment Type</a></td>
<td>paymenttypes</td>
<td><a href="#create_paymenttype">Create Payment Type</a></td>
<td><a href="#paymenttype_list">List Payment Types</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>paymenttypes/{paymentTypeId}</td>
<td></td>
<td><a href="#paymenttype_retrieve">Retrieve Payment Type</a></td>
<td><a href="#paymenttype_update">Update Payment Type</a></td>
<td><a href="#paymnettype_delete">Delete Payment Type</a></td>
</tr>
<tr>
<td><a href="#provisioningcriteria">Provisioning Criteria</a></td>
<td>provisioningcriteria</td>
<td><a href="#create_provisioningcriteria">Create Provisioning Criteria</a></td>
<td><a href="#provisioningcriteria_list">List Provisioning Criteria</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>provisioningcriteria/{criteriaId}</td>
<td></td>
<td><a href="#retrieve_provisioningcriteria">Retrieve Provisioning Criteria</a></td>
<td><a href="#update_provisioningcriteria">Update Provisioning Criteria</a></td>
<td><a href="#delete_provisioningcriteria">Delete Provisioning Criteria</a></td>
<td></td>
</tr>
<tr>
<td><a href="#floatingrates">Floating Rates</a></td>
<td>floatingrates</td>
<td><a href="#create_floatingrates">Create Floating Rate</a></td>
<td><a href="#floatingrates_list">List Floating Rates</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>floatingrates/{floatingRateId}</td>
<td></td>
<td><a href="#retrieve_floatingrate">Retrieve Floating Rate</a></td>
<td><a href="#update_floatingrate">Update Floating Rate</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#taxcomponent">Tax Component</a></td>
<td>taxes/component</td>
<td><a href="#create_taxcomponent">Create Tax Component</a></td>
<td><a href="#taxcomponents_list">List Tax Components</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>taxes/component/{taxComponentId}</td>
<td></td>
<td><a href="#retrieve_taxcomponent">Retrieve Tax component</a></td>
<td><a href="#update_taxcomponent">Update Tax Component</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#taxgroup">Tax Group</a></td>
<td>taxes/group</td>
<td><a href="#create_taxgroup">Create Tax Group</a></td>
<td><a href="#taxgroup_list">List Tax Groups</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>taxes/group/{taxGroupId}</td>
<td></td>
<td><a href="#retrieve_taxgroup">Retrieve Tax Group</a></td>
<td><a href="#update_taxgroup">Update Tax Group</a></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">User</h2>
<div id="toc-menu-user" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#authenticationbasic">Authentication HTTP Basic</a></td>
<td>authentication</td>
<td><a href="#authenticate_request_basic">Verify Authentication</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#authenticationoauth">Authentication Oauth2</a></td>
<td>oauth/token</td>
<td><a href="#oauth">OAuth2 Access and refresh Token Request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a href="#oauth_access_token_req">OAuth2 Access Token Request from refresh token</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>authenticated user</td>
<td></td>
<td><a href="#userdetails_request">Fetch Authenticated user details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#twofactor">Two-Factor Authentication</a></td>
<td>twofactor</td>
<td><a href="#twofactor_request">Request OTP</a></td>
<td><a href="#twofactor_deliverymethods">List OTP delivery methods</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>twofactor/validate</td>
<td><a href="#twofactor_validate">Validate OTP</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>twofactor/invalidate</td>
<td><a href="#twofactor_invalidate">Invalidate Access Token</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#users">User</a></td>
<td>users</td>
<td><a href="#users_create">Create a User</a></td>
<td><a href="#users_list">List Users</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>users/{userId}</td>
<td></td>
<td><a href="#users_retrieve">Retrieve a User</a></td>
<td><a href="#users_update">Update a User</a></td>
<td><a href="#users_delete">Delete a User</a></td>
</tr>
<tr>
<td><a href="#roles">Role</a></td>
<td>roles</td>
<td><a href="#roles_create">Create a New Role</a></td>
<td><a href="#roles_list">List Roles</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>roles/{roleId}</td>
<td></td>
<td><a href="#roles_retrieve">Retrieve a Role</a></td>
<td><a href="#roles_update">Update a Role</a></td>
<td><a href="#roles_delete">Delete Role</a></td>
</tr>
<tr>
<td></td>
<td>roles/{roleId}/permissions</td>
<td></td>
<td><a href="#rolespermissions_retrieve">Retrieve a
Role's Permissions</a></td>
<td><a href="#rolespermissions_update">Update a Role's
Permissions</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>roles/{roleId}?command=enable</td>
<td><a href="#roles_enable">Enable Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>roles/{roleId}?command=disable</td>
<td><a href="#roles_disable">Disable Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#permissions">Permission</a></td>
<td>permissions</td>
<td></td>
<td><a href="#permissions_list">List Application Permissions</a></td>
<td><a href="#permissions_update">Enable/Disable Permissions for Maker Checker</a></td>
<td></td>
</tr>
<tr>
<td><a href="#password_preferences">Password preferences</a></td>
<td>passwordpreferences</td>
<td><a href=""></a></td>
<td><a href="#password_preferences_list">Get Password Preferences</a></td>
<td><a href="#password_preferences_update">Update Password Preferences</a></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">System</h2>
<div id="toc-menu-system" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#configs_global">Global Configuration</a></td>
<td>configurations</td>
<td></td>
<td><a href="#configs_globalconfig_retrieve">List
Global Configuration</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#configs_global">Global Configuration</a></td>
<td>configurations/{configId}</td>
<td></td>
<td><a href="#configs_globalconfig_retrieve_one">Retrieve
a Global Configuration</a></td>
<td><a href="#configs_globalconfig_update">Update
Global Configuration</a></td>
<td></td>
</tr>
<tr>
<td><a href="#configs_hooks">Hooks</a></td>
<td>hooks</td>
<td><a href="#configs_hooks_create">Create a Hook</a></td>
<td><a href="#configs_hooks_retrieve">List Hooks</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>hooks/{hookId}</td>
<td></td>
<td><a href="#configs_hook_retrieve">Retrieve a Hook</a></td>
<td><a href="#configs_hook_update">Update a Hook</a></td>
<td><a href="#configs_hook_delete">Delete a Hook</a></td>
</tr>
<tr>
<td><a href="#accountnumberformats">Account number format</a></td>
<td>accountnumberformats</td>
<td><a href="#accountnumberformats_create">Create an Account number format</a></td>
<td><a href="#accountnumberformats_list">List Account number formats</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accountnumberformats/{accountnumberformatId}</td>
<td></td>
<td><a href="#accountnumberformats_retrieve">Retrieve an Account number format</a></td>
<td><a href="#accountnumberformats_update">Update an Account number format</a></td>
<td><a href="#accountnumberformats_delete">Delete an Account number format</a></td>
</tr>
<tr>
<td><a href="#configs_codes">Codes</a></td>
<td>codes</td>
<td><a href="#configs_codes_create">Create a Code</a></td>
<td><a href="#configs_codes_retrieve">List Codes</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>codes/{codeId}</td>
<td></td>
<td><a href="#configs_code_retrieve">Retrieve a Code</a></td>
<td><a href="#configs_code_update">Update a Code</a></td>
<td><a href="#configs_code_delete">Delete a Code</a></td>
</tr>
<tr>
<td><a href="#configs_codes_codevalues">Code Values</a></td>
<td>codes/{codeId}/codevalues</td>
<td><a href="#configs_codes_codevalues_create">Create a Code Value</a></td>
<td><a href="#configs_codes_codevalues_list">List Code Values</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>codes/{codeId}/codevalues/{codevalueId}</td>
<td></td>
<td><a href="#configs_codes_codevalues_retrieve">Retrieve a Code Value</a></td>
<td><a href="#configs_codes_codevalues_update">Update a Code Value</a></td>
<td><a href="#configs_codes_codevalues_delete">Delete a Code Value</a></td>
</tr>
<tr>
<td><a href="#audits">Audits</a></td>
<td>audits</td>
<td></td>
<td><a href="#audits_list">List Audits</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>audits/{auditId}</td>
<td></td>
<td><a href="#audits_retrieve">Retrieve an Audit Entry</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#makercheckers">Makercheckers</a></td>
<td>makercheckers</td>
<td></td>
<td><a href="#makercheckers_list">List Maker Checker Entries</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>makercheckers/{auditId}</td>
<td></td>
<td></td>
<td></td>
<td><a href="#makercheckers_delete">Delete Maker Checker Entry</a></td>
</tr>
<tr>
<td></td>
<td>makercheckers/{auditId}?command=approve</td>
<td><a href="#makercheckers_approve">Approve Maker Checker Entry</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#scheduler_jobs">Scheduler jobs</a></td>
<td>jobs</td>
<td></td>
<td><a href="#scheduler_jobs_list">List Scheduler jobs</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>jobs/{jobId}</td>
<td></td>
<td><a href="#retrieve_scheduler_job">Retrieve a job</a></td>
<td><a href="#update_scheduler_job">Update a job</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>jobs/{jobId}?command=executeJob</td>
<td><a href="#run_job">Run a job</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>jobs/{jobid}/runhistory</td>
<td></td>
<td><a href="#retrieve_job_runhistory">Retrieve job history</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>scheduler</td>
<td></td>
<td><a href="#retrieve_scheduler_status">Retrieve scheduler status</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>scheduler?command=start</td>
<td><a href="#activate_scheduler">Activate a scheduler service</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>scheduler?command=stop</td>
<td><a href="#suspend_scheduler">Suspend a scheduler service</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#external_services">External Services</a></td>
<td>externalservice/{servicename}</td>
<td></td>
<td><a href="#configs_externalService_retrieve">Retrieve
a external service configuration</a></td>
<td><a href="#configs_externalService_update">Update
external service Configuration</a></td>
<td></td>
</tr>
<tr>
<td><a href="#twofactor_config_get">Two-Factor Configuration</a></td>
<td>twofactor/configure</td>
<td></td>
<td><a href="#twofactor_config_get">Retrieve
Two-Factor Configuration</a></td>
<td><a href="#twofactor_config_update">Update
Two-Factor Configuration</a></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Non-Core</h2>
<div id="toc-menu-noncore" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#datatables">Data Table</a></td>
<td>datatables</td>
<td><a href="#datatables_createTable">Create Data Table</a></td>
<td><a href="#datatables_list">List Data Tables</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>datatables/{datatable}</td>
<td></td>
<td><a href="#datatables_getTable">Retrieve Data Table Details</a></td>
<td><a href="#datatables_updateTable">Update Data Table</a></td>
<td><a href="#datatables_deleteTable">Delete Data Table</a></td>
</tr>
<tr>
<td></td>
<td>datatables/register/{datatable}/{apptable}</td>
<td><a href="#datatables_register">Register Data Table</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>datatables/deregister/{datatable}</td>
<td><a href="#datatables_deregister">Deregister Data
Table</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>datatables/{datatable}/{apptableId}</td>
<td><a href="#datatables_create">Create Entry in Data
Table</a></td>
<td><a href="#datatables_retrieve">Retrieve Entry(s)
from Data Table</a></td>
<td><a href="#datatables_update">Update Entry in Data
Table (One to One)</a></td>
<td><a href="#datatables_delete">Delete Entry(s) in
Data Table</a></td>
</tr>
<tr>
<td></td>
<td>datatables/{datatable}/{apptableId}/{datatableId}</td>
<td></td>
<td><a href="#datatables_update_1M">Update Entry in
Data Table (One to Many)</a></td>
<td></td>
<td><a href="#datatables_delete_1M">Delete Entry in
Data Table (One to Many)</a></td>
</tr>
<tr>
<td><a href="#notes">Notes</a></td>
<td>{resource}/{resourceId}/notes</td>
<td><a href="#resources_addnote">Add a Resource Note</a></td>
<td><a href="#resource_notelist">Retrieve a Resource's Notes</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>{resource}/{resourceId}/notes/{noteId}</td>
<td></td>
<td><a href="#resources_retrievenote">List All
Notes for a Resource</a></td>
<td><a href="#resources_updatenote">Update a Resource Note</a></td>
<td><a href="#resources_deletenote">Delete a Resource Note</a></td>
</tr>
<tr>
<td><a href="#documents">Documents</a></td>
<td>{entityType}/{entityId}/documents</td>
<td><a href="#documents_create">Create a Document</a></td>
<td><a href="#documents_list">List All Document Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>{entityType}/{entityId}/documents/{documentId}</td>
<td></td>
<td><a href="#documents_retrieve">Retrieve a Documents Details</a></td>
<td><a href="#documents_update">Update a Document</a></td>
<td><a href="#documents_delete">Delete a Document</a></td>
</tr>
<tr>
<td></td>
<td>{entityType}/{entityId}/documents/{documentId}/attachment</td>
<td></td>
<td><a href="#documents_retrieve_file">Retrieve
binary file associated with a
Document</a>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#search">Search</a></td>
<td>search</td>
<td></td>
<td><a href="#search_resource">Search Resources</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#advance_search">AdHoc Search</a></td>
<td>search/advance</td>
<td><a href="#advance_search_resource">Advance Search</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#survey_retrieve">Survey</a></td>
<td>survey/</td>
<td></td>
<td><a href="#survey_retrieve">List surveys</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>survey/{surveyName}</td>
<td></td>
<td><a href="#survey_details">Retrieve Survey details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>survey/{surveyName}/{clientId}</td>
<td><a href="#survey_create">Create Entry in the survey table</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Report</h2>
<div id="toc-menu-report" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#reports">Report</a></td>
<td>reports</td>
<td><a href="#reports_create">Create a Report</a></td>
<td><a href="#reports_list">List Reports</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>reports/{id}</td>
<td></td>
<td><a href="#reports_retrieve">Retrieve a Report</a></td>
<td><a href="#reports_update">Update a Report</a></td>
<td><a href="#reports_delete">Delete a Report</a></td>
</tr>
<tr>
<td><a href="#runreports">Run Report</a></td>
<td>runreports/{reportName}</td>
<td></td>
<td><a href="#report_run">Run a Report</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#report_mailing_jobs">Report Mailing Job</a></td>
<td>reportmailingjob</td>
<td><a href="#report_mailing_jobs_create">Create a Report Mailing Job</a></td>
<td><a href="#report_mailing_jobs_list">List Reports Mailing Jobs</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>reportmailingjob/{id}</td>
<td></td>
<td><a href="#report_mailing_jobs_retrieve">Retrieve a Report Mailing Job</a></td>
<td><a href="#report_mailing_jobs_update">Update a Report Mailing Job</a></td>
<td><a href="#report_mailing_jobs_delete">Delete a Report Mailing Job</a></td>
</tr>
<tr>
<td></td>
<td>reportmailingjobrunhistory/{jobId}</td>
<td></td>
<td><a href="#report_mailing_job_history_list">Retrieve Reports Mailing Job History</a></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Template</h2>
<div id="toc-menu-template" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
</tr>
<tr>
<td>clients/template</td>
<td><a href="#clients_template">Retrieve Client Template</a></td>
</tr>
<tr>
<td>groups/template</td>
<td><a href="#groups_template">Retrieve Group Template</a></td>
</tr>
<tr >
<td>loanproducts/template</td>
<td><a href="#loanproducts_template">Retrieve Loan Product Template</a></td>
</tr>
<tr >
<td>loanproducts/template?isProductMixTemplate=true</td>
<td><a href="#loanproductmix_template">Retrieve Loan Product Mix Template</a></td>
</tr>
<tr>
<td>loans/template?clientId={clientId}</td>
<td><a href="#loans_template">Retrieve Loan Template</a></td>
</tr>
<tr>
<td>loans/{loanId}/transactions/template</td>
<td><a href="#loans_repaymenttemplate_etc">Retrieve Loan Transaction Template</a></td>
</tr>
<tr>
<td>charges/template</td>
<td><a href="#charges_template">Retrieve Charge Template</a></td>
</tr>
<tr>
<td>offices/template</td>
<td><a href="#offices_template">Retrieve Office Template</a></td>
</tr>
<tr>
<td>users/template</td>
<td><a href="#users_template">Retrieve User Template</a></td>
</tr>
<tr>
<td>hooks/template</td>
<td><a href="#hooks_template">Retrieve Hooks Template</a></td>
</tr>
<tr>
<td>audits/searchtemplate</td>
<td><a href="#audits_searchtemplate">Retrieve Audit Search Template</a></td>
</tr>
<tr>
<td>makercheckers/searchtemplate</td>
<td><a href="#makercheckers_searchtemplate">Retrieve Maker Checker Search Template</a></td>
</tr>
<tr>
<td>reports/template</td>
<td><a href="#reports_template">Retrieve Report Template</a></td>
</tr>
<tr>
<td>accountingrules/template</td>
<td><a href="#accountingrules_template">Retrieve Accounting Rule Template</a></td>
</tr>
<tr >
<td>savingproducts/template</td>
<td><a href="#savingsproducts_template">Retrieve Savings Product Template</a></td>
</tr>
<tr>
<td>savingsaccounts/template?clientId={clientId}</td>
<td><a href="#savingsaccounts_template">Retrieve savings template</a></td>
</tr>
<tr>
<td>savingsaccounts/{accountId}/transactions/template</td>
<td><a href="#savingsaccounts_transactions_template">Retrieve savings account transaction template</a></td>
</tr>
<tr>
<td>standinginstructions/template</td>
<td><a href="#standinginstruction_template">Retrieve Standing Instruction Template</a></td>
</tr>
<tr>
<td>accounttransfers/template</td>
<td><a href="#accounttransfers_template">Retrieve Account Transfer Template</a></td>
</tr>
</table>
</div>
</div>
</div>
<!-- API documentation for SPM Framework -->
<div class="flybar-nav">
<h2 class="flybar-button">SPM</h2>
<div id="toc-menu-report" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#surveys">Survey</a></td>
<td>surveys</td>
<td><a href="#surveys_create">Create a Survey</a></td>
<td><a href="#surveys_list">List Surveys</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>surveys/{id}</td>
<td></td>
<td><a href="#surveys_retrieve">Retrieve a Survey</a></td>
<td></td>
<td><a href="#surveys_delete">Deactivate a Survey</a></td>
</tr>
<tr>
<td><a href="#lookuptables">Lookup Table</a></td>
<td>surveys/{id}/lookuptables</td>
<td><a href="#lookuptables_create">Create a Lookup Table entry</a></td>
<td><a href="#lookoptables_list">List Lookup Table entries</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>surveys/{id}/lookuptables/{id}</td>
<td></td>
<td><a href="#lookuptables_retrieve">Retrieve an Entry</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#scorecards">Scorecard</a></td>
<td>surveys/{id}/scorecards</td>
<td><a href="#scorecards_create">Create a Scorecard entry</a></td>
<td><a href="#scorecards_list">List Scorecard entries</a></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<!-- API documentation for Customer Self Service APIs -->
<div class="flybar-nav">
<h2 class="flybar-button">Self Service</h2>
<div id="toc-menu-report" class="flybar-menu">
<div class="tocMatrix">
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex
update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#selfbasicauth">Authentication HTTP Basic</a></td>
<td>self/authentication</td>
<td></td>
<td><a href="#selfbasicauth">Verify Authentication</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#selfoauth">Authentication Oauth2</a></td>
<td>self/userdetails</td>
<td></td>
<td><a href="#selfoauth">Fetch Authenticated User Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#selfuser">Update User</a></td>
<td>self/user</td>
<td></td>
<td></td>
<td><a href="#selfuser">Update User</a></td>
<td></td>
</tr>
<tr>
<td><a href="#selflistclients">Clients</a></td>
<td>self/clients</td>
<td></td>
<td><a href="#selflistclients">List Clients</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}</td>
<td></td>
<td><a href="#selfclient">Retrieve Client</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}/accounts</td>
<td></td>
<td><a href="#selfclientsaccounts">Retrieve Client Accounts Overview</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}/images</td>
<td></td>
<td><a href="#selfclientsimages">Retrieve Client Image</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}/charges</td>
<td></td>
<td><a href="#selfclientscharges">List Client Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}/charges/{chargeId}</td>
<td></td>
<td><a href="#selfclientscharge">Retrieve a Client Charge</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}/transactions</td>
<td></td>
<td><a href="#selfclienttransactions">List Client Transactions</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/clients/{clientId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#selfclienttransaction">Retrieve a Client Transaction</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#selfloantemplate">Loans</a></td>
<td>self/loans/template?templateType=individual</td>
<td></td>
<td><a href="#selfloantemplate">Loan Application Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans?command=calculateLoanSchedule</td>
<td><a href="#selfloancalc">Calculate Loan Repayment Schedule</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans</td>
<td><a href="#selfloanapply">Submit new Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans/{loanId}</td>
<td></td>
<td><a href="#selfloan">Retrieve a Loan</a></td>
<td><a href="#selfloanupdate">Update a Loan Application</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans/{loanId}?command=withdrawnByApplicant</td>
<td><a href="#selfloanwithdraw">Withdraw Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans/{loanId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#selfloantransaction">Retrieve a Loan Transaction Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans/{loanId}/charges</td>
<td></td>
<td><a href="#selfloancharges">Retrieve Loan Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/loans/{loanId}/charges/{chargeId}</td>
<td></td>
<td><a href="#selfloancharge">Retrieve a Loan Charge Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#selfsavings">Savings</a></td>
<td>self/savingsaccounts/{accountId}</td>
<td></td>
<td><a href="#selfsavings">Retrieve a Savings Account</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/savingsaccounts/{accountId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#selfsavingstransaction">Retrieve a Savings Transaction Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/savingsaccounts/{accountId}/charges</td>
<td></td>
<td><a href="#selfsavingscharges">Retrieve Savings Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}</td>
<td></td>
<td><a href="#selfsavingscharge">Retrieve a Savings Charge Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#selftransfertemplate">Own Account Transfers</a></td>
<td>self/accounttransfers/template</td>
<td></td>
<td><a href="#selftransfertemplate">Account Transfer Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/accounttransfers</td>
<td><a href="#selftransfer">Account Transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#selfbentemplate">Beneficiary for Third Party Transfer</a></td>
<td>/self/beneficiaries/tpt/template</td>
<td></td>
<td><a href="#selfbentemplate">Beneficiary TPT Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>/self/beneficiaries/tpt</td>
<td><a href="#selfaddtpt">Add TPT Beneficiary</a></td>
<td><a href="#selfgettpt">Get TPT Beneficiary List</a></td>
<td><a href="#selfputtpt">Update TPT Beneficiary</a></td>
<td><a href="#selfdeletetpt">Delete TPT Beneficiary</a></td>
</tr>
<tr>
<td><a href="#selftpttransfertemplate">Third Party Account Transfers</a></td>
<td>self/accounttransfers/template?type="tpt"</td>
<td></td>
<td><a href="#selftpttransfertemplate">Third Party Account Transfer Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>self/accounttransfers?type="tpt"</td>
<td><a href="#selftpttransfer">Third Party Account Transfer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div id="main-content-wrapper">
<a id="top" name="top" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Apache Fineract API Documentation</h3>
<p>Apache Fineract is a secure, multi-tenanted microfinance platform.</p>
<p>
The goal of the Apache Fineract API is to empower developers to build apps
on top of the Apache Fineract Platform. The <a
href="https://demo.openmf.org" target="_blank">reference app</a>
(username: mifos, password: password) works on the same demo
'tenant' as the interactive links in this documentation.
</p>
<p>
The API is organized around <a
href="http://en.wikipedia.org/wiki/Representational_State_Transfer"
target="_blank">REST</a>.
</p>
<p>
The API is designed to have: <br> - predictable,
resource-oriented URLs<br> - to use HTTP response codes to
indicate API errors<br> - to use built-in HTTP features, like
HTTP authentication and HTTP verbs, which can be understood by
off-the-shelf HTTP clients.
</p>
<p>
<a href="http://www.json.org/" target="_blank">JSON</a> is
returned in all responses from the API, including errors.
</p>
<p>
Much of the API presentation and design ideas are owed to the
excellent <a
href="http://info.apigee.com/Portals/62317/docs/web%20api.pdf"
target="_blank">Apigee "Web API Design" eBook/PDF</a> and the
very good <a href="https://stripe.com/docs/api" target="_blank">Stripe
API reference</a>.
</p>
</div>
</div>
<a id="interact" name="interact" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Try The API From Your Browser</h3>
<p>GET (read) examples can be run directly from this
documentation. It is just a matter of clicking a link. Most
browsers display the output on the same page (or another tab if
you right click and select that option). Internet Explorer will
probably treat the output as if you wanted to download a file. In
that case just elect to open the output in a text editor.</p>
<p>
If you want to check out the POST, PUT and DELETE (update)
examples a good approach is to take a moment to install a REST
plugin for your browser e.g. <a
href="https://addons.mozilla.org/en-US/firefox/addon/restclient/"
target="_blank">RESTClient</a> for FireFox
</p>
The REST plugins will allow you to
<ul>
<li class=normalli>Select the "Verb" (e.g. POST)</li>
<li class=normalli>Enter the resource name (e.g. offices)</li>
<li class=normalli>Add a header to indicate you are sending
JSON data as part of the request body (Content-Type:
application/json)</li>
<li class=normalli>Add a header to indicate your 'tenant'
(X-Mifos-Platform-TenantId: default)</li>
<li class=normalli>Paste the example JSON into a Request Body</li>
<li class=normalli>Send the Request (and receive a Response)</li>
</ul>
</div>
</div>
<a id="genopts" name="genopts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Generic Options</h3>
<h4>Convenience Templates</h4>
<p>There are a list of convenience resources (see Template
menu option). These resources end with "/template" and can be
useful when building maintenance user interface screens for client
applications. The template data returned may consist of any or all
of:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>
Also, many "Retrieve a" type resources (<a
href="#clients_retrieve">Retrieve a Client</a> for example) allow
the parameter option "template=true". This appends any "Allowed
Value Lists" which can be useful when building update
functionality.
</p>
<h4>Restrict Returned Fields</h4>
<p>Parameter "fields={fieldlist}" can be used on GET requests
to restrict the fields returned.</p>
<p>Normal Request:</p>
<div class=apiClickNotPretty>offices/1</div>
<p></p>
<p>Request (restricting fields returned):</p>
<div class=apiClick>offices/1?fields=id,name</div>
<p></p>
<h4>Pretty JSON Formatting</h4>
<p>Parameter "pretty=true" can be used to display JSON from GET
requests in an easy-to-read format. This parameter is used in this
documentation.</p>
<p>Easy-to-read JSON output for POSTs, PUTs and DELETEs will
available in the REST plugin you use e.g. RESTClient for FireFox</p>
<p>Normal Request (with pretty printing/formatting):</p>
<div class=apiClick>offices/1?pretty=true</div>
<p></p>
</div>
</div>
<a id="creates_and_updates" name="creates_and_updates"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Creating and Updating</h3>
<p>When you want to 'Create a ...' you have to at least supply
the mandatory fields. The mandatory fields are listed in this
documentation under the relevant 'Create a ...' heading.</p>
<p>When you want to 'Update a ...' you can update individual
fields or a combination of fields (subject to data integrity
rules).</p>
</div>
</div>
<a id="dates_and_numbers" name="dates_and_numbers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Updating Dates and Numbers</h3>
<h4>Dates</h4>
<p>
Dates are returned in GET requests as an array e.g. [ 2007, 4,
11]. However, the API accepts them as strings in POST and PUT
requests. If there are any dates in your POST or PUT requests, you
need to provide the "locale" and "dateFormat". This can be any
date pattern supported by <a
href="http://joda-time.sourceforge.net/api-release/org/joda/time/format/DateTimeFormat.html">Joda-Time</a>.
This capability can help you when saving data in your client
application as you shouldn't need to do any date format conversion
prior to issuing your POST or PUT request.
</p>
<code>JSON examples:
{
"locale": "en_US",
"dateFormat": "dd MMMM yyyy",
"openingDate": "01 July 2007"
}
{
"locale": "en_US",
"dateFormat": "yyyy-MM-dd",
"openingDate": "2007-03-21"
}
</code>
<h4>Numbers</h4>
<p>You must provide a "locale" when updating numbers. Numbers
are not "Ids" or "Types" but are typically money amounts or
percentages that relate to loans. In any case, the API will send
back an error message if you forget.</p>
<code>JSON examples:
{
"locale": "en_US",
"principal": "240,400.88"
}
{
"locale": "fr_CH",
"principal": "240 400.88"
}
</code>
</div>
</div>
<a id="field_descriptions" name="field_descriptions"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Field Descriptions</h3>
<p>
Most fields are self-explanatory. Fields that aren't are described
under the relevant resource heading e.g. <a href="#authentication">AUTHENTICATION</a>
</p>
</div>
</div>
<a id="authentication_overview" name="authentication_overview"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication Overview</h3>
<p>
Authentication to the API can be configured to be supported via <a
href="http://en.wikipedia.org/wiki/Basic_access_authentication">HTTP
Basic Auth</a> or <a href="http://tools.ietf.org/html/rfc6749">OAuth2</a>.
</p>
<p>
Default authentication is using HTTP Basic Auth. Oauth2 can be enabled by using <i>-Psecurity=oauth</i> option on gradle build command , refer
the platform setup <a href="https://github.com/openMF/mifosx/wiki/Launching-platform-server-locally-from-the-command-line#choosing-authentication-mechanism"> wiki</a> for additional details.
</p>
<p>
Optionally, two-factor authentication can be enabled by using
<i>-Ptwofactor=enabled</i> on gradle build.
Details of the authentication workflow with two-factor authentication enabled can be found <a href="#twofactor">here</a>.
</p>
<p>
The platform has been configured to reject plain HTTP requests and
to expect all API requests to be made over <a
href="http://en.wikipedia.org/wiki/HTTP_Secure">HTTPS</a>. All
requests must be authenticated.
</p>
</div>
<div class="method-example">
</div>
</div>
<a id="authentication_basicauth" name="authentication_basicauth"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication HTTP Basic</h3>
<p>
Authentication to the API occurs via <a
href="http://en.wikipedia.org/wiki/Basic_access_authentication">HTTP
Basic Auth</a>.
</p>
</div>
<div class="method-example">
<code>
// A Javascript/Jquery example of how to login to Apache Fineract and use its api.
// Typically, the javascript application would
// 1) Display a login page to retrieve the username and password.
// 2) Send the username and password to a function
// such as setBasicAuthKey below which sets the HTTP Basic Auth key.
// 3) The HTTP Basic Auth key is used in all subsequent requests
// (see the function executeAjaxRequest below).
function setBasicAuthKey(username, password) {
var jqxhr = $.ajax({
url : "authentication?username=" + username + "&password=" + password,
type : 'POST',
contentType : "application/json; charset=utf-8",
dataType : 'json',
data : "{}",
cache : false,
success : function(data, textStatus, jqXHR) {
basicAuthKey = data.base64EncodedAuthenticationKey;
},
error : function(jqXHR, textStatus, errorThrown) {
//error processing
}
});
}
function executeAjaxRequest(url, verbType, jsonData, basicAuthKey, successFunction, errorFunction) {
var jqxhr = $.ajax({
url : url,
type : verbType, //POST, GET, PUT or DELETE
contentType : "application/json; charset=utf-8",
dataType : 'json',
data : jsonData,
cache : false,
beforeSend : function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + basicAuthKey);
},
success : successFunction,
error : errorFunction
});
}
</code>
</div>
</div>
<a id="authentication_oauth" name="authentication_oauth"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication Oauth2</h3>
<p>
Authentication to the API occurs via <a href="http://tools.ietf.org/html/rfc6749">OAuth2</a>. 'Resource Owner Password Credentials Grant' type is used.
</p>
</div>
<div class="method-example">
<code>
// A Javascript/Jquery example of how to login to Apache Fineract and use its api.
// Typically, the javascript application would
// 1) Display a login page to retrieve the username and password.
// 2) Send the username, password, client_id , grant_type and client_secret to a function
// such as getOauthToken below which sets the HTTP bearer Auth key.
// 3) The HTTP bearer Auth key is used in all subsequent requests
// (see the function executeAjaxRequest below).
function getOauthToken(username, password) {
var jqxhr = $.ajax({
url : "/fineract-provider/api/oauth/token?username=" + credentials.username + "&password=" + credentials.password +"&client_id=community-app&grant_type=password&client_secret=123,
type : 'POST',
contentType : "application/json; charset=utf-8",
dataType : 'json',
data : "{}",
cache : false,
success : function(data, textStatus, jqXHR) {
authKey = data.access_token;
},
error : function(jqXHR, textStatus, errorThrown) {
//error processing
}
});
}
function executeAjaxRequest(url, verbType, jsonData, authKey, successFunction, errorFunction) {
var jqxhr = $.ajax({
url : url,
type : verbType, //POST, GET, PUT or DELETE
contentType : "application/json; charset=utf-8",
dataType : 'json',
data : jsonData,
cache : false,
beforeSend : function(xhr) {
xhr.setRequestHeader("Authorization", "bearer " + authKey);
},
success : successFunction,
error : errorFunction
});
}
</code>
</div>
</div>
<a id="twofactor" name="twofactor" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Two-Factor Authentication</h3>
<p>
Two-Factor authentication is supported by requesting & verifying
one-time passwords(OTP). OTPs are sent via SMS & email.
</p>
<p>
By default, two-factor authentication is disabled by default.
More information on how to enable TFA can be found <a href="#authentication_overview">here</a>.
</p>
<p>
Two-factor authentication workflow:
<ol class="normalli">
<li class="normalli">User authticates via BasicAuth / oAauth</li>
<li>Client requests a list of supported OTP delivery methods for the authenticated user(<a href="#twofactor_deliverymethods">Get Delivery Methods</a>)</li>
<li>User selects an OTP delivery method and client sends a request for OTP(<a href="#twofactor_request">Request OTP</a>)</li>
<li>User receives an OTP and the client sends it for verification(<a href="#twofactor_validate">Validate OTP</a>)</li>
<li>If the OTP is valid, an access token is returned</li>
<li>The access token is sent in following requestes to the server as a header <i>Fineract-Platform-TFA-Token</i></li>
<li>On session end, the access token should be invalidated<a href="#twofactor_invalidate">Invalidate Access Token</a>)</li>
</ol>
</p>
<p>
Two-Factor authentication and delivery methods can be configured via
the <a href="#twofactor_configure"<i>/twofactor/configure</i> endpoint.</a>
</p>
</div>
<div class="method-example">
</div>
</div>
<a id="twofactor_deliverymethods" name="twofactor_deliverymethods" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Get Delivery Methods</h4>
<p>Returns a list of possible OTP delivery methods for the current user</p>
<p>Requires first-factor authenticated user.</p>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/twofactor</code>
<code class="method-response">
[
{
"name": "sms",
"target": "08888888888"
},
{
"name": "email",
"target": "user@example.com"
}
]</code>
</div>
</div>
<a id="twofactor_request" name="twofactor_request" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Request OTP</h4>
<p>Requests an OTP.</p>
<p>Requires first-factor authenticated user.</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>deliveryMethod</dt>
<dd>
String<span> mandatory, the delivery method name</span>
</dd>
<dt>extendedToken</dt>
<dd>
boolean<span> optional, whether to request an extended token, default false</span>
</dd>
</dl>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/twofactor?deliveryMethod=sms&extendedToken=false</code>
<code class="method-response">
{
"requestTime": 1500000000000,
"tokenLiveTimeInSec": 300,
"extendedAccessToken": false,
"deliveryMethod": {
"name": "sms",
"target": "08888888888"
}
}</code>
</div>
</div>
<a id="twofactor_validate" name="twofactor_validate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Validate OTP</h4>
<p>Validates an OTP. If the OTP is valid, an access token is created.</p>
<p>The returned access token is later sent as a header <i>Fineract-Platform-TFA-Token</i>.</p>
<p>Requires first-factor authenticated user.</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>token</dt>
<dd>
String<span> mandatory, the OTP to validate</span>
</dd>
</dl>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/twofactor/validate?token=YYYYY</code>
<code class="method-response">
{
"token": "cb0bb6e33fc540709d50a16eb2e555f9",
"validFrom": 1501530702801,
"validTo": 1501617102801
}</code>
</div>
</div>
<a id="twofactor_invalidate" name="twofactor_invalidate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Invalidate Access Token</h4>
<p>Invalidates an access token.</p>
<p>Two factor access tokens should be invalidated on logout.</p>
<p>Requires fully authenticated user.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/twofactor/invalidate</code>
<code class="method-request">
{
"token": "cb0bb6e33fc540709d50a16eb2e555f9"
}</code>
<code class="method-response">
{
"resourceIdentifier": "cb0bb6e33fc540709d50a16eb2e555f9"
}</code>
</div>
</div>
<a id="batch_api" name="batch_api" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Batch API</h3>
<p>
The Apache Fineract Batch API enables a consumer to access significant amounts of data in a single call or to make changes to several objects at once.
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.
</p>
<p>
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).
</p>
<p>
Batch API uses <a href=https://code.google.com/p/json-path/>Json Path</a> 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'.
</p>
<p>
Batch API is able to handle deeply nested dependent requests as well nested parameters. As shown in the example, requests are dependent on each other as, 1&lt--2&lt--6, i.e a nested dependency, where request '6' is not directly dependent on request '1' but still it is one of the nested child of request '1'.
In the same way Batch API could handle a deeply nested dependent value, such as {..[..{..,$.parameter_name,..}..]}.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/batches
</code>
<code class="method-request">
POST batches
Content-Type: application/json Request Body:
[
{
"requestId":1,
"relativeUrl":"clients",
"method":"POST",
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{
\"officeId\": 1,
\"firstname\": \"Petra\",
\"lastname\": \"Yton\",
\"externalId\": \"ex_externalId1\",
\"dateFormat\": \"dd MMMM yyyy\",
\"locale\": \"en\",
\"active\": true,
\"activationDate\": \"04 March 2009\",
\"submittedOnDate\": \"04 March 2009\"
}"
},
{
"requestId":2,
"relativeUrl":"loans",
"method":"POST",
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"reference":1,
"body":"{ \"dateFormat\": \"dd MMMM yyyy\",
\"locale\": \"en_GB\",
\"clientId\": \"$.clientId\",
\"productId\": 26,
\"principal\": \"10,000.00\",
\"loanTermFrequency\": 12,
\"loanTermFrequencyType\": 2,
\"loanType\": \"individual\",
\"numberOfRepayments\": 10,
\"repaymentEvery\": 1,
\"repaymentFrequencyType\": 2,
\"interestRatePerPeriod\": 10,
\"amortizationType\": 1,
\"interestType\": 0,
\"interestCalculationPeriodType\": 1,
\"transactionProcessingStrategyId\": 1,
\"expectedDisbursementDate\": \"10 Jun 2013\",
\"submittedOnDate\": \"10 Jun 2013\"
}"
},
{
"requestId":3,
"relativeUrl":"loans/$.loanId/charges",
"method":"POST",
"reference":2,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{
\"chargeId\": \"2\",
\"locale\": \"en\",
\"amount\": \"100\",
\"dateFormat\": \"dd MMMM yyyy\",
\"dueDate\": \"29 April 2013\"
}"
},
{
"requestId":4,
"relativeUrl":"loans/$.loanId/charges",
"method":"GET",
"reference":2,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{}"
}
]
</code>
<code class="method-response">
[
{
"requestId":1,
"statusCode":200,
"headers":[
{
"name":"Content-type",
"value":"text/html"
},
{
"name":"X-Mifos-Platform-TenantId",
"value":"text/html"
}
],
"body":"{\"officeId\":1,\"clientId\":909,\"resourceId\":909}"
},
{
"requestId":2,
"statusCode":200,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{\"officeId\":1,\"clientId\":909,\"loanId\":212,\"resourceId\":212}"
},
{
"requestId":3,
"statusCode":200,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{\"officeId\":1,\"clientId\":909,\"loanId\":212,\"resourceId\":155}"
},
{
"requestId":4,
"statusCode":200,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"[
{
\"id\":155,
\"chargeId\":2,
\"name\":\"Charge_Loans_GEQJC5\",
\"chargeTimeType\":{
\"id\":1,
\"code\":\"chargeTimeType.disbursement\",
\"value\":\"Disbursement\"
},
\"chargeCalculationType\":{
\"id\":2,
\"code\":\"chargeCalculationType.percent.of.amount\",
\"value\":\"% Amount\"
},
\"percentage\":100.000000,
\"amountPercentageAppliedTo\":10000.000000,
\"currency\":{
\"code\":\"USD\",
\"name\":\"USDollar\",
\"decimalPlaces\":2,
\"displaySymbol\":\"$\",
\"nameCode\":\"currency.USD\",
\"displayLabel\":\"US Dollar ($)\"
},
\"amount\":10000.000000,
\"amountPaid\":0,
\"amountWaived\":0,
\"amountWrittenOff\":0,
\"amountOutstanding\":10000.000000,
\"amountOrPercentage\":100.000000,
\"penalty\":false,
\"chargePaymentMode\":{
\"id\":0,
\"code\":\"chargepaymentmode.regular\",
\"value\":\"Regular\"
},
\"paid\":false,
\"waived\":false,
\"chargePayable\":false
}
]"
}
]
</code>
</div>
</div>
<a class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Batch requests in a single transaction</h4>
<p>
The Apache Fineract Batch API is also capable of executing all the requests in a single transaction, by setting a Query Parameter, "enclosingTransaction=true". So, if one or more of the requests in a batch returns an erroneous response all of the Data base transactions made by other successful requests will be rolled back.
</p>
<p>
If there has been a rollback in a transaction then a single response will be provided, with a '400' status code and a body consisting of the error details of the first failed request.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/batches?enclosingTransaction=true
</code>
<code class="method-request">
POST batches
Content-Type: application/json Request Body:
[
{
"requestId":1,
"relativeUrl":"clients",
"method":"POST",
"headers":[
{
"name":"Content-type",
"value":"text/html"
},
{
"name":"X-Mifos-Platform-TenantId",
"value":"text/html"
}
],
"body":"{
\"officeId\": 1,
\"firstname\": \"Petra\",
\"lastname\": \"Yton\",
\"externalId\": \"externalId_4\",
\"dateFormat\": \"dd MMMM yyyy\",
\"locale\": \"en\", \"active\": true,
\"activationDate\": \"04 March 2009\",
\"submittedOnDate\": \"04 March 2009\"
}"
},
{
"requestId":2,
"relativeUrl":"savingsaccounts",
"method":"POST",
"reference":1,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{
\"clientId\": \"$.clientId\",
\"productId\": 1,
\"locale\": \"en\",
\"dateFormat\": \"dd MMMM yyyy\",
\"submittedOnDate\": \"01 March 2011\"
}"
}
]
</code>
<code class="method-response">
Successful transaction response:
[
{
"requestId":1,
"statusCode":200,
"headers":[
{
"name":"Content-type",
"value":"text/html"
},
{
"name":"X-Mifos-Platform-TenantId",
"value":"text/html"
}
],
"body":"{\"officeId\":1,\"clientId\":922,\"resourceId\":922}"
},
{
"requestId":2,
"statusCode":200,
"headers":[
{
"name":"Content-type",
"value":"text/html"
}
],
"body":"{\"officeId\":1,\"clientId\":922,\"savingsId\":116,\"resourceId\":116}"
}
]
</code>
</div>
</div>
<a class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Batch API Errors</h4>
<p>
In Batch API without "enclosingTransaction=true", if one of the response is erroneous, then an appropriate status code will be set for that request and the error message will be returned in it's "body", while all other requests will return successful response with a status code of "200".
</p>
</div>
</div>
<a class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Available Command Strategies</h4>
<p>
These are the currently available command strategies within the Mifos Batch API. So, these listed operations can be executed using a Batch Request.
</p>
</div>
<div class="method-example">
<h6>Batch API - available commands</h6>
<ul>
<li><a href="#clients_create">Create a new Client</a>
<li><a href="#clients_update">Update an existing Client</a>
<li><a href="#loans_create">Apply a Loan to a Client</a>
<li><a href="#savingsaccounts_create">Apply Savings to a Client</a>
<li><a href="#loans_charges_create">Add a new Loan Charge</a>
<li><a href="#loans_charges_retrieve">Collect an existing Loan Charge</a>
<li><a href="#clients_activate">Activate a Pending Client</a>
<li><a href="#loans_approve">Approve a Pending Loan</a>
<li><a href="#loans_disburse">Disburse a Loan</a>
</ul>
</div>
</div>
<a id="errors" name="errors" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Errors</h3>
<p>All errors are returned in JSON.</p>
</div>
<div class="method-example">
<h6>HTTP Status Code Summary</h6>
<ul>
<li><strong>200</strong> OK - Everything Worked.</li>
<li><strong>400</strong> Bad Request - Invalid Parameter or
Data Integrity Issue.</li>
<li><strong>401</strong> Authentication Error.</li>
<li><strong>403</strong> Unauthorized Request.</li>
<li><strong>404</strong> Resource Not Found</li>
<li><strong>500</strong> Platform Internal Server Error.</li>
</ul>
</div>
<div class="method-example">
<code class="method-response">
<b>Error Message returned when attempting to create an Office without passing any parameters</b>
{
"developerMessage": "The request was invalid. This typically will happen due to validation errors which are provided.",
"developerDocLink": "https://github.com/openMF/mifosx/wiki/HTTP-API-Error-codes",
"httpStatusCode": "400",
"defaultUserMessage": "Validation errors exist.",
"userMessageGlobalisationCode": "validation.msg.validation.errors.exist",
"errors": [
{
"developerMessage": "The parameter name cannot be blank.",
"defaultUserMessage": "The parameter name cannot be blank.",
"userMessageGlobalisationCode": "validation.msg.office.name.cannot.be.blank",
"parameterName": "name",
"value": null,
"args": []
},
{
"developerMessage": "The parameter openingDate cannot be blank.",
"defaultUserMessage": "The parameter openingDate cannot be blank.",
"userMessageGlobalisationCode": "validation.msg.office.openingDate.cannot.be.blank",
"parameterName": "openingDate", "value": null, "args": []
},
{
"developerMessage": "The parameter parentId cannot be blank.",
"defaultUserMessage": "The parameter parentId cannot be blank.",
"userMessageGlobalisationCode":
"validation.msg.office.parentId.cannot.be.blank", "parameterName":
"parentId", "value": null, "args": []
}
]
}
</code>
</div>
</div>
<a id="selfservice_overview" name="selfservice_overview"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Self Service API Overview</h3>
<p>
Self Service APIs are a set of APIs with restricted data scope. Functional specifications and design can be viewed
<a href="https://mifosforge.jira.com/wiki/display/MIFOSX/Customer+Self+Service">here</a>.
</p>
<p>
While creating an <a href="#users_create">user</a>, user can be tagged as self service user. Also you can associate
clients that this user has access to. Data scope is restricted to these linked clients.
</p>
<p>
A self service user shall have access to only self service APIs. Self service APIs cannot be accessed by non-self service user. Vice-versa is also true.
</p>
</div>
<div class="method-example">
</div>
</div>
<!-- start of clients api docs -->
<a id="clients" name="clients" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Clients</h3>
<p>Clients are people and businesses that have applied (or may apply) to an MFI for loans.</p>
<p>Clients can be created in <b>Pending</b> or straight into <b>Active</b> state.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>accountNo</td>
</tr>
<tr>
<td class=fielddesc>If provided during client creation, 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.</td>
</tr>
<tr class=alt>
<td>externalId</td>
</tr>
<tr>
<td class=fielddesc>A place to put an external reference for
this client e.g. The ID another system uses.<br> If
provided, it must be unique.
</td>
</tr>
<tr class=alt>
<td>active</td>
</tr>
<tr>
<td class=fielddesc>Indicates whether this client is to be created as <b>active</b> client. If active=true, then <b>activationDate</b> must be provided. If active=false, then the client is created as <b>pending</b>.
</td>
</tr>
<tr class=alt>
<td>activationDate</td>
</tr>
<tr>
<td class=fielddesc>The date on which the client became <b>active</b>.
</td>
</tr>
<tr class=alt>
<td>firstname</td>
</tr>
<tr>
<td class=fielddesc>Facility to break up name into parts
suitable for humans.</td>
</tr>
<tr class=alt>
<td>middlename</td>
</tr>
<tr>
<td class=fielddesc>Facility to break up name into parts
suitable for humans.</td>
</tr>
<tr class=alt>
<td>lastname</td>
</tr>
<tr>
<td class=fielddesc>Facility to break up name into parts
suitable for humans.</td>
</tr>
<tr class=alt>
<td>fullname</td>
</tr>
<tr>
<td class=fielddesc>Facility to set name of a client or
business that doesn't suit the firstname,middlename,lastname
structure.</td>
</tr>
<tr class=alt>
<td>mobileNo</td>
</tr>
<tr>
<td class=fielddesc>Optional: unique mobile number that is used by SMS or Mobile Money functionality.
</td>
</tr>
<tr class=alt>
<td>staffId</td>
</tr>
<tr>
<td class=fielddesc>The staffId of the staff member dealing with the client office. The staff member is not specifically the loan officer.</td>
</tr>
<tr class=alt>
<td>savingsProductId</td>
</tr>
<tr>
<td class=fielddesc>Optional: Default overdraft savings account of client
</td>
</tr>
<tr class=alt>
<td>datatables</td>
</tr>
<tr>
<td class=fielddesc>Facility to enrich client details.
</td>
</tr>
</table>
</div>
</div>
<a id="clients_template" name="clients_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Client Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dt>staffInSelectedOfficeOnly</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Defaults to false if not provided. If <strong>staffInSelectedOfficeOnly=true</strong> only staff
who are associated with the selected branch are returned.</dd>
<dt>commandParam</dt>
<dd>
String <span>optional</span>
</dd>
<dd>If <strong>commandParam=close</strong> retrieves all closureReasons which are associated with
<strong>"ClientClosureReason"</strong> value.</dd>
</dl>
<p>Example Request:</p>
<div class=apiClick>clients/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/template
</code>
<code class="method-response">
{
"activationDate":[2014,3,4],
"officeId":1,
"officeOptions":[{
"id":1,
"name":"Head Office",
"nameDecorated":"Head Office"
}],
"staffOptions":[{
"id":1,
"firstname":"xyz",
"lastname":"sjs",
"displayName":"sjs, xyz",
"officeId":1,
"officeName":"Head Office",
"isLoanOfficer":true,
"isActive":true
}],
"savingProductOptions":[{
"id":4,
"name":"account overdraft",
"withdrawalFeeForTransfers":false,
"allowOverdraft":false
}],
"datatables": [{
"applicationTableName": "m_client",
"registeredTableName": "Address Details",
"columnHeaderData": [{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "State",
"columnType": "varchar",
"columnLength": 25,
"columnDisplayType": "STRING",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "COUNTRY_cd_Country",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [{
"id": 17,
"value": "India",
"score": 0
}],
"columnCode": "COUNTRY"
}]
},
{
"applicationTableName": "m_client",
"registeredTableName": "Client Timeline",
"columnHeaderData": [{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Approval Data",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}]
}]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/template
</code>
<code class="method-response">
{
"activationDate":[2014,3,4],
"officeId":1,
"officeOptions":[{
"id":1,
"name":"Head Office",
"nameDecorated":"Head Office"
}],
"staffOptions":[{
"id":1,
"firstname":"xyz",
"lastname":"sjs",
"displayName":"sjs, xyz",
"officeId":1,
"officeName":"Head Office",
"isLoanOfficer":true,
"isActive":true
}],
"savingProductOptions":[{
"id":4,
"name":"account overdraft",
"withdrawalFeeForTransfers":false,
"allowOverdraft":false
}],
"datatables": [{
"applicationTableName": "m_client",
"registeredTableName": "Address Details",
"columnHeaderData": [{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "State",
"columnType": "varchar",
"columnLength": 25,
"columnDisplayType": "STRING",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "COUNTRY_cd_Country",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [{
"id": 17,
"value": "India",
"score": 0
}],
"columnCode": "COUNTRY"
}]
},
{
"applicationTableName": "m_client",
"registeredTableName": "Client Timeline",
"columnHeaderData": [{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Approval Data",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}]
}]
}
</code>
</div>
<div class="method-example">
<p>if address is enabled</p>
<code class="method-declaration">
GET https://DomainName/api/v1/clients/template
</code>
<code class="method-response">
{
"activationDate":
[
2016,
8,
11
],
"officeId": 1,
"officeOptions":
[
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"savingProductOptions":
[
],
"genderOptions":
[
{
"id": 748,
"name": "Female",
"position": 1,
"isActive": true
},
{
"id": 749,
"name": "Male",
"position": 2,
"isActive": true
}
],
"clientTypeOptions":
[
{
"id": 761,
"name": "JLG",
"position": 1,
"description": "",
"isActive": true
},
{
"id": 760,
"name": "individual",
"position": 2,
"description": "",
"isActive": true
}
],
"clientClassificationOptions":
[
],
"clientNonPersonConstitutionOptions":
[
],
"clientNonPersonMainBusinessLineOptions":
[
],
"clientLegalFormOptions":
[
{
"id": 1,
"code": "legalFormType.person",
"value": "PERSON"
},
{
"id": 2,
"code": "legalFormType.entity",
"value": "ENTITY"
}
],
"address":
{
"countryIdOptions":
[
{
"id": 802,
"name": "INDIA",
"position": 1,
"isActive": true
},
{
"id": 803,
"name": "BANGLADESH",
"position": 2,
"isActive": true
},
{
"id": 807,
"name": "UNITED STATES",
"position": 3,
"isActive": true
}
],
"stateProvinceIdOptions":
[
{
"id": 800,
"name": "MAHARASHTRA",
"position": 1,
"isActive": true
},
{
"id": 801,
"name": "GUJRAT",
"position": 2,
"isActive": true
}
],
"addressTypeIdOptions":
[
{
"id": 804,
"name": "PERMANENT ADDRESS",
"position": 1,
"isActive": true
},
{
"id": 805,
"name": "OFFICE ADDRESS",
"position": 2,
"isActive": true
},
{
"id": 806,
"name": "CURRENT ADDRESS",
"position": 3,
"isActive": true
}
]
},
"isAddressEnabled": true
},
"datatables": [{
"applicationTableName": "m_client",
"registeredTableName": "Address Details",
"columnHeaderData": [{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "State",
"columnType": "varchar",
"columnLength": 25,
"columnDisplayType": "STRING",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "COUNTRY_cd_Country",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [{
"id": 17,
"value": "India",
"score": 0
}],
"columnCode": "COUNTRY"
}]
},
{
"applicationTableName": "m_client",
"registeredTableName": "Client Timeline",
"columnHeaderData": [{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Approval Data",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}]
}]
</code>
</div>
</div>
<a id="clients_create" name="clients_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Client</h4>
<p>
<b>Note:</b>1. You can enter either:<br>
firstname/middlename/lastname - for a person (middlename is
optional) OR<br> fullname - for a business or organisation
(or person known by one name).<br>
&nbsp; &nbsp; &nbsp; 2.If address is enable(enable-address=true), then additional field <br>
called address has to be passed
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>firstname and lastname OR fullname,<br> officeId,<br> active=true and activationDate OR active=false,<br>
if(address enabled) address
</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>groupId, externalId, accountNo, staffId, mobileNo, savingsProductId, genderId, clientTypeId, clientClassificationId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients
</code>
<code class="method-request">
POST clients
Content-Type: application/json Request Body:
{
"officeId": 1,
"firstname": "Petra",
"lastname": "Yton",
"externalId": "786YYH7",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"active": true,
"activationDate": "04 March 2009",
"submittedOnDate":"04 March 2009",
"savingsProductId" : 4,
"datatables": [{
"registeredTableName": "Family Details",
"data": {
"locale": "en",
"Number of members": "5",
"Number of dependents": "3",
"No of Children": "2",
"Date of verification": "14 December 2016",
"dateFormat": "dd MMMM yyyy"
}
},
{
"registeredTableName": "Residency Address",
"data": {
"locale": "en",
"Address Line": "Basavana Gudi Road",
"Street": "Gandhi Bazaar",
"Landmark": "Aashrama",
"COUNTRY_cd_Country": 17,
"STATE_cd_State": "7",
"DISTRICT_cd_District": "13",
"Pincode": "560040"
}
}]
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1,
"savingsId": 10
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">
<p>if address is enabled</p>
POST https://DomainName/api/v1/clients
</code>
<code class="method-request">
POST clients
Content-Type: application/json Request Body:
{
"firstname": "Petra",
"lastname": "Yton",
"externalId": "786YYH7",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"active": true,
"activationDate": "04 March 2009",
"submittedOnDate":"04 March 2009",
"officeId":1,
"address":[
{
"addressTypeId": 805,
"isActive": true,
"street": "rapchik",
"stateProvinceId": 800,
"countryId": 802
}
]
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1,
"savingsId": 10
}
</code>
</div>
<div class="method-example">
<code class="method-request">
POST clients
Content-Type: application/json
Request Body:
{
"officeId": 1,
"fullname": "Client of group",
"groupId": 1,
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"active": true,
"activationDate": "04 March 2009"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"clientId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="clients_activate" name="clients_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Activate a Client</h4>
<p>Clients can be created in a <i>Pending</i> state. This API exists to enable client activation (for when a client becomes an approved member of the financial Institution).</p>
<p>If the client happens to be already active this API will result in an error.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=activate</code>
<code class="method-request">POST clients/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activationDate": "01 March 2011"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="clients_close" name="clients_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Close a Client</h4>
<p>Clients can be closed if they do not have any non-closed loans/savingsAccount. This API exists to close a client .</p>
<p>If the client have any active loans/savingsAccount this API will result in an error.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=close</code>
<code class="method-request">POST clients/1?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closureDate":"25 June 2013",
"closureReasonId":"11"
}
</code>
<code class="method-response">
{
"clientId":15,
"resourceId":15
}
</code>
</div>
</div>
<a id="clients_reject" name="clients_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reject a Client</h4>
<p>Clients can be rejected when client is in pending for activation status.</p>
<p>If the client is any other status, this API throws an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>rejectionDate, rejectionReasonId<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=reject</code>
<code class="method-request">POST clients/1?command=reject
Content-Type: application/json
Request Body:
{
"rejectionDate":"28 November 2014",
"rejectionReasonId":16,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"clientId":15,
"resourceId":15
}
</code>
</div>
</div>
<a id="clients_withdraw" name="clients_withdraw" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Withdraw a Client</h4>
<p>Client applications can be withdrawn when client is in a pending for activation status.</p>
<p>If the client is any other status, this API throws an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>withdrawalDate, withdrawalReasonId<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=withdraw</code>
<code class="method-request">POST clients/1?command=withdraw
Content-Type: application/json
Request Body:
{
"withdrawalDate":"28 November 2014",
"withdrawalReasonId":17,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":15,
"resourceId":15
}
</code>
</div>
</div>
<a id="clients_reactivate" name="clients_reactivate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reactivate a Client</h4>
<p>Clients can be reactivated after they have been closed.</p>
<p>Trying to reactivate a client in any other state throws an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>reactivationDate<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=reactivate</code>
<code class="method-request">POST clients/1?command=reactivate
Content-Type: application/json
Request Body:
{
"reactivationDate":"28 November 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"clientId":15,
"resourceId":15
}
</code>
</div>
</div>
<a id="clients_UndoRejection" name="clients_UndoRejection" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>UndoReject a Client</h4>
<p>Clients can be reactivated after they have been rejected.</p>
<p>Trying to reactivate a client in any other state throws an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>reopenedDate<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=UndoRejection</code>
<code class="method-request">POST clients/1?command=UndoRejection
Content-Type: application/json
Request Body:
{
"reopenedDate":"28 November 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"clientId":15,
"resourceId":15
}
</code>
</div>
</div>
<a id="clients_UndoWithdrawal" name="clients_UndoWithdrawal" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>UndoWithdraw a Client</h4>
<p>Clients can be reactivated after they have been withdrawn.</p>
<p>Trying to reactivate a client in any other state throws an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>reopenedDate<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=UndoWithdrawal</code>
<code class="method-request">POST clients/1?command=UndoWithdrawal
Content-Type: application/json
Request Body:
{
"reopenedDate":"28 November 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"clientId":15,
"resourceId":15
}
</code>
</div>
</div>
<a id="clients_assignStaff" name="clients_assignStaff" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Assign a Staff</h4>
<p>Allows you to assign a <i>Staff</i> for existed Client.</p>
<p>The selected Staff should belong to the same office (or an officer higher up in the hierarchy)
as the Client he manages.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=assignStaff</code>
<code class="method-request">POST clients/1?command=assignStaff
Content-Type: application/json
Request Body:
{
"staffId": "1"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1,
"changes": {"staffId":1}
}
</code>
</div>
</div>
<a id="clients_unassignStaff" name="clients_unassignStaff" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Unassign a Staff</h4>
<p>Allows you to unassign the <i>Staff</i> assigned to a Client.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=unassignStaff</code>
<code class="method-request">POST clients/1?command=unassignStaff
Content-Type: application/json
Request Body:
{
"staffId":"1"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1,
"changes": {"staffId":1}
}
</code>
</div>
</div>
<a id="clients_updateSavingsAccount" name="clients_updateSavingsAccount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Default Savings Account</h4>
<p>Allows you to modify or assign a default savings account for an existing Client.</p>
<p>The selected savings account should be one among the existing savings account for a particular customer.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=updateSavingsAccount</code>
<code class="method-request">POST clients/1?command=updateSavingsAccount
Content-Type: application/json
Request Body:
{
"savingsAccountId": "22"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"resourceId":1
,"changes":{
"savingsAccountId":22
}
}
</code>
</div>
</div>
<a id="clients_propose_transfer" name="clients_propose_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Propose a Client Transfer</h4>
<p>Allows you to propose the transfer of a <i>Client</i> to a different <i>Office</i>.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=proposeTransfer</code>
<code class="method-request">POST clients/1?command=proposeTransfer
Content-Type: application/json
Request Body:
{
"destinationOfficeId":"2",
"note":"Client Relocating to Bangalore"
}
</code>
<code class="method-response">
{
"clientId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="clients_withdraw_transfer" name="clients_withdraw_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Withdraw a Client Transfer</h4>
<p>Allows you to withdraw the proposed transfer of a <i>Client</i> to a different <i>Office</i>.</p>
<p>Withdrawal can happen only if the destination Branch (to which the transfer was
<a href="#clients_propose_transfer">proposed</a>) has not already
<a href="#clients_accept_transfer">accepted</a> the transfer proposal </p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=withdrawTransfer</code>
<code class="method-request">POST clients/1?command=withdrawTransfer
Content-Type: application/json
Request Body:
{
"note":"Sorry, data entry error"
}
</code>
<code class="method-response">
{
"clientId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="clients_reject_transfer" name="clients_reject_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reject a Client Transfer</h4>
<p>Allows the Destination Branch to reject the <a href="#clients_propose_transfer">proposed</a> Client Transfer.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=rejectTransfer</code>
<code class="method-request">POST clients/1?command=rejectTransfer
Content-Type: application/json
Request Body:
{
"note":"We cannot accept tranfers of clients having loans with less than 1 repayment left"
}
</code>
<code class="method-response">
{
"clientId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="clients_accept_transfer" name="clients_accept_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Accept a Client Transfer</h4>
<p>Allows the Destination Branch to accept the <a href="#clients_propose_transfer">proposed</a> Client Transfer.</p>
<p>The destination branch may also choose to link this client to a group (in which case, any existing active JLG loan of the client is rescheduled to match the meeting frequency of the group) and loan Officer at the time of accepting
the transfer</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=acceptTransfer</code>
<code class="method-request">POST clients/1?command=acceptTransfer
Content-Type: application/json
Request Body:
{
"destinationGroupId":"13",
"staffId":"1",
"note":"Due Diligence done and all documents received"
}
</code>
<code class="method-response">
{
"clientId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="clients_propose_and_accept_transfer" name="clients_propose_and_accept_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Propose and Accept a Client Transfer</h4>
<p>Abstraction over the <a href="#clients_propose_transfer">Propose</a> and <a href="#clients_propose_transfer">Accept</a> <i>Client Transfer</i> API's which enable a user with Data Scope over both the Target and Destination Branches to directly
transfer a Client to the destination <i>Office</i>.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}?command=proposeAndAcceptTransfer</code>
<code class="method-request">POST clients/1?command=proposeTransfer
Content-Type: application/json
Request Body:
{
"destinationOfficeId":"2",
"destinationGroupId":"13",
"staffId":"1",
"note":"Client Relocating to Bangalore"
}
</code>
<code class="method-response">
{
"clientId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="clients_retrieve" name="clients_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1</div>
<br>
<br>
<div class=apiClick>clients/1?template=true</div>
<br>
<br>
<div class=apiClick>clients/1?fields=id,displayName,officeName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}
</code>
<code class="method-response">
{
"id": 27,
"accountNo": "000000027",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2013,
1,
1
],
"firstname": "savings",
"lastname": "test",
"displayName": "savings test",
"officeId": 1,
"officeName": "Head Office",
"timeline": {
"submittedOnDate": [
2013,
1,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"activatedOnDate": [
2013,
1,
1
],
"activatedByUsername": "mifos",
"activatedByFirstname": "App",
"activatedByLastname": "Administrator"
},
"savingsProductId": 4,
"savingsProductName": "account overdraft",
"groups": []
}
</code>
</div>
</div>
<a id="client_list" name="clients_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Clients</h4>
<p>The <i>list</i> capability of clients can support <b>pagination</b> and <b>sorting</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>displayName, accountNo, officeId, officeName</span>
</dd>
<dd>Orders results by the indicated field.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides the ability to restrict list of clients returned based on the office they are associated with.</dd>
<dt>underHierarchy</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use the office hierarchy string to return all clients under a given hierarchy.</dd>
<dt>displayName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use displayName of clients to restrict results.</dd>
<dt>firstName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use firstName of clients to restrict results.</dd>
<dt>lastName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use lastName of clients to restrict results.</dd>
<dt>externalId</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use externalId of clients to restrict results.</dd>
<dt>sqlSearch</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use an sql fragment valid for the underlying client schema to filter results. e.g. display_name like %K%</dd>
<dt>orphansOnly</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>Use orphansOnly as true to list clients which are not associated to any group/parent.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>clients</div>
<br>
<div class=apiClick>clients?fields=displayName,officeName,timeline</div>
<br>
<div class=apiClick>clients?offset=10&limit=50</div>
<br>
<div class=apiClick>clients?orderBy=displayName&sortOrder=DESC</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients
</code>
<code class="method-response">
{
"totalFilteredRecords": 2,
"pageItems": [
{
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2013,
3,
1
],
"fullname": "Small shop",
"displayName": "Small shop",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 2,
"accountNo": "000000002",
"status": {
"id": 100,
"code": "clientStatusType.pending",
"value": "Pending"
},
"active": false,
"fullname": "Home Farm Produce",
"displayName": "Home Farm Produce",
"officeId": 1,
"officeName": "Head Office"
}
]
}
</code>
</div>
</div>
<a id="clients_update" name="clients_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Client</h4>
<p><b>Note:</b>You can update any of the basic attributes of a client (but not its associations) using this API. </p>
<p>Changing the relationship between a client and its office is not supported through this API. An API specific to handling <b>transfers</b> of clients between offices is available for the same.</p>
<p>The relationship between a client and a group must be removed through the <b>Groups</b> API.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/clients/{clientId}
</code>
<code class="method-request">
PUT clients/1
Content-Type: application/json
Request Body:
{
"externalId": "786444UUUYYH7"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1,
"changes": {
"externalId": "786444UUUYYH7"
}
}
</code>
</div>
</div>
<a id="clients_delete" name="clients_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Client</h4>
<p>If a client is in <i>Pending</i> state, you are allowed to <b>Delete</b> it. The delete is a 'hard delete' and cannot be recovered from. Once clients become active or have loans or savings associated with them, you cannot delete the client but you may <b>Close</b> the client if they have left the program.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/clients/{clientId}
</code>
<code class="method-request">
DELETE clients/3
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 3,
"resourceId": 3
}
</code>
</div>
</div>
<a id="clients_loansummary" name="clients_loansummary" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve client accounts overview</h4>
<p>
An example of how a loan portfolio summary can be provided. This
is requested in a specific use case of the community application.<br> It is quite reasonable to add resources like this to simplify User Interface development.
</p>
<p>Example Requests:</p>
<div class=apiClick>clients/1/accounts</div>
<br>
<br>
<div class=apiClick>clients/1/accounts?fields=loanAccounts,savingsAccounts</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/accounts
</code>
<code class="method-response">
{
"loanAccounts": [
{
"id": 1,
"accountNo": "000000001",
"externalId": "456",
"productId": 1,
"productName": "TestOne",
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"loanType": {
"id": 1,
"code": "loanType.individual",
"value": "Individual"
},
"loanCycle": 1
}
],
"savingsAccounts": [
{
"id": 7,
"accountNo": "000000007",
"productId": 2,
"productName": "Other product",
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 6,
"accountNo": "000000006",
"productId": 1,
"productName": "Passbook Savings",
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 1828.03
},
{
"id": 5,
"accountNo": "000000005",
"productId": 1,
"productName": "Passbook Savings",
"status": {
"id": 400,
"code": "savingsAccountStatusType.withdrawn.by.applicant",
"value": "Withdrawn by applicant",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": true,
"active": false,
"closed": true
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
]
}</code>
</div>
</div>
<!-- start of entity field configuration api -->
<a id="entity_field_configuration" name="entity_field_configuration" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Entity Field Configuration </h3>
<p>Entity Field configuration API is a generic and extensible <br>
wherein various entities and subentities can be related.<br>
Also it gives the user an ability to enable/disable fields,<br> add regular expression for validation</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>entity</td>
</tr>
<tr>
<td class=fielddesc>Entity to which relationship is to be established
</br> </td>
</tr>
<tr class=alt>
<td>subentity</td>
</tr>
<tr>
<td class=fielddesc>Entity which uses/relies on other entity for addional description
</td>
</tr>
<tr class=alt>
<td>field</td>
</tr>
<tr>
<td class=fielddesc>Field of the Enity which is to be configured
</td>
</tr>
<tr class=alt>
<td>validation_regex</td>
</tr>
<tr>
<td class=fielddesc>Regular expression for validating field's data
</td>
</tr>
<tr class=alt>
<td>is_enabled</td>
</tr>
<tr>
<td class=fielddesc>This is used to enable/disable field
</td>
</tr>
<tr class=alt>
<td>is_mandatory</td>
</tr>
<tr>
<td class=fielddesc>This is used to make field mandatory
</td>
</tr>
</table>
</div>
</div>
<a id="entity_field_list" name="entity_field_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/fieldconfiguration/{entity}
</code>
<code class="method-response">
[
{
"fieldConfigurationId": 1,
"entity": "ADDRESS",
"subentity": "CLIENT",
"field": "addressType",
"is_enabled": true,
"is_mandatory": false,
"validation_regex": ""
},
{
"fieldConfigurationId": 2,
"entity": "ADDRESS",
"subentity": "CLIENT",
"field": "street",
"is_enabled": true,
"is_mandatory": true,
"validation_regex": ""
},
{
"fieldConfigurationId": 3,
"entity": "ADDRESS",
"subentity": "CLIENT",
"field": "addressLine1",
"is_enabled": true,
"is_mandatory": false,
"validation_regex": ""
},
{
"fieldConfigurationId": 4,
"entity": "ADDRESS",
"subentity": "CLIENT",
"field": "addressLine2",
"is_enabled": true,
"is_mandatory": false,
"validation_regex": ""
},
{
"fieldConfigurationId": 5,
"entity": "ADDRESS",
"subentity": "CLIENT",
"field": "addressLine3",
"is_enabled": true,
"is_mandatory": false,
"validation_regex": ""
}
]
</code>
</div>
</div>
<!-- start of client address api docs -->
<a id="client_address" name="client_address" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Client Address</h3>
<p>Address module is an optional module and can be configured<br>
into the system by using GlobalConfiguration setting: enable-address.<br>
In order to activate Address module, we need to enable the configuration,<br>
enable-address by setting its value to true.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>addressTypeId</td>
</tr>
<tr>
<td class=fielddesc>Address module has the ability to store<br>
multiple types of address of clients.addressTypeId is basically a code whose value<br>
are used to store the different types of addresses.
</br> </td>
</tr>
<tr class=alt>
<td>street,addressLine1,addressLine2,addressLine3,townVillage,city,<br>
countyDistrict,stateProvinceId,<br>
countryId,postalCode,latitude,longitude,createdBy,createdOn,<br>
updatedBy,updatedOn</td>
</tr>
<tr>
<td class=fielddesc>The above are the fields of address<br>
which are configurable using settings stored for each field in<br>
m_field_configuration table.
</td>
</tr>
</table>
</div>
</div>
<a id="client_address_list" name="client_address_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List all addresses for a Client</h4>
<p>Example Requests:</p>
<div class=apiClick>client/1/addresses</div>
<br>
<br>
<div class=apiClick>clients/1/addresses?status=false,true&&type=1,2,3</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/client/{clientid}/addresses
</code>
<code class="method-response">
[
{
"client_id": 111755,
"addressType": "PERMANENT ADDRESS",
"addressId": 14,
"addressTypeId": 804,
"isActive": false,
"street": "anki's home",
"addressLine1": "test123",
"addressLine2": "iuyt",
"addressLine3": "",
"townVillage": "",
"city": "mumbai",
"countyDistrict": "",
"stateProvinceId": 801,
"countryName": "UNITED STATES",
"stateName": "GUJRAT",
"countryId": 807,
"postalCode": "400095",
"createdBy": "",
"updatedBy": ""
},
{
"client_id": 111755,
"addressType": "PERMANENT ADDRESS",
"addressId": 17,
"addressTypeId": 804,
"isActive": false,
"street": "anki's home",
"addressLine1": "",
"addressLine2": "",
"addressLine3": "",
"townVillage": "",
"city": "",
"countyDistrict": "",
"stateProvinceId": 800,
"countryName": "INDIA",
"stateName": "MAHARASHTRA",
"countryId": 802,
"postalCode": "",
"createdBy": "",
"updatedBy": ""
},
{
"client_id": 111755,
"addressType": "OFFICE ADDRESS",
"addressId": 18,
"addressTypeId": 805,
"isActive": false,
"street": "anki's office",
"addressLine1": "",
"addressLine2": "",
"addressLine3": "",
"townVillage": "",
"city": "",
"countyDistrict": "",
"stateProvinceId": 0,
"countryId": 0,
"postalCode": "",
"createdBy": "",
"updatedBy": ""
}
]
</code>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/client/{clientid}/addresses?type=804&&status=false
</code>
<code class="method-response">
[
{
"client_id": 111755,
"addressType": "PERMANENT ADDRESS",
"addressId": 14,
"addressTypeId": 804,
"isActive": false,
"street": "anki's home",
"addressLine1": "test123",
"addressLine2": "iuyt",
"addressLine3": "",
"townVillage": "",
"city": "mumbai",
"countyDistrict": "",
"stateProvinceId": 801,
"countryName": "UNITED STATES",
"stateName": "GUJRAT",
"countryId": 807,
"postalCode": "400095",
"createdBy": "",
"updatedBy": ""
}
}
]
</code>
</div>
</div>
<a id="client_address_create" name="client_address_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create an address for a Client</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>type and clientId
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/client/{clientId}/addresses?type={addressTypeId}
</code>
<code class="method-request">
POST client/1/address?type=805
Content-Type: application/json Request Body:
{
"street":"Ipca",
"addressLine1":"Kandivali",
"addressLine2":"plot47",
"addressLine3":"charkop",
"city":"Mumbai",
"stateProvinceId":800,
"countryId":802,
"postalCode":"400064"
}
</code>
<code class="method-response">
{
"resourceId":15
}
</code>
</div>
</div>
<a id="client_address_update" name="client_address_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>update an address for a Client</h4>
<p>All the address fields can be updated by using update client address API</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>type and addressId
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/client/{clientId}/addresses?type={addressTypeId}
</code>
<code class="method-request">
POST client/1/addresses?type=805
Content-Type: application/json Request Body:
{
"addressId":67,
"street":"goldensource"
}
</code>
<code class="method-response">
{
"resourceId":67
}
</code>
</div>
</div>
<!-- start of client Identifiers API docs-->
<a id="client_identifiers" name="client_identifiers" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Client Identifiers</h3>
<p>Client Identifiers refer to documents that are
used to uniquely identify a customer <br/>
Ex: Drivers License, Passport, Ration card etc
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>documentKey</td>
</tr>
<tr>
<td class=fielddesc>Number/String used to uniquely identify a particular
document (Driving License number for a driving license etc)</td>
</tr>
<tr class=alt>
<td>documentType</td>
</tr>
<tr>
<td class=fielddesc>Type of the identification document
(License, Passport Etc)</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>Any user comments to be associated
with the Client Identifier</td>
</tr>
</table>
</div>
</div>
<a id="client_identifiers_list" name="client_identifiers_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List all Identifiers for a Client</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1/identifiers</div>
<br>
<br>
<div class=apiClick>clients/1/identifiers?fields=documentKey,documentType,description</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/identifiers
</code>
<code class="method-response">
[
{
"id": 2,
"clientId": 1,
"documentType": {
"id": 3,
"name": "Drivers License"
},
"documentKey": "12345",
"description": "Issued in the year 2--7"
}
]
</code>
</div>
</div>
<a id="client_identifiers_template" name="client_identifiers_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Client Identifier Details Template</h4>
<p>This is a convenience resource useful for
building maintenance user interface screens for client
applications. The template data returned consists of any or all
of:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>clients/1/identifiers/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/identifiers/template
</code>
<code class="method-response">
{
"allowedDocumentTypes": [
{
"id": 1,
"name": "Passport",
"position": 0
},
{
"id": 2,
"name": "Id",
"position": 0
},
{
"id": 3,
"name": "Drivers License",
"position": 0
},
{
"id": 4,
"name": "Any Other Id Type",
"position": 0
}
]
}
</code>
</div>
</div>
<a id="client_identifiers_retrieve" name="client_identifiers_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client Identifier</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1/identifier/2</div>
<br>
<br>
<div class=apiClick>clients/1/identifier/2?template=true</div>
<br>
<br>
<div class=apiClick>clients/1/identifiers/2?fields=documentKey,documentType,description</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/identifiers/{identifierId}
</code>
<code class="method-response">
{
"id": 2,
"clientId": 1,
"documentType": {
"id": 3,
"name": "Drivers License"
},
"documentKey": "12345",
"description": "Issued in 2007"
}
</code>
</div>
</div>
<a id="client_identifiers_create" name="client_identifiers_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create an Identifier for a Client</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>documentKey, documentTypeId
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/identifiers
</code>
<code class="method-request">
POST clients/1/identifiers
Content-Type: application/json
Request Body:
{
"documentTypeId":"1",
"documentKey":"KA-54677",
"description":"Document has been verified"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 3
}
</code>
</div>
</div>
<a id="client_identifiers_update" name="client_identifiers_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Client Identifier</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/clients/{clientId}/identifiers/{identifierId}
</code>
<code class="method-request">
PUT clients/1/identifiers/3
Content-Type: application/json
Request Body:
{
"documentTypeId":"4",
"documentKey":"KA-94667",
"description":"Document has been updated"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 3,
"changes": {
"documentTypeId": 4,
"documentKey": "KA-94667",
"description": "Document has been updated"
}
}
</code>
</div>
</div>
<a id="client_identifiers_delete" name="client_identifiers_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Client Identifier</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/clients/{clientId}/identifiers/{identifierId}
</code>
<code class="method-request">
DELETE clients/1/identifiers/3
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 3
}
</code>
</div>
</div>
<!-- start of Client Images API docs-->
<a id="client_images" name="client_images" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Images</h3>
<p>The current API provides support for the addition of a single
image for entities like Client (URL pattern <i>/clients</i>) and Staff (URL pattern <i>/staff</i>)<br/>
Allowed formats: JPEG (.jpg or .jpeg), GIF (.gif) and PNG (.png)
</p>
<p> The API supports two different Approaches for manipulating Images
<ul>
<li><a href="http://en.wikipedia.org/wiki/Data_URI_scheme" target="_blank"> Data URI's: </a>
For easier manipulation by Javascript clients etc in supported Browsers.
</li>
<li><a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2">
Multi-part form data:</a>
Images can be uploaded using Multi part forms and downloaded as regular binary files
</li>
<br/>
</div>
</div>
<a id="client_images_retrieve" name="client_images_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Get Entity Image (DATA URI)</h4>
<p>Optional arguments are identical to those of <a href="#client_images_retrieve_binary">Get Image associated with an Entity (Binary file)</a></p>
<p>Example Requests:</p>
<div class=apiClick>clients/1/images</div>
<div class=apiClick>staff/1/images</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/images
Accept: text/plain
</code>
<code class="method-response">
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAJ1JREFUeNpi+P//PwMIA4E9EG8E4idQDGLbw+WhiiqA+D8OXAFVAzbp
DxBvB2JLIGaGYkuoGEjOhhFIHAbij0BdPgxYACMj42ogJQpifwBiXSDeC8JIbt4LxSC5DyxQjTeB
+BeaYb+Q5EBOAVutCzMJHUNNPADzzDokiYdAfAmJvwLkGeTgWQfyKZICS6hYBTwc0QL8ORSjBDhA
gAEAOg13B6R/SAgAAAAASUVORK5CYII=
</code>
</div>
</div>
<a id="client_images_retrieve_binary" name="client_images_retrieve_binary"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Get Image associated with an Entity (Binary file)</h4>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>output</dt>
<dd>
String <span>optional</span> one of <span>octet or inline_octet</span>
</dd>
<dd>The query parameter overrides the <span>"Accept" Header</span> and sets the Media Type to "application/octet-stream" <br/>
<span><b>octet :</b></span> Returns the image binary file as an attachment. The <span>Content-Disposition</span> header is set to <span>attachment;filename=somefile.ext</span> <br/>
<span><b>inline_octet :</b></span>The <span>Content-Disposition</span> header is set to <span>inline;filename=somefile.ext</span>
</dd>
<dt>maxWidth</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Triggers resizing of the image to the defined width</dd>
<dt>maxHeight</dt>
<dd>
<dd>
Integer <span>optional</span>
</dd>
</dd>
<dd>Triggers resizing of the image to the defined height</dd>
</dl>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/images
Accept: application/octet-stream
</code>
<code class="method-request">
GET clients/1/images
Accept: application/octet-stream
</code>
<code class="method-response">
<i>Not shown</i>: The corresponding binary (image) file
</code>
</div>
</div>
<a id="client_images_create" name="client_images_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Upload an Image for an Entity (Data URI)</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/images
</code>
<code class="method-request">
POST clients/1/images
Content-Type: text/plain
Request Body:
data:image/png;base64,iVBORw0KGgoAA
AANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0l
EQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6
P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {},
"resourceIdentifier": "1"
}
</code>
</div>
</div>
<a id="client_images_create_form" name="client_images_create_form" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Upload an Image for an Entity (Multi-part Form data)</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>file
</td>
</tr>
</table>
<p>
The form should contain a required named body part with the
name "file". <br/> <br/>
If you are using a HTML form, a snippet like
<small> &lt;input type="file" name="file"&gt;&lt;/input&gt; </small>
can be used for uploading the image file
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/images
</code>
<code class="method-request">
POST clients/1/images
Content-Type: multipart/form-data
Request Body: <i>Not shown</i>
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {},
"resourceIdentifier": "1"
}
</code>
</div>
</div>
<a id="client_images_update" name="client_images_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Image associated with an Entity (Data URI)</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/clients/{clientId}/images
</code>
<code class="method-request">
PUT clients/1/images
Content-Type: text/plain
Request Body:
data:image/png;base64,iVBORw0KGgoAA
AANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0l
EQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6
P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {},
"resourceIdentifier": "1"
}
</code>
</div>
</div>
<a id="client_images_update_form" name="client_images_update_form" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update an Entity's Image (Multi-part Form data)</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>file
</td>
</tr>
</table>
<p>
The form should contain a required named body part with the
name "file". <br/> <br/>
If you are using a HTML form, a snippet like
<small> &lt;input type="file" name="file"&gt;&lt;/input&gt; </small>
can be used for uploading the image file
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/clients/{clientId}/images
</code>
<code class="method-request">
PUT clients/1/images
Content-Type: multipart/form-data
Request Body: <i>Not shown</i>
</code>
</div>
</div>
<a id="client_images_delete" name="client_images_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete an Entity's Image</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/clients/{clientId}/images
</code>
<code class="method-request">
DELETE clients/1/images
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {},
"resourceIdentifier": "1"
}
</code>
</div>
</div>
<!-- Start of Administrative Units API-->
<a id="centers" name="centers" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Centers</h3>
<p><b>Centers</b> along with <b>Groups</b> are used to provided a distinctive banking distribution channel used in microfinance. Its common in areas such as Southern Asia to use Centers and Group as administrative units in <b>grameen style lending</b>. Typically groups will contain one to five people and centers themselves will be made of anywhere between 2-10 groups.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>externalId</td>
</tr>
<tr>
<td class=fielddesc>A place to put an external reference for this center e.g. The ID another system uses. If provided, it must be unique.
</td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name given to the Center.</td>
</tr>
<tr class=alt>
<td>active</td>
</tr>
<tr>
<td class=fielddesc>Indicates whether this center is to be created as <b>active</b>. If active=true, then <b>activationDate</b> must be provided. If active=false, then the center is created as <b>pending</b>.
</td>
</tr>
<tr class=alt>
<td>activationDate</td>
</tr>
<tr>
<td class=fielddesc>The date on which the center became <b>active</b>.
</td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>The officeId of the office/branch this center is administrated through.</td>
</tr>
<tr class=alt>
<td>staffId</td>
</tr>
<tr>
<td class=fielddesc>The staffId of the staff member dealing with this center. The staff member is not specifically the loan officer.</td>
</tr>
<tr class=alt>
<td>groupMembers</td>
</tr>
<tr>
<td class=fielddesc>The array of groupIds to indicate what groups are part of this center.</td>
</tr>
</table>
</div>
</div>
<a id="centers_template" name="centers_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Center Template</h4>
<p>Example Requests:</p>
<div class=apiClick>centers/template</div>
<br/>
<div class=apiClick>centers/template?officeId=2</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/centers/template
</code>
<code class="method-response">
{
"active": false,
"activationDate": [
2013,
4,
18
],
"officeId": 1,
"officeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
},
{
"id": 2,
"name": "Branch Office 1",
"nameDecorated": "....Branch Office 1"
}
],
"staffOptions": [
{
"id": 1,
"displayName": "C, Mike"
}
],
"groupMembersOptions": [
{
"id": 1,
"name": "First Group",
"externalId": "000-1A",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".1."
},
{
"id": 2,
"name": "Pending Group",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".2."
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/centers/template?officeId=2
</code>
<code class="method-response">
{
"active": false,
"activationDate": [
2013,
4,
18
],
"officeId": 2,
"officeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
},
{
"id": 2,
"name": "Branch Office 1",
"nameDecorated": "....Branch Office 1"
}
],
"staffOptions": [
{
"id": 2,
"displayName": "D, Mary"
},
{
"id": 3,
"displayName": "P, Paul"
}
]
}
</code>
</div>
</div>
<a id="centers_create" name="centers_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Center</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, officeId, active, activationDate (if active=true)</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>externalId, staffId, groupMembers</td>
</tr>
</table>
</div>
<div class="method-example">
<p>Create a center as pending with no association to groupMembers.</p>
<code class="method-declaration">
POST https://DomainName/fineract-provider/api/v1/centers
</code>
<code class="method-request">
POST centers
Content-Type: application/json Request Body:
{
"name": "First Center (No groups)",
"officeId": 1,
"active": false
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 8,
"resourceId": 8
}
</code>
</div>
<div class="method-example">
<p>Create a center as active with no association to groupMembers.</p>
<code class="method-declaration">
POST https://DomainName/fineract-provider/api/v1/centers
</code>
<code class="method-request">
POST centers
Content-Type: application/json Request Body:
{
"name": "centerwithgroup",
"officeId": 1,
"groupMembers": ["7"],
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"active": true,
"activationDate": "01 March 2011"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 9,
"resourceId": 9
}
</code>
</div>
</div>
<a id="centers_activate" name="centers_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Activate a Center</h2>
<p>Centers can be created in a <i>Pending</i> state. This API exists to enable center activation.</p>
<p>If the center happens to be already active, this API will result in an error.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/centers/{centerId}?command=activate</code>
<code class="method-request">POST centers/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activationDate": "01 March 2011"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="centers_close" name="centers_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Close a Center</h2>
<p>Centers can be closed if they don't have any non-closed groups or saving accounts.</p>
<p>If the Center has any active groups or savings accounts, this API will result in an error.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/centers/{centerId}?command=close</code>
<code class="method-request">POST centers/1?command=close
Content-Type: application/json
Request Body:
{
"closureReasonId": 32,
"closureDate": "05 May 2014",
"locale": "en",
"dateFormat": "dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="centers_associate_groups" name="centers_associate_groups" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Associate Groups</h2>
<p>This API allows associating existing groups to a center.</p>
<p>The groups are listed from the office to which the center is associated.</p>
<p>If group(s) is already associated with a center, this API will result in an error.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/centers/{centerId}?command=associateGroups</code>
<code class="method-request">POST centers/1?command=associateGroups
Content-Type: application/json
Request Body:
{
"grouptMembers":[1,2]
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"grouptMembers": [1,2]
}
</code>
</div>
</div>
<a id="centers_disassociate_groups" name="centers_disassociate_groups" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Disassociate Groups</h2>
<p>This API allows to disassociate groups from a center.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/centers/{centerId}?command=disassociateGroups</code>
<code class="method-request">POST center/1?command=disassociateGroups
Content-Type: application/json
Request Body:
{
"grouptMembers":[1,2]
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"grouptMembers": [1,2]
}
</code>
</div>
</div>
<a id="centers_accounts" name="centers_accounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Center accounts overview</h4>
<p>
An example of how a savings summary for a Center can be provided. This
is requested in a specific use case of the reference application.<br> It is quite reasonable to add resources like this to simplify User Interface development.
</p>
<p>Example Requests:</p>
<div class=apiClick>centers/9/accounts</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/centers/{centerId}/accounts
</code>
<code class="method-response">
{
"savingsAccounts": [{
"id": 16,
"accountNo": "000000016",
"productId": 1,
"productName": "Voluntary savings",
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": false,
"transferInProgress": false,
"transferOnHold": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountType": {
"id": 2,
"code": "accountType.group",
"value": "Group"
},
"timeline": {
"submittedOnDate": [2014,5,1],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator"
},
"depositType": {
"id": 100,
"code": "depositAccountType.savingsDeposit",
"value": "Savings"
}
}]
}
</code>
</div>
</div>
<a id="centers_generate_collectionsheet" name="centers_generate_collectionsheet" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Generate Collection Sheet</h4>
<p>This Api retrieves repayment details of all jlg loans under a center as on a specified meeting date.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/centers/{centerId}?command=generateCollectionSheet</code>
<code class="method-request">POST centers/10?command=generateCollectionSheet
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"calendarId":6,
"transactionDate":"04 May 2014"
}
</code>
<code class="method-response">
{
"dueDate": [2014,5,4],
"loanProducts": [{
"id": 1,
"name": "IGL",
"includeInBorrowerCycle": false,
"useBorrowerCycle": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principalVariationsForBorrowerCycle": [],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": []
}],
"groups": [{
"groupId": 1,
"groupName": "Group 1",
"staffId": 1,
"staffName": "A, Aliya",
"levelId": 2,
"levelName": "Group",
"clients": [{
"clientId": 10,
"clientName": "saving acc",
"loans": [{
"loanId": 10,
"accountId": "000000010",
"accountStatusId": 300,
"productShortName": "IGL",
"productId": 1,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principalDue": 1200.000000,
"principalPaid": 0.000000,
"interestDue": 21.360000,
"interestPaid": 0.000000,
"totalDue": 1221.360000
}],
"attendanceType": {
"id": 0,
"code": "attendanceType.invalid",
"value": "Invalid"
}
}]
}],
"attendanceTypeOptions": [{
"id": 1,
"code": "attendanceType.present",
"value": "Present"
},
{
"id": 2,
"code": "attendanceType.absent",
"value": "Absent"
},
{
"id": 3,
"code": "attendanceType.approved",
"value": "Approved"
},
{
"id": 4,
"code": "attendanceType.leave",
"value": "Leave"
},
{
"id": 5,
"code": "attendanceType.late",
"value": "Late"
}]
}
</code>
</div>
</div>
<a id="generate_individual_collection_sheet" name="generate_individual_collection_sheet" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Generate Individual Collection Sheet</h4>
<p>This Api retrieves repayment details of all individual loans under a office as on a specified meeting date.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/collectionsheet?command=generateCollectionSheet</code>
<code class="method-request">POST collectionsheet?command=generateCollectionSheet
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"transactionDate":"15 January 2015",
"officeId":3
}
</code>
<code class="method-response">
{
"dueDate": [
2015,
1,
15
],
"clients": [
{
"clientId": 74,
"clientName": "guarantee test",
"loans": [
{
"loanId": 307,
"accountId": "000000307",
"accountStatusId": 300,
"productShortName": "pr",
"productId": 60,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principalDue": 1126.23,
"principalPaid": 8873.77,
"interestDue": 0,
"interestPaid": 504.95,
"totalDue": 1126.23
}
],
"savings": [
{
"savingsId": 213,
"accountId": "000000213",
"accountStatusId": 300,
"productName": "11",
"productId": 30,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"dueAmount": 2000
}
]
}
],
"paymentTypeOptions": [
{
"id": 19,
"name": "receipt",
"position": 1,
"description": "rec"
},
{
"id": 20,
"name": "check",
"position": 2,
"description": "che"
}
]
}
</code>
</div>
</div>
<a id="centers_save_collectionsheet" name="centers_save_collectionsheet" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Save Collection Sheet</h4>
<p>This Api allows the loan officer to perform bulk repayments of JLG loans for a center on a given meeting date.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/centers/{centerId}?command=saveCollectionSheet</code>
<code class="method-request">POST centers/10?command=saveCollectionSheet
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"calendarId": 6,
"transactionDate": "04 May 2014",
"actualDisbursementDate": "04 May 2014",
"clientsAttendance": [],
"bulkDisbursementTransactions": [],
"bulkRepaymentTransactions": [{
"loanId": 10,
"transactionAmount": 1221.36
}]
}
</code>
<code class="method-response">
{
"groupId": 10,
"resourceId": 10,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"loanTransactions": [10],
"SavingsTransactions": []
}
}
</code>
</div>
</div>
<a id="save_individual_collection_sheet" name="save_individual_collection_sheet" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Save Collection Sheet</h4>
<p>This Api allows the loan officer to perform bulk repayments of individual loans and deposit of mandatory savings on a given meeting date.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/collectionsheet?command=saveCollectionSheet</code>
<code class="method-request">POST collectionsheet?command=saveCollectionSheet
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionDate": "04 May 2014",
"actualDisbursementDate": "04 May 2014",
"bulkDisbursementTransactions": [],
"bulkRepaymentTransactions": [{
"loanId": 10,
"transactionAmount": 1221.36,
"paymentTypeId":19,
"receiptNumber":"1245356"
}],
"bulkSavingsDueTransactions":[]
}
</code>
<code class="method-response">
{
"groupId": 10,
"resourceId": 10,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"loanTransactions": [15],
"SavingsTransactions": []
}
}
</code>
</div>
</div>
<a id="centers_update" name="centers_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Center</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/fineract-provider/api/v1/centers/{centerId}
</code>
<code class="method-request">
PUT centers/8
Content-Type: application/json
Request Body:
{
"name": "First Center (No groups)"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 8,
"resourceId": 8,
"changes": {
"name": "First Center (No groups) - modified"
}
}
</code>
</div>
</div>
<a id="centers_delete" name="centers_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Center</h4>
<p>A Center can be deleted if it is in <i>pending</i> state and has no association - groups, loans or savings</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/fineract-provider/api/v1/centers/{centerId}
</code>
<code class="method-request">
DELETE centers/8
</code>
<code class="method-response">
{
"resourceId":1,
"changes":{}
}
</code>
</div>
</div>
<a id="centers_retrieve" name="centers_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Center</h4>
<p>Example Requests:</p>
<div class=apiClick>centers/1</div>
<br/>
<div class=apiClick>centers/1?associations=groupMembers</div>
</div>
<div class="method-example">
<p>Retrieve an existing center with no groups information.</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/centers/8
</code>
<code class="method-response">
{
"id": 8,
"status": {
"id": 100,
"code": "groupingStatusType.pending",
"value": "Pending"
},
"active": false,
"name": "First Center (No groups)",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".8."
}
</code>
</div>
<div class="method-example">
<p>Retrieve an existing center without the details of group associations.</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/centers/9
</code>
<code class="method-response">
{
"id": 9,
"status": {
"id": 300,
"code": "groupingStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2011,
3,
1
],
"name": "centerwithgroup",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".9."
}
</code>
</div>
</div>
<a id="centers_list" name="centers_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Centers</h4>
<p>The default implementation supports <b>pagination</b> and <b>sorting</b> with the default pagination size set to 200 records. The parameter <b>limit</b> with value <b>-1</b> will return all entries.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>paged</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>If paged is <span>true</span> then results will be paginated.</dd>
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates from what result to start from.</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>displayName, accountNo, officeId, officeName</span>
</dd>
<dd>Orders the results by the field indicated.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides ability to restrict list of centers returned based on the office there associated with.</dd>
<dt>underHierarchy</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use the office hierarchy string to return all centers under a given hierarchy.</dd>
<dt>name</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use name of centers to restrict results.</dd>
<dt>externalId</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use externalId of center to restrict results.</dd>
<dt>sqlSearch</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use an sql fragment valid for the underlying center schema to filter results. e.g. display_name like %K%</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>centers</div>
<br>
<div class=apiClick>centers?fields=name,officeName,joinedDate</div>
<br>
<div class=apiClick>centers?offset=10&limit=50</div>
<br>
<div class=apiClick>centers?orderBy=name&sortOrder=DESC</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/centers?paged=true
</code>
<code class="method-response">
{
"totalFilteredRecords": 2,
"pageItems": [
{
"id": 2,
"status": {
"id": 100,
"code": "groupingStatusType.pending",
"value": "Pending"
},
"active": false,
"name": "Center 1",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".2."
},
{
"id": 3,
"status": {
"id": 100,
"code": "groupingStatusType.pending",
"value": "Pending"
},
"active": false,
"name": "Center 2",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".3."
}
]
}
</code>
</div>
</div>
<!-- End of Centers API-->
<!-- start of Groups api docs -->
<a id="groups" name="groups" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Groups</h3>
<p><b>Groups</b> 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.</p>
<p>Different styles of group lending - Joint-Liability Group, Grameen Model (Center-Group), Self-Help Groups, Village/Communal Banks)</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name given to the Group.</td>
</tr>
<tr class=alt>
<td>externalId</td>
</tr>
<tr>
<td class=fielddesc>A place to put an external reference for this group e.g. The ID another system uses. If provided, it must be unique.
</td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>The officeId of the office/branch this group is administrated through.</td>
</tr>
<tr class=alt>
<td>active</td>
</tr>
<tr>
<td class=fielddesc>Indicates whether this group is to be created as <b>active</b>. If active=true, then <b>activationDate</b> must be provided. If active=false, then the group is created as <b>pending</b>.
</td>
</tr>
<tr class=alt>
<td>activationDate</td>
</tr>
<tr>
<td class=fielddesc>The date on which the group became <b>active</b>.
</td>
</tr>
<tr class=alt>
<td>staffId</td>
</tr>
<tr>
<td class=fielddesc>The staffId of the staff member dealing with this group. The staff member is not specifically the loan officer. The staff member must be assigned to the same office as this group.</td>
</tr>
<tr class=alt>
<td>clientMembers</td>
</tr>
<tr>
<td class=fielddesc>The individual client members that make up the group. The clients must be assigned to the same office as this group.</td>
</tr>
<tr class=alt>
<td>calendarId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of the calendar to which the transaction is linked with.</td>
</tr>
<tr class=alt>
<td>transactionDate</td>
</tr>
<tr>
<td class=fielddesc>The date on which the transaction took place.</td>
</tr>
<tr class=alt>
<td>role</td>
</tr>
<tr>
<td class=fielddesc>The role to be assigned to a client.</td>
</tr>
<tr class=alt>
<td>actualDisbursementDate</td>
</tr>
<tr>
<td class=fielddesc>The date on which the actual disbursement took place.</td>
</tr>
<tr class=alt>
<td>clientsAttendance</td>
</tr>
<tr>
<td class=fielddesc>The clients attendance.</td>
</tr>
<tr class=alt>
<td>bulkRepaymentTransaction </td>
</tr>
<tr>
<td class=fielddesc>The details of any bulk repayment transactions.</td>
</tr>
<tr class=alt>
<td>bulkDisbursementTransactions </td>
</tr>
<tr>
<td class=fielddesc>The details of any bulk disbursement transactions.</td>
</tr>
<tr class=alt>
<td>datatables</td>
</tr>
<tr>
<td class=fielddesc>Facility to enrich group details.
</td>
</tr>
</table>
</div>
</div>
<a id="groups_template" name="groups_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Group Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dt>centerId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dt>staffInSelectedOfficeOnly</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Defaults to false if not provided. If <strong>staffInSelectedOfficeOnly=true</strong> only staff
who are associated with the selected branch are returned.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>groups/template</div>
<br/>
<div class=apiClick>groups/template?officeId=2</div>
<br/>
<div class=apiClick>groups/template?centerId=1</div>
<br/>
<div class=apiClick>groups/template?centerId=1&staffInSelectedOfficeOnly=true</div>
<br/>
</div>
<div class="method-example">
<p>Template to create a standard group</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/groups/template
</code>
<code class="method-response">
{
"officeId": 1,
"officeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
},
{
"id": 2,
"name": "Branch Office 1",
"nameDecorated": "....Branch Office 1"
}
],
"staffOptions": [
{
"id": 1,
"displayName": "C, Mike"
}
],
"clientOptions": [
{
"id": 1,
"displayName": "Petra Yton",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 2,
"displayName": "Small shop business",
"officeId": 1,
"officeName": "Head Office"
}
],
"datatables": [{
"applicationTableName": "m_group",
"registeredTableName": "Group Activation Data",
"columnHeaderData": [{
"columnName": "group_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "GROUPROLE_cd_Ctry",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [{
"id": 13,
"value": "Leader",
"score": 0
},
{
"id": 16,
"value": "Leader1",
"score": 0
},
{
"id": 14,
"value": "Collector",
"score": 0
}],
"columnCode": "GROUPROLE"
}]
},
{
"applicationTableName": "m_group",
"registeredTableName": "Group Enrichment",
"columnHeaderData": [{
"columnName": "group_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "name",
"columnType": "varchar",
"columnLength": 15,
"columnDisplayType": "STRING",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
}]
}]
}
</code>
</div>
<div class="method-example">
<p>Template to create a standard group with specific office known. This will return only staffOptions and clientMembersOptions relevant for the chosen office.</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/groups/template?officeId=2
</code>
<code class="method-response">
{
"officeId": 2,
"officeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
},
{
"id": 2,
"name": "Branch Office 1",
"nameDecorated": "....Branch Office 1"
}
],
"staffOptions": [
{
"id": 2,
"displayName": "D, Mary"
},
{
"id": 3,
"displayName": "P, Paul"
}
]
}
</code>
</div>
<div class="method-example">
<p>Template to create a group for an existing center. As an existing center will be assigned to an office, this will return only staffOptions and clientMembersOptions relevant for the chosen center/office.</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/groups/template?centerId=1
</code>
<code class="method-response">
</code>
</div>
</div>
<a id="groups_create" name="groups_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Group</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, officeId, active, activationDate (if active=true)</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>externalId, staffId, clientMembers</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/fineract-provider/api/v1/groups
</code>
<code class="method-request">
POST groups
Content-Type: application/json Request Body:
{
"officeId":"1",
"name":"Pending Group",
"active": false
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 2,
"resourceId": 2
}
</code>
<code class="method-request">
POST groups
Content-Type: application/json Request Body:
{
"officeId":"1",
"name":"First Group",
"externalId": "000-1A",
"clientMembers": ["1"],
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"active": true,
"activationDate": "04 March 2009",
"submittedOnDate":"04 March 2009",
"datatables": [{
"registeredTableName": "Address Details",
"data": {
"locale": "en",
"COUNTRY_cd_Country": 17
}
},
{
"registeredTableName": "Group Activation Data",
"data": {
"locale": "en",
"GROUPROLE_cd_Ctry": 13,
"Date": "01 December 2016",
"dateFormat": "dd MMMM yyyy"
}
}]
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="groups_activate" name="groups_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Activate a Group</h4>
<p>Groups can be created in a <i>Pending</i> state. This API exists to enable group activation.</p>
<p>If the group happens to be already active this API will result in an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>activationDate<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=activate</code>
<code class="method-request">POST groups/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activationDate": "01 March 2011"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="groups_associate_clients" name="groups_associate_clients" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Associate Clients</h4>
<p>This API allows to associate existing clients to a group.</p>
<p>The clients are listed from the office to which the group is associated.</p>
<p>If client(s) is already associated with group then API will result in an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>clientMembers<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=associateClients</code>
<code class="method-request">POST groups/1?command=associateClients
Content-Type: application/json
Request Body:
{
"clientMembers":[1,2]
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"clientMembers": [1,2]
}
</code>
</div>
</div>
<a id="groups_disassociate_clients" name="groups_disassociate_clients" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Disassociate Clients</h4>
<p>This API allows to disassociate clients from a group.</p>
<p>Disassociating a client with active joint liability group loans results in an error.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>clientMembers<br>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=disassociateClients</code>
<code class="method-request">POST groups/1?command=disassociateClients
Content-Type: application/json
Request Body:
{
"clientMembers":[1,2]
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"clientMembers": [1,2]
}
</code>
</div>
</div>
<a id="groups_transfer_clients" name="groups_transfer_clients" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Transfer Clients across groups</h4>
<p>This API allows to transfer clients from one group to another</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>destinationGroupId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of the group to which the clients are to be transferred (
has to be in the same branch as the source Group).</td>
</tr>
<tr class=alt>
<td>clients</td>
</tr>
<tr>
<td class=fielddesc>Identifiers of all clients who need to be transferred
</td>
</tr>
<tr class=alt>
<td>inheritDestinationGroupLoanOfficer</td>
</tr>
<tr>
<td class=fielddesc>Flag specifies if the transferred clients (and all their active loans)
should be linked to the assigned loan officer for the group
</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>destinationGroupId, clients</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>inheritDestinationGroupLoanOfficer (defaults to true), transferActiveLoans (defaults to true)</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=transferClients</code>
<code class="method-request">POST groups/1?command=transferClients
Content-Type: application/json
Request Body:
{
destinationGroupId:2,
clients:[{id:1}]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="groups_generate_collectionsheet" name="groups_generate_collectionsheet" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Generate Collection Sheet</h4>
<p>This API retrieves repayment details of all jlg loans of all members of a group on a specified meeting date.</p>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>calendarId, transactionDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=generateCollectionSheet</code>
<code class="method-request">POST groups/1?command=generateCollectionSheet
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"calendarId":6,
"transactionDate":"04 May 2014"
}
</code>
<code class="method-response">
{
"dueDate": [2014,5,4],
"loanProducts": [{
"id": 1,
"name": "IGL",
"includeInBorrowerCycle": false,
"useBorrowerCycle": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principalVariationsForBorrowerCycle": [],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": []
}],
"groups": [{
"groupId": 1,
"groupName": "Group 1",
"staffId": 1,
"staffName": "A, Aliya",
"levelId": 2,
"levelName": "Group",
"clients": [{
"clientId": 10,
"clientName": "saving acc",
"loans": [{
"loanId": 10,
"accountId": "000000010",
"accountStatusId": 300,
"productShortName": "IGL",
"productId": 1,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principalDue": 1200.000000,
"principalPaid": 0.000000,
"interestDue": 21.360000,
"interestPaid": 0.000000,
"totalDue": 1221.360000
}],
"attendanceType": {
"id": 0,
"code": "attendanceType.invalid",
"value": "Invalid"
}
}]
}],
"attendanceTypeOptions": [{
"id": 1,
"code": "attendanceType.present",
"value": "Present"
},
{
"id": 2,
"code": "attendanceType.absent",
"value": "Absent"
},
{
"id": 3,
"code": "attendanceType.approved",
"value": "Approved"
},
{
"id": 4,
"code": "attendanceType.leave",
"value": "Leave"
},
{
"id": 5,
"code": "attendanceType.late",
"value": "Late"
}]
}
</code>
</div>
</div>
<a id="groups_save_collectionsheet" name="groups_save_collectionsheet" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Save Collection Sheet</h4>
<p>This api allows the loan officer to perform bulk repayments of JLG loans for a group on its meeting date.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>calendarId, transactionDate, actualDisbursementDate</td>
</tr>
</table>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>clientsAttendance, bulkRepaymentTransaction, bulkDisbursementTransactions</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=saveCollectionSheet</code>
<code class="method-request">POST groups/1?command=saveCollectionSheet
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"calendarId": 6,
"transactionDate": "04 May 2014",
"actualDisbursementDate": "04 May 2014",
"clientsAttendance": [],
"bulkDisbursementTransactions": [],
"bulkRepaymentTransactions": [{
"loanId": 10,
"transactionAmount": 1221.36
}]
}
</code>
<code class="method-response">
{
"groupId": 1,
"resourceId": 1,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"bulkTransations": {
"loanId": 10,
"transactionAmount": 1221.36,
"transactionDate": [2014,5,4]
}
}
}
</code>
</div>
</div>
<a id="groups_unassignStaff" name="groups_unassignStaff" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Unassign a Staff</h4>
<p>Allows you to unassign the <i>Staff</i>.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>staffId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=unassignStaff</code>
<code class="method-request">POST groups/1?command=unassignStaff
Content-Type: application/json
Request Body:
{
"staffId":"1"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"changes": {}
}
</code>
</div>
</div>
<a id="groups_assignStaff" name="groups_assignStaff" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Assign a Staff</h4>
<p>Allows you to assign <i>Staff</i> to an existing Group.</p>
<p>The selected Staff should be belong to the same office (or an office higher up in the hierarchy) as this group</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>staffId</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>inheritStaffForClientAccounts</td>
</tr>
<tr>
<td class=fielddesc>Optional: Boolean if true all members of the group (i.e all clients with active loans and savings ) will inherit the staffId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=assignStaff</code>
<code class="method-request">POST groups/1?command=assignStaff
Content-Type: application/json
Request Body:
{
"staffId": "1"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"changes": {"staffId":1}
}
</code>
</div>
</div>
<a id="groups_close" name="groups_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Close a Group</h4>
<p>This API exists to close a group. Groups can be closed if they don't have any non-closed clients/loans/savingsAccounts.</p>
<p>If the group has any active clients/loans/savingsAccount, this API will result in an error.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=close</code>
<code class="method-request">POST groups/1?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closureDate":"25 June 2013",
"closureReasonId":"30"
}
</code>
<code class="method-response">
{
"groupId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="groups_assignRole" name="groups_assignRole" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Assign a Role</h4>
<p>Allows you to assign a <i>Role</i> to an existing member of a group.</p>
<p>We can define the different roles applicable to group members by adding code values to the pre-defined system code <b>GROUPROLE</b>. Example:Group leader etc.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>clientId, role</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=assignRole</code>
<code class="method-request">POST groups/1?command=assignRole
Content-Type: application/json
Request Body:
{
"clientId": "1",
"role":30
}
</code>
<code class="method-response">
{
"clientId": 1,
"groupId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="groups_unassignRole" name="groups_unassignRole" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Unassign a Role</h4>
<p>Allows you to unassign <i>Roles</i> associated tp Group members.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=unassignRole&roleId=1</code>
<code class="method-request">POST groups/1?command=unassignRole&roleId=1
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"clientId": 1,
"groupId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="groups_updateRole" name="groups_updateRole" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Role</h4>
<p>Allows you to update the member <i>Role</i>.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>role</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/groups/{groupId}?command=updateRole&roleId=2</code>
<code class="method-request">POST groups/1?command=updateRole&roleId=2
Content-Type: application/json
Request Body:
{
"role":"31"
}
</code>
<code class="method-response">
{
"groupId": 1,
"resourceId": 2,
"changes":{"role":31}
}
</code>
</div>
</div>
<a id="groups_retrieve" name="groups_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Group</h4>
<p>Retrieve group information.</p>
<dl class="argument-list">
<dt>associations</dt>
<dd>
String <span>optional</span>
</dd>
<dd>
One of, or comma separated of <span>clientMembers, activeClientMembers, groupRoles, calendars, collectionMeetingCalendar</span>
<br>
or <span>all</span> for all associations.
</dd>
<dt>staffInSelectedOfficeOnly</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>If <strong>staffInSelectedOfficeOnly=true</strong> only staff
who are associated with the selected branch are returned.</dd>
<dt>roleId</dt>
<dd>
Long <span>optional</span>
</dd>
<dd>If present, will retrieve group role information</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>groups/1</div>
<br/>
<div class=apiClick>groups/1?associations=clientMembers</div>
</div>
<div class="method-example">
<p>Group without any associations.</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/groups/1
</code>
<code class="method-response">
{
"id": 1,
"name": "First Group",
"externalId": "000-1A",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".1.",
"timeline": {
"activatedOnDate": [
2013,
11,
14
],
"activatedByUsername": "mifos",
"activatedByFirstname": "App",
"activatedByLastname": "Administrator"
}
}
</code>
</div>
<div class="method-example">
<p>Group along with all its Clients.</p>
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/groups/1?associations=clientMembers
</code>
<code class="method-response">
{
"id": 1,
"name": "First Group",
"externalId": "000-1A",
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".1.",
"timeline": {
"activatedOnDate": [
2013,
11,
14
],
"activatedByUsername": "mifos",
"activatedByFirstname": "App",
"activatedByLastname": "Administrator"
},
"clientMembers": [
{
"id": 1,
"accountNo": "000000001",
"externalId": "786YYH7",
"activationDate": [
2009,
3,
4
],
"firstname": "Petra",
"lastname": "Yton",
"displayName": "Petra Yton",
"officeId": 1,
"officeName": "Head Office"
}
]
}
</code>
</div>
</div>
<!--Start of Group account summary -->
<a id="groups_accounts" name="groups_accounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Group accounts overview</h4>
<p>
Retrieves details of all Loan and Savings accounts associated with this group.
</p>
<p>Example Requests:</p>
<div class=apiClick>groups/1/accounts</div>
<br>
<br>
<div class=apiClick>groups/1/accounts?fields=loanAccounts,savingsAccounts,memberLoanAccounts,<br> memberSavingsAccounts</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/groups/{groupId}/accounts
</code>
<code class="method-response">
{
"loanAccounts": [
{
"id": 3,
"accountNo": "000000003",
"productId": 3,
"productName": "daily product",
"status": {
"id": 100,
"code": "loanStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"pendingApproval": true,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"loanType": {
"id": 2,
"code": "accountType.group",
"value": "Group"
}
}
],
"savingsAccounts": [
{
"id": 9,
"accountNo": "000000009",
"productId": 1,
"productName": "p_sav",
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountType": {
"id": 2,
"code": "accountType.group",
"value": "Group"
}
},
{
"id": 4,
"accountNo": "000000004",
"productId": 1,
"productName": "p_sav",
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountType": {
"id": 2,
"code": "accountType.group",
"value": "Group"
}
}
],
"memberLoanAccounts": [
{
"id": 4,
"accountNo": "000000004",
"productId": 1,
"productName": "testLoan",
"status": {
"id": 200,
"code": "loanStatusType.approved",
"value": "Approved",
"pendingApproval": false,
"waitingForDisbursal": true,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"loanType": {
"id": 3,
"code": "accountType.jlg",
"value": "JLG"
}
},
{
"id": 7,
"accountNo": "000000007",
"productId": 2,
"productName": "weekly product",
"status": {
"id": 100,
"code": "loanStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"pendingApproval": true,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"loanType": {
"id": 3,
"code": "accountType.jlg",
"value": "JLG"
}
}
],
"memberSavingsAccounts": [
{
"id": 3,
"accountNo": "000000003",
"productId": 1,
"productName": "p_sav",
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountType": {
"id": 3,
"code": "accountType.jlg",
"value": "JLG"
}
},
{
"id": 10,
"accountNo": "000000010",
"productId": 1,
"productName": "p_sav",
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountType": {
"id": 3,
"code": "accountType.jlg",
"value": "JLG"
}
}
]
}
</code>
</div>
</div>
<!--End of Group account summary -->
<a id="groups_update" name="groups_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Group</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/fineract-provider/api/v1/groups/{groupid}
</code>
<code class="method-request">
PUT groups/1
Content-Type: application/json
Request Body:
{
"name": "First Group (changed)"
}
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 1,
"resourceId": 1,
"changes": {
"name": "First Group (changed)"
}
}
</code>
</div>
</div>
<a id="groups_delete" name="groups_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Group</h4>
<p>A group can be deleted if it is in <i>pending</i> state and has no associations - clients, loans or savings</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/fineract-provider/api/v1/groups/{groupid}
</code>
<code class="method-request">
DELETE groups/2
</code>
<code class="method-response">
{
"officeId": 1,
"groupId": 2,
"resourceId": 2
}
</code>
</div>
</div>
<a id="groups_list" name="groups_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Groups</h4>
<p>The default implementation of <i>listing Groups</i> returns 200 entries with support for <b>pagination</b> and <b>sorting</b>. Using the parameter <b>limit</b> with value <b>-1</b> returns all entries.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>paged</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>If paged is <span>true</span> then results will be paginated.</dd>
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates from what result to start from.</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>displayName, accountNo, officeId, officeName</span>
</dd>
<dd>Orders the results by the field indicated.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides ability to restrict list of groups returned based on the office there associated with.</dd>
<dt>underHierarchy</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use the office hierarchy string to return all groups under a given hierarchy.</dd>
<dt>name</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use name of groups to restrict results.</dd>
<dt>externalId</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use externalId of groups to restrict results.</dd>
<dt>sqlSearch</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use an sql fragment valid for the underlying group schema to filter results. e.g. display_name like %K%</dd>
<dt>orphansOnly</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>Use orphansOnly as true to list groups which are not associated to any center/parent.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>groups</div>
<br>
<div class=apiClick>groups?fields=name,officeName,joinedDate</div>
<br>
<div class=apiClick>groups?offset=10&limit=50</div>
<br>
<div class=apiClick>groups?orderBy=name&sortOrder=DESC</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/groups?paged=true
</code>
<code class="method-response">
{
"totalFilteredRecords": 2,
"pageItems": [
{
"id": 4,
"name": "AnotherGroup",
"status": {
"id": 100,
"code": "clientStatusType.pending",
"value": "Pending"
},
"active": false,
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".4."
}
]
}
</code>
</div>
</div>
<!-- end of group api docs -->
<!-- start of loans api docs -->
<a id="loans" name="loans" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loans</h3>
<p>The API concept of <b>loans</b> models the <b>loan application process</b> and the <b>loan contract/monitoring process</b>.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>accountNo</td>
</tr>
<tr>
<td class=fielddesc>The account no. associated with this loan. Is auto generated if not provided at loan application creation time.</td>
</tr>
<tr class=alt>
<td>externalId</td>
</tr>
<tr>
<td class=fielddesc>A place to put an external reference for
this loan e.g. The ID another system uses.<br> If provided,
it must be unique.
</td>
</tr>
<tr class=alt>
<td>fundId</td>
</tr>
<tr>
<td class=fielddesc>Optional: For associating a loan with a given fund.</td>
</tr>
<tr class=alt>
<td>loanOfficerId</td>
</tr>
<tr>
<td class=fielddesc>Optional: For associating a loan with a given staff member who is a loan officer.</td>
</tr>
<tr class=alt>
<td>loanPurposeId</td>
</tr>
<tr>
<td class=fielddesc>Optional: For marking a loan with a given loan purpose option. Loan purposes are configurable and can be setup by system admin through code/code values screens.</td>
</tr>
<tr class=alt>
<td>principal</td>
</tr>
<tr>
<td class=fielddesc>The loan amount to be disbursed to through loan.</td>
</tr>
<tr class=alt>
<td>loanTermFrequency</td>
</tr>
<tr>
<td class=fielddesc>The length of loan term<br> Used like:
<b>loanTermFrequency</b> loanTermFrequencyType<br> e.g. <b>12</b> Months
</td>
</tr>
<tr class=alt>
<td>loanTermFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>The loan term period to use. Used like:
loanTermFrequency <b>loanTermFrequencyType</b><br> e.g. 12 <b>Months</b>
<span>Example Values:</span> 0=Days, 1=Weeks, 2=Months, 3=Years
</td>
</tr>
<tr class=alt>
<td>numberOfRepayments</td>
</tr>
<tr>
<td class=fielddesc>Number of installments to repay.<br>
Used like: <b>numberOfRepayments</b> Every <i>repaymentEvery</i>
<i>repaymentFrequencyType</i><br> e.g. <b>10</b> (repayments) Every 12 Weeks
</td>
</tr>
<tr class=alt>
<td>repaymentEvery</td>
</tr>
<tr>
<td class=fielddesc>Used like: numberOfRepayments Every
<b>repaymentEvery</b> repaymentFrequencyType<br> e.g. 10
(repayments) Every <b>12</b> Weeks
</td>
</tr>
<tr class=alt>
<td>repaymentFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>Used like: <i>numberOfRepayments</i> Every
repaymentEvery <b>repaymentFrequencyType</b><br> e.g. 10
(repayments) Every 12 <b>Weeks</b> <br>
<span>Example Values:</span> 0=Days, 1=Weeks, 2=Months
</td>
</tr>
<tr class=alt>
<td>interestRatePerPeriod</td>
</tr>
<tr>
<td class=fielddesc>Interest Rate.<br> Used like:
<b>interestRatePerPeriod</b> % interestRateFrequencyType - interestType<br>
e.g. <b>12.0000</b>% Per year - Declining Balance
</td>
</tr>
<tr class=alt>
<td>interestRateFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>Used like: interestRatePerPeriod%
interestRateFrequencyType - interestType<br> e.g. 12.0000%
<b>Per year</b> - Declining Balance <br>
<span>Example Values:</span> 2=Per month, 3=Per year
</td>
</tr>
<tr class=alt>
<td>graceOnPrincipalPayment</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the number of repayment periods that grace should apply to the principal component of a repayment period.
</td>
</tr>
<tr class=alt>
<td>graceOnInterestPayment</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the number of repayment periods that grace should apply to the interest component of a repayment period. Interest is still calculated but offset to later repayment periods.
</td>
</tr>
<tr class=alt>
<td>graceOnInterestCharged</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the number of repayment periods that should be interest-free.
</td>
</tr>
<tr class=alt>
<td>graceOnArrearsAgeing</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - Used in Arrears calculation to only take into account loans that are more than graceOnArrearsAgeing days overdue.
</td>
</tr>
<tr class=alt>
<td>interestChargedFromDate</td>
</tr>
<tr>
<td class=fielddesc>Optional: Date - The date from with interest is to start being charged.</td>
</tr>
<tr class=alt>
<td>expectedDisbursementDate</td>
</tr>
<tr>
<td class=fielddesc>The proposed <b>disbursement date</b> of the loan so a proposed repayment schedule can be provided.</td>
</tr>
<tr class=alt>
<td>submittedOnDate</td>
</tr>
<tr>
<td class=fielddesc>The date the <b>loan application</b> was submitted by applicant.</td>
</tr>
<tr class=alt>
<td>linkAccountId</td>
</tr>
<tr>
<td class=fielddesc>The Savings Account id for linking with loan account for payments.</td>
</tr>
<tr class=alt>
<td>amortizationType</td>
</tr>
<tr>
<td class=fielddesc><span>Example Values:</span> 0=Equal
principle payments, 1=Equal installments</td>
</tr>
<tr class=alt>
<td>interestType</td>
</tr>
<tr>
<td class=fielddesc>Used like: interestRatePerPeriod%
interestRateFrequencyType - interestType<br> e.g. 12.0000%
Per year - <b>Declining Balance</b> <br>
<span>Example Values:</span> 0=Declining Balance, 1=Flat
</td>
</tr>
<tr class=alt>
<td>interestCalculationPeriodType</td>
</tr>
<tr>
<td class=fielddesc><span>Example Values:</span> 0=Daily, 1=Same as repayment period</td>
</tr>
<tr class=alt>
<td>allowPartialPeriodInterestCalcualtion</td>
</tr>
<tr>
<td class=fielddesc>This value will be supported along with interestCalculationPeriodType as Same as repayment period to calculate interest for partial periods.
<span>Example:</span> Interest charged from is 5th of April , Principal is 10000 and interest is 1% per month then the interest will be (10000 * 1%)* (25/30) , it calculates for the month first then calculates exact periods between start date and end date(can be a decimal)
</td>
</tr>
<tr class=alt>
<td>inArrearsTolerance</td>
</tr>
<tr>
<td class=fielddesc>The amount that can be 'waived' at end
of all loan payments because it is too small to worry about.<br>
This is also the tolerance amount assessed when determining if a
loan is in arrears.
</td>
</tr>
<tr class=alt>
<td>transactionProcessingStrategyId</td>
</tr>
<tr>
<td class=fielddesc>
An enumeration that indicates the type of transaction processing strategy to be used. This relates to functionality that is also known as <b>Payment Application Logic</b>.
<p>A number of out of the box approaches exist, some are custom to specific MFIs, some are more general and indicate the order in which payments are processed.</p>
<p>Refer to the <a href="#paymentapplicationlogic">Payment Application Logic / Transaction Processing Strategy<a> section in the appendix for more detailed overview of each available <b>payment application logic</b> provided out of the box.</p>
<i>List of current approaches</i>:<br/>
<ul>
<li>1 = Mifos style (Similar to Old Mifos)</li>
<li>2 = Heavensfamily (Custom MFI approach)</li>
<li>3 = Creocore (Custom MFI approach)</li>
<li>4 = RBI (India)</li>
<li>5 = Principal Interest Penalties Fees Order</li>
<li>6 = Interest Principal Penalties Fees Order</li>
<li>7 = Early Payment Strategy</li>
</ul>
</ul>
</td>
</tr>
<tr class=alt>
<td>loanType</td>
</tr>
<tr>
<td class=fielddesc>To represent different type of loans.<br>
At present there are three type of loans are supported.
<br>Available loan types:
<ol>
<li><b>individual</b>: Loan given to individual member</li>
<li><b>group</b>: Loan given to group as a whole</li>
<li><b>jlg</b>: Joint liability group loan given to members in a group on individual basis. JLG loan can be given to one or more members in a group.</li>
</ol>
</td>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyDate</td>
</tr>
<tr>
<td class=fielddesc>Specifies rest frequency start date for interest recalculation. This date must be before or equal to disbursement date
</td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyDate</td>
</tr>
<tr>
<td class=fielddesc>Specifies compounding frequency start date for interest recalculation. This date must be equal to disbursement date
</td>
</tr>
</table>
</div>
</div>
<a id="loans_template" name="loans_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Loan Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>templateType</dt>
<dd>
String <span>mandatory</span>, allowed values are <span>individual, group, jlg, jlgbulk</span>
</dd>
<dd>
<br>templateType value decides the required template data for creating a new loan application.
</dd>
<dd>
<br><b>'individual':</b> Loan template data for creating individual loans.
</dd>
<dd>
<b>'group':</b> Loan template data for creating a group loan (loan given to group as a whole).
</dd>
<dd>
<b>'jlg':</b> Loan template data for creating a Joint liability group loan for a client.
</dd>
<dd>
<b>'jlgbulk':</b> Loan template data for creating a Joint liability group loan for multiple clients at a time in a group.
</dd>
<dt>clientId</dt>
<dd>
Integer <span>mandatory</span>
</dd>
</dl>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>productId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>If entered, productId, productName and selectedProduct
fields are returned.</dd>
<dt>staffInSelectedOfficeOnly</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Defaults to false if not provided. If <strong>staffInSelectedOfficeOnly=true</strong> only loan officers
who are associated with the selected branch are returned.</dd>
<dt>activeOnly</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Defaults to false if not provided. If <strong>activeOnly=true</strong> only active loan products are returned.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>loans/template?templateType=individual&clientId=1</div>
<br>
<br>
<div class=apiClick>loans/template?templateType=individual&clientId=1&productId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/template?templateType=individual&clientId=1
</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "Kampala first Client",
"clientOfficeId": 2,
"timeline": {
"expectedDisbursementDate": [
2013,
3,
8
]
},
"productOptions": [
{
"id": 1,
"name": "Kampala Product (with cash accounting)"
}
]
}
</code>
<code class="method-declaration">
GET https://DomainName/api/v1/loans/template?templateType=individual&clientId=1&productId=1
</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "Kampala first Client",
"clientOfficeId": 2,
"loanProductId": 1,
"loanProductName": "Kampala Product (with cash accounting)",
"loanProductDescription": "Typical Kampala loan product with cash accounting enabled for testing.",
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"principal": 1000000,
"termFrequency": 12,
"termPeriodFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"interestRatePerPeriod": 24,
"interestRateFrequencyType": {
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
},
"annualInterestRate": 24,
"amortizationType": {
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
"interestType": {
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
"interestCalculationPeriodType": {
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
},
"transactionProcessingStrategyId": 2,
"timeline": {
"expectedDisbursementDate": [
2013,
3,
8
]
},
"daysInMonthType": {
"id": 30,
"code": "DaysInMonthType.days360",
"value": "30 Days"
},
"daysInYearType": {
"id": 360,
"code": "DaysInYearType.days360",
"value": "360 Days"
},
"isInterestRecalculationEnabled": true,
"interestRecalculationData": {
"interestRecalculationCompoundingType": {
"id": 2,
"code": "interestRecalculationCompoundingMethod.fee",
"value": "Fee"
},
"recalculationCompoundingFrequencyType": {
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
},
"rescheduleStrategyType": {
"id": 2,
"code": "loanRescheduleStrategyMethod.reduce.number.of.installments",
"value": "Reduce number of installments"
},
"recalculationRestFrequencyType": {
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
}
}
"charges": [],
"productOptions": [
{
"id": 1,
"name": "Kampala Product (with cash accounting)"
}
],
"loanOfficerOptions": [
{
"id": 2,
"firstname": "Kampala",
"lastname": "LoanOfficer",
"displayName": "LoanOfficer, Kampala",
"officeId": 2,
"officeName": "Uganda (Kampala)",
"isLoanOfficer": true
}
],
"loanPurposeOptions": [
{
"id": 20,
"name": "option.Agriculture",
"position": 1
},
{
"id": 21,
"name": "option.Manufacturing",
"position": 20
},
{
"id": 22,
"name": "option.HousingImprovement",
"position": 21
}
],
"termFrequencyTypeOptions": [
{
"id": 0,
"code": "loanTermFrequency.periodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "loanTermFrequency.periodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "loanTermFrequency.periodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "loanTermFrequency.periodFrequencyType.years",
"value": "Years"
}
],
"repaymentFrequencyTypeOptions": [
{
"id": 0,
"code": "repaymentFrequency.periodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "repaymentFrequency.periodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
}
],
"interestRateFrequencyTypeOptions": [
{
"id": 2,
"code": "interestRateFrequency.periodFrequencyType.months",
"value": "Per month"
},
{
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
}
],
"amortizationTypeOptions": [
{
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
{
"id": 0,
"code": "amortizationType.equal.principal",
"value": "Equal principle payments"
}
],
"interestTypeOptions": [
{
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
{
"id": 0,
"code": "interestType.declining.balance",
"value": "Declining Balance"
}
],
"interestCalculationPeriodTypeOptions": [
{
"id": 0,
"code": "interestCalculationPeriodType.daily",
"value": "Daily"
},
{
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
}
],
"transactionProcessingStrategyOptions": [
{
"id": 2,
"code": "heavensfamily-strategy",
"name": "Heavensfamily"
}
],
"chargeOptions": [
{
"id": 1,
"name": "Bank Fee (per installment)",
"active": true,
"penalty": false,
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"amount": 1500,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
}
],
"loanCollateralOptions": [
{
"id": 17,
"name": "option.House",
"position": 1
},
{
"id": 18,
"name": "option.Television",
"position": 17
},
{
"id": 19,
"name": "option.Gold",
"position": 18
}
],
"accountLinkingOptions":[
{
"id":1,
"accountNo":"000000001",
"clientId":1,
"clientName":"pramod nuthakki",
"productId":1,
"productName":"pramod sav",
"fieldOfficerId":0,
"currency":{"code":"USD","name":"US Dollar","decimalPlaces":2,"displaySymbol":"$","nameCode":"currency.USD","displayLabel":"US Dollar ($)"}
}
],
"datatables": [{
"applicationTableName": "m_loan",
"registeredTableName": "loan_balance",
"columnHeaderData": [{
"columnName": "loan_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "account_number",
"columnType": "varchar",
"columnLength": 25,
"columnDisplayType": "STRING",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Balance",
"columnType": "decimal",
"columnLength": 0,
"columnDisplayType": "DECIMAL",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}]
},
{
"applicationTableName": "m_loan",
"registeredTableName": "Loan Enrichment",
"columnHeaderData": [{
"columnName": "loan_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Activation Date",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
}]
}]
}
</code>
</div>
</div>
<a id="loans_retrieve" name="loans_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan</h4>
<p>
<b>Note:</b> template=true parameter doesn't apply to this resource.
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>associations</dt>
<dd>
optional, <span>Either 'all' or a comma separated list of
loan 'associations' (itemised below).</span>
</dd>
<dt>exclude</dt>
<dd>
optional, <span>'all' and a comma separated list of
loan associations (itemised below) as 'exclude'.</span>
</dd>
<dd>
<br>Associations are just extra pieces of data that you
might or might not want to retrieve.<br>
<br>
</dd>
<dd>
<b>'all':</b> Gets all association data.
</dd>
<dd>
<b>'repaymentSchedule':</b> Loan schedule data.
</dd>
<dd>
<b>'originalSchedule':</b> Loan schedule data without interest recalculations.
</dd>
<dd>
<b>'futureSchedule':</b> Loan schedule data from today date(will be displayed only for interest first repayment strategy processors)
</dd>
<dd>
<b>'transactions':</b> Loan transactions data.
</dd>
<dd>
<b>'charges':</b> Loan charges data.
</dd>
<dd>
<b>'guarantors':</b> Loan guarantors data.
</dd>
<dd>
<b>'collateral':</b> Loan collateral data.
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>loans/1</div>
<br>
<br>
<div class=apiClick>loans/1?fields=id,principal,annualInterestRate</div>
<br>
<br>
<div class=apiClick>loans/1?associations=all</div>
<br>
<div class=apiClick>loans/1?associations=all&exclude=guarantors</div>
<br>
<br>
<div class=apiClick>loans/1?fields=id,principal,annualInterestRate&associations=repaymentSchedule,transactions</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}
</code>
<code class="method-response">
{
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"clientId": 1,
"clientName": "Kampala first Client",
"clientOfficeId": 2,
"loanProductId": 1,
"loanProductName": "Kampala Product (with cash accounting)",
"loanProductDescription": "Typical Kampala loan product with cash accounting enabled for testing.",
"loanPurposeId": 22,
"loanPurposeName": "option.HousingImprovement",
"loanOfficerId": 2,
"loanOfficerName": "LoanOfficer, Kampala",
"loanType": {
"id": 1,
"code": "loanType.individual",
"value": "Individual"
},
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"principal": 1000000,
"termFrequency": 12,
"termPeriodFrequencyType": {
"id": 2,
"code": "termFrequency.periodFrequencyType.months",
"value": "Months"
},
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"interestRatePerPeriod": 24,
"interestRateFrequencyType": {
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
},
"annualInterestRate": 24,
"amortizationType": {
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
"interestType": {
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
"interestCalculationPeriodType": {
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
},
"transactionProcessingStrategyId": 2,
"timeline": {
"submittedOnDate": [
2012,
4,
3
],
"submittedByUsername": "admin",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"approvedOnDate": [
2012,
4,
3
],
"approvedByUsername": "admin",
"approvedByFirstname": "App",
"approvedByLastname": "Administrator",
"expectedDisbursementDate": [
2012,
4,
10
],
"actualDisbursementDate": [
2012,
4,
10
],
"disbursedByUsername": "admin",
"disbursedByFirstname": "App",
"disbursedByLastname": "Administrator",
"expectedMaturityDate": [
2013,
4,
10
]
},
"summary": {
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"principalDisbursed": 1000000,
"principalPaid": 0,
"principalWrittenOff": 0,
"principalOutstanding": 1000000,
"principalOverdue": 833333.3,
"interestCharged": 240000,
"interestPaid": 0,
"interestWaived": 0,
"interestWrittenOff": 0,
"interestOutstanding": 240000,
"interestOverdue": 200000,
"feeChargesCharged": 18000,
"feeChargesDueAtDisbursementCharged": 0,
"feeChargesPaid": 0,
"feeChargesWaived": 0,
"feeChargesWrittenOff": 0,
"feeChargesOutstanding": 18000,
"feeChargesOverdue": 15000,
"penaltyChargesCharged": 0,
"penaltyChargesPaid": 0,
"penaltyChargesWaived": 0,
"penaltyChargesWrittenOff": 0,
"penaltyChargesOutstanding": 0,
"penaltyChargesOverdue": 0,
"totalExpectedRepayment": 1258000,
"totalRepayment": 0,
"totalExpectedCostOfLoan": 258000,
"totalCostOfLoan": 0,
"totalWaived": 0,
"totalWrittenOff": 0,
"totalOutstanding": 1258000,
"totalOverdue": 1048333.3,
"overdueSinceDate": [
2012,
5,
10
],
"linkedAccount":{
"id":1,
"accountNo":"000000001"
},
"disbursementDetails":[{"id":71,"expectedDisbursementDate":[2013,11,1],"principal":22000.000000,"approvedPrincipal":22000.000000}],
"fixedEmiAmount":1100.000000,
"maxOutstandingLoanBalance":35000,
"canDisburse":false,
"emiAmountVariations": [],
"inArrears": true,
"isNPA":false,
"overdueCharges": [
{
"id": 20,
"name": "overdraft penality",
"active": true,
"penalty": true,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 3.000000,
"chargeTimeType": {
"id": 9,
"code": "chargeTimeType.overdueInstallment",
"value": "overdue fees"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
},
"feeInterval": 2,
"feeFrequency": {
"id": 1,
"code": "feeFrequencyperiodFrequencyType.weeks",
"value": "Weeks"
}
}
]
}
}
</code>
</div>
</div>
<a id="loans_list" name="loans_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Loans</h4>
<p>The <i>list</i> capability of loans can support <b>pagination</b> and <b>sorting</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates from what result to start from.</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>displayName, accountNo, officeId, officeName</span>
</dd>
<dd>Orders the results by the field indicated.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides ability to restrict list of loans returned based on the office there associated with.</dd>
<dt>underHierarchy</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use the office hierarchy string to return all loans under a given hierarchy.</dd>
<dt>accountNo</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use account no. of loans to restrict results.</dd>
<dt>externalId</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use externalId of loan to restrict results.</dd>
<dt>sqlSearch</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use an sql fragment valid for the underlying loan schema to filter results. e.g. display_name like %K%</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>loans</div>
<br>
<div class=apiClick>loans?fields=accountNo</div>
<br>
<div class=apiClick>loans?offset=10&limit=50</div>
<br>
<div class=apiClick>loans?orderBy=accountNo&sortOrder=DESC</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/fineract-provider/api/v1/loans
</code>
<code class="method-response">
{
"totalFilteredRecords": 1,
"pageItems": [
{
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"clientId": 1,
"clientName": "Change To IndividualName",
"clientOfficeId": 1,
"loanProductId": 1,
"loanProductName": "AgriCredit",
"loanProductDescription": "test",
"loanType": {
"id": 1,
"code": "loanType.individual",
"value": "Individual"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principal": 10000,
"termFrequency": 12,
"termPeriodFrequencyType": {
"id": 2,
"code": "termFrequency.periodFrequencyType.months",
"value": "Months"
},
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"interestRatePerPeriod": 2,
"interestRateFrequencyType": {
"id": 2,
"code": "interestRateFrequency.periodFrequencyType.months",
"value": "Per month"
},
"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"
},
"transactionProcessingStrategyId": 2,
"timeline": {
"submittedOnDate": [
2012,
6,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"approvedOnDate": [
2012,
6,
1
],
"approvedByUsername": "mifos",
"approvedByFirstname": "App",
"approvedByLastname": "Administrator",
"expectedDisbursementDate": [
2012,
6,
1
],
"actualDisbursementDate": [
2012,
6,
1
],
"disbursedByUsername": "mifos",
"disbursedByFirstname": "App",
"disbursedByLastname": "Administrator",
"expectedMaturityDate": [
2013,
6,
1
]
},
"linkedAccount":{
"id":1,
"accountNo":"000000001"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principalDisbursed": 10000,
"principalPaid": 3073.07,
"principalWrittenOff": 0,
"principalOutstanding": 6926.93,
"principalOverdue": 5999.92,
"interestCharged": 1347.15,
"interestPaid": 709.33,
"interestWaived": 0,
"interestWrittenOff": 0,
"interestOutstanding": 637.82,
"interestOverdue": 619.28,
"feeChargesCharged": 0,
"feeChargesDueAtDisbursementCharged": 0,
"feeChargesPaid": 0,
"feeChargesWaived": 0,
"feeChargesWrittenOff": 0,
"feeChargesOutstanding": 0,
"feeChargesOverdue": 0,
"penaltyChargesCharged": 0,
"penaltyChargesPaid": 0,
"penaltyChargesWaived": 0,
"penaltyChargesWrittenOff": 0,
"penaltyChargesOutstanding": 0,
"penaltyChargesOverdue": 0,
"totalExpectedRepayment": 11347.15,
"totalRepayment": 3782.4,
"totalExpectedCostOfLoan": 1347.15,
"totalCostOfLoan": 709.33,
"totalWaived": 0,
"totalWrittenOff": 0,
"totalOutstanding": 7564.75,
"totalOverdue": 6619.2,
"overdueSinceDate": [
2012,
11,
1
]
},
"feeChargesAtDisbursementCharged": 0,
"inArrears":false,
"isNPA":false
}
]
}
</code>
</div>
</div>
<a id="loans_update" name="loans_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Modify a loan application</h2>
<p>Loan application can only be modified when in 'Submitted and pending approval' state. Once the application is approved, the details cannot be changed using this method.</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/loans/{loanId}</code>
<code class="method-request">PUT loans/1
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"productId": 1,
"principal": "5000",
"loanTermFrequency": 10,
"loanTermFrequencyType": 0,
"numberOfRepayments": 10,
"repaymentEvery": 1,
"repaymentFrequencyType": 0,
"interestRatePerPeriod": 2,
"interestType": 0,
"interestCalculationPeriodType": 0,
"amortizationType": 1,
"expectedDisbursementDate": "04 March 2014",
"transactionProcessingStrategyId": 1
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"principal": 5000,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="loans_calculate" name="loans_calculate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Calculate loan repayment schedule</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>productId, principal, loanTermFrequency,
loanTermFrequencyType, numberOfRepayments, repaymentEvery,
repaymentFrequencyType, interestRatePerPeriod,
amortizationType, interestType,
interestCalculationPeriodType, expectedDisbursementDate,
transactionProcessingStrategyId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans?command=calculateLoanSchedule
</code>
<code class="method-request">
POST loans?command=calculateLoanSchedule
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en_GB",
"productId": 1,
"principal": "100,000.00",
"loanTermFrequency": 12,
"loanTermFrequencyType": 2,
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": 2,
"interestRatePerPeriod": 2,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1,
"expectedDisbursementDate": "20 September 2011",
"transactionProcessingStrategyId": 2
}
</code>
<code class="method-response">
{
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"loanTermInDays": 366,
"totalPrincipalDisbursed": 100000,
"totalPrincipalExpected": 100000,
"totalPrincipalPaid": 0,
"totalInterestCharged": 13471.52,
"totalFeeChargesCharged": 0,
"totalPenaltyChargesCharged": 0,
"totalWaived": 0,
"totalWrittenOff": 0,
"totalRepaymentExpected": 113471.52,
"totalRepayment": 0,
"totalOutstanding": 0,
"periods": [
{
"period": 0,
"dueDate": [
2011,
9,
20
],
"principalDisbursed": 100000,
"principalLoanBalanceOutstanding": 100000,
"feeChargesDue": 0,
"feeChargesOutstanding": 0,
"totalOriginalDueForPeriod": 0,
"totalDueForPeriod": 0,
"totalOutstandingForPeriod": 0,
"totalOverdue": 0,
"totalActualCostOfLoanForPeriod": 0
},
{
"period": 1,
"fromDate": [
2011,
9,
20
],
"dueDate": [
2011,
10,
20
],
"daysInPeriod": 30,
"principalOriginalDue": 7455.96,
"principalDue": 7455.96,
"principalOutstanding": 7455.96,
"principalLoanBalanceOutstanding": 92544.04,
"interestOriginalDue": 2000,
"interestDue": 2000,
"interestOutstanding": 2000,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 9455.96,
"totalDueForPeriod": 9455.96,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 9455.96,
"totalOverdue": 9455.96,
"totalActualCostOfLoanForPeriod": 2000
},
...
...
{
"period": 12,
"fromDate": [
2012,
8,
20
],
"dueDate": [
2012,
9,
20
],
"daysInPeriod": 31,
"principalOriginalDue": 9270.56,
"principalDue": 9270.56,
"principalOutstanding": 9270.56,
"principalLoanBalanceOutstanding": 0,
"interestOriginalDue": 185.4,
"interestDue": 185.4,
"interestOutstanding": 185.4,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 9455.96,
"totalDueForPeriod": 9455.96,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 9455.96,
"totalOverdue": 9455.96,
"totalActualCostOfLoanForPeriod": 185.4
}
]
}
</code>
</div>
</div>
<a id="loans_create" name="loans_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Submit a new Loan Application</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>clientId, productId, principal, loanTermFrequency,
loanTermFrequencyType, loanType, numberOfRepayments, repaymentEvery,
repaymentFrequencyType, interestRatePerPeriod,
amortizationType, interestType,
interestCalculationPeriodType, transactionProcessingStrategyId,
expectedDisbursementDate, submittedOnDate, loanType</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields if interest recalculation is enabled for product and Rest frequency not same as repayment period</div></td>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyDate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields if interest recalculation with interest/fee compounding is enabled for product and compounding frequency not same as repayment period</div></td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyDate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Field if Entity-Datatable Check is enabled for the entity of type loan.</div></td>
</tr>
<tr class=alt>
<td>datatables</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged, linkAccountId, allowPartialPeriodInterestCalcualtion,
fixedEmiAmount, maxOutstandingLoanBalance, disbursementData, graceOnArrearsAgeing, createStandingInstructionAtDisbursement (requires linkedAccountId if set to true)
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans
</code>
<code class="method-request">
POST loans
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en_GB",
"clientId": 1,
"productId": 1,
"principal": "10,000.00",
"loanTermFrequency": 12,
"loanTermFrequencyType": 2,
"loanType": "individual",
"numberOfRepayments": 10,
"repaymentEvery": 1,
"repaymentFrequencyType": 2,
"interestRatePerPeriod": 10,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1,
"transactionProcessingStrategyId": 1,
"expectedDisbursementDate": "10 Jun 2013",
"submittedOnDate": "10 Jun 2013",
"linkAccountId" : "1",
"fixedEmiAmount":1100,
"maxOutstandingLoanBalance":"35000",
"disbursementData":[{"expectedDisbursementDate":"01 November 2013",
"principal":22000,"approvedPrincipal":22000}],
"datatables": [{
"registeredTableName": "loan_balance",
"data": {
"locale": "en",
"account_number": "0000001",
"Balance": "3300.00",
"DateField": "01 December 2016 00:00",
"dateFormat": "dd MMMM yyyy HH:mm",
"DateTimeField": "01 December 2016 12:00"
}
},
{
"registeredTableName": "Date Loan Field",
"data": {
"locale": "en",
"Activation Date": "01 December 2016 00:00",
"dateFormat": "dd MMMM yyyy HH:mm"
}
}]
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="loans_approve" name="loans_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Approve Loan Application</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>approvedOnDate</td>
</tr>
</table>
</br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>approvedLoanAmount</td>
</tr>
<tr class=alt>
<td>expectedDisbursementDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=approve
</code>
<code class="method-request">
POST loans/1?command=approve
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "20 September 2011",
"expectedDisbursementDate" : "20 September 2011",
"note": "Loan approval note",
"disbursementData" : [{ id=226, principal="5", expectedDisbursementDate="20 September 2011"},
{ id=227, principal="91", expectedDisbursementDate="21 September 2011"}]
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 200,
"code": "loanStatusType.approved",
"value": "Approved",
"pendingApproval": false,
"waitingForDisbursal": true,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "20 September 2011",
"note": "Loan approval note"
}
}
</code>
</div>
</div>
<a id="loans_recoverguarantee" name="loans_recoverguarantee" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Recover Loan Guarantee </h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=recoverGuarantees
</code>
<code class="method-request">
POST loans/1?command=approve
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"loanId": 1
}
</code>
</div>
</div>
<a id="loans_approve_undo" name="loans_approve_undo" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Undo Loan Application Approval</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=undoApproval
</code>
<code class="method-request">
POST loans/1?command=undoApproval
Content-Type: application/json
Request Body:
{
"note": "Loan undo approval note"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 100,
"code": "loanStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"pendingApproval": true,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"approvedOnDate": ""
}
}
</code>
</div>
</div>
<a id="loans_assignLoanOfficer" name="loans_assignLoanOfficer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Assign a Loan Officer</h4>
<p>Allows you to assign <i>Loan Officer</i> for existing Loan.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/loans/{loanId}?command=assignLoanOfficer</code>
<code class="method-request">POST loans/1?command=assignLoanOfficer
Content-Type: application/json
Request Body:
{
"toLoanOfficerId":2,
"assignmentDate":"02 September 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"fromLoanOfficerId":""
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 6,
"loanId" : 3,
"resourceId": 3
}
</code>
</div>
</div>
<a id="loans_unassignLoanOfficer" name="loans_unassignLoanOfficer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Unassign a Loan Officer</h4>
<p>Allows you to unassign the <i>Loan Officer</i>.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/loans/{loanId}?command=unassignLoanOfficer</code>
<code class="method-request">POST clients/1?command=unassignLoanOfficer
Content-Type: application/json
Request Body:
{
"unassignedDate":"15 September 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"officeId":2,
"clientId":6,
"loanId":3,
"resourceId":3
}
</code>
</div>
</div>
<a id="loans_reject" name="loans_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reject Loan Application</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>rejectedOnDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=reject
</code>
<code class="method-request">
POST loans/1?command=reject
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "20 September 2011",
"note": "Loan rejection reason."
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 500,
"code": "loanStatusType.rejected",
"value": "Rejected",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "20 September 2011",
"closedOnDate": "20 September 2011"
}
}
</code>
</div>
</div>
<a id="loans_withdraw" name="loans_withdraw" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Applicant Withdraws from Loan Application</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>withdrawnOnDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=withdrawnByApplicant
</code>
<code class="method-request">
POST loans/1?command=withdrawnByApplicant
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "20 September 2011",
"note": "Reason loan applicant withdrew from application."
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 2,
"resourceId": 2,
"changes": {
"status": {
"id": 400,
"code": "loanStatusType.withdrawn.by.client",
"value": "Withdrawn by applicant",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "20 September 2011",
"closedOnDate": "20 September 2011"
}
}
</code>
</div>
</div>
<a id="loans_disburse" name="loans_disburse" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Disburse Loan</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>actualDisbursementDate</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>transactionAmount,fixedEmiAmount</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=disburse
</code>
<code class="method-request">
POST loans/1?command=disburse
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionAmount":10000,
"fixedEmiAmount""1100,
"actualDisbursementDate": "14 May 2013",
"paymentTypeId": "12",
"note": "",
"accountNumber": "accno123",
"checkNumber": "chec123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"accountNumber": "accno123",
"checkNumber": "chec123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123",
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"actualDisbursementDate": "14 May 2013",
"transactionAmount":10000
}
}
</code>
</div>
</div>
<a id="loans_disburse_to_savings" name="loans_disburse_to_savings" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Disburse Loan To Savings Account</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>actualDisbursementDate</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>transactionAmount,fixedEmiAmount</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=disburseToSavings
</code>
<code class="method-request">
POST loans/1?command=disburse
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionAmount":10000,
"fixedEmiAmount""1100,
"actualDisbursementDate": "14 May 2013",
"note": ""
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"actualDisbursementDate": "14 May 2013",
"transactionAmount":10000
}
}
</code>
</div>
</div>
<a id="loans_disburse_undo" name="loans_disburse_undo" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Undo Loan Disbursal</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}?command=undoDisbursal
</code>
<code class="method-request">
POST loans/1?command=undoDisbursal
Content-Type: application/json
{
"note": "Some comment"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 200,
"code": "loanStatusType.approved",
"value": "Approved",
"pendingApproval": false,
"waitingForDisbursal": true,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"actualDisbursementDate": ""
}
}
</code>
</div>
</div>
<a id="loans_delete" name="loans_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Loan Application</h4>
<p>
<b>Note:</b> Only loans in "Submitted and awaiting approval"
status can be deleted.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/loans/{loanId}
</code>
<code class="method-request">
DELETE loans/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<!-- Loan Transactions API-->
<a id="loans_transactions" name="loans_transactions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loan Transactions</h3>
<p>Capabilities include loan repayment's, interest waivers and the ability to 'adjust' an existing transaction. An 'adjustment' of a transaction is really a 'reversal' of existing transaction followed by creation of a new transaction with the provided details.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>transactionAmount</td>
</tr>
<tr>
<td class=fielddesc>The amount of the transaction.</td>
</tr>
<tr class=alt>
<td>transactionDate</td>
</tr>
<tr>
<td class=fielddesc>The date of the transaction.</td>
</tr>
</table>
</div>
</div>
<a id="loans_repaymenttemplate_etc"
name="loans_repaymenttemplate_etc" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Loan Transaction Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>command</dt>
<dd>
String<span> mandatory, case-insensitive</span>
</dd>
<dd>
<b>'repayment'</b><br> "date" is set to the date of the
first outstanding installment.<br> "total" "amount" is set
to the amount outstanding.
</dd>
<dd>
<b>'waiver'</b><br> "date" is set to the current date.<br>
"total" "amount" is set to the remaining loan principal
outstanding. The amount that can be waived is limited to the
loan's inArrearsTolerance
</dd>
<dd>
<b>'refundbycash'</b><br> "date" is set to the current date <br>
"total" "amount" is set
to the total amount paid in advance.
</dd>
<dd>
<b>'foreclosure'</b><br> "transaction date" is set to the current date by default<br>
"transaction amount" is set
to the sum of total loan outstanding principal
and total Interest/ Fee/ Charges / Penalties
till foreclosure date.
</dd>
</dl>
<p>Example Request:</p>
<div class=apiClick>loans/1/transactions/template?command=repayment</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/transactions/template"
</code>
<code class="method-response">
{
"transactionType": {
"id": 2,
"code": "loanTransactionType.repayment",
"value": "Repayment"
},
"date": [
2009,
8,
1
],
"total": {
"currencyCode": "XOF",
"digitsAfterDecimal": 0,
"inMultiplesOf": 0,
"amount": 471,
"defaultName": "CFA Franc BCEAO",
"nameCode": "currency.XOF",
"displaySymbol": "CFA",
"zero": false,
"greaterThanZero": true,
"displaySymbolValue": "471 CFA"
}
}
</code>
</div>
</div>
<a id="loans_transaction_repayment" name="loans_transaction_repayment" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Make a Repayment </h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=repayment
</code>
<code class="method-request">
POST loans/5/transactions?command=repayment
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionDate": "14 May 2013",
"transactionAmount": "500.00",
"paymentTypeId": "12",
"note": "check payment",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 5,
"resourceId": 564,
"changes": {
"transactionDate": "14 May 2013",
"transactionAmount": "500.00",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"note": "check payment",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="loans_transaction_refund_by_cash" name="loans_transaction_refund_by_cash" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Make a Refund of an Active Loan by Cash </h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=refundByCash
</code>
<code class="method-request">
POST loans/5/transactions?command=refundByCash
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionDate": "14 May 2013",
"transactionAmount": "500.00",
"paymentTypeId": "12"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 5,
"resourceId": 564,
"changes": {
"transactionDate": "14 May 2013",
"transactionAmount": "500.00",
"locale": "en",
"dateFormat": "dd MMMM yyyy
}
}
</code>
</div>
</div>
<a id="loans_transaction_foreclosure" name="loans_transaction_foreclosure" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Foreclosure of an Active Loan</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=foreclosure
</code>
<code class="method-request">
POST loans/5/transactions?command=foreclosure
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionDate": "10 December 2012",
"note": "Customer Death"
}
</code>
<code class="method-response">
{
"changes": {
"note": "Foreclosure Made!!!",
"eventAmount": 7573.76,
"transactionDate": [2012,
12,
10],
"transactions": [15818]
},
"loanId": 5
}
</code>
</div>
</div>
<a id="loans_transaction_waiveinterest" name="loans_transaction_waiveinterest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Waive Interest</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=waiveInterest
</code>
<code class="method-request">
POST loans/5/transactions?command=waiveInterest
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "14 May 2012",
"transactionAmount": "400",
"note": "Optional note related to the waiving of interest."
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 5,
"resourceId": 5,
"changes": {
"transactionDate": "14 May 2012",
"transactionAmount": "400",
"locale": "en_GB",
"dateFormat": "dd MMMM yyyy",
"note": "Optional note related to the interest waiver."
}
}
</code>
</div>
</div>
<a id="loans_transaction_write-off_loan" name="loans_transaction_write-off_loan" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Write-off Loan</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=writeoff
</code>
<code class="method-request">
POST loans/70/transactions?command=writeoff
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "14 May 2012",
"note": "Write-off note"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 7,
"loanId": 70,
"resourceId": 442,
"changes": {
"transactionDate": "1 March 2012",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"status": {
"id": 601,
"code": "loanStatusType.closed.written.off",
"value": "Closed (written off)",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": true,
"closedRescheduled": false,
"closed": true,
"overpaid": false
},
"closedOnDate": "1 March 2012",
"writtenOffOnDate": "1 March 2012",
"note": "Write-off note"
}
}
</code>
</div>
</div>
<!------recovery payment -->
<a id="loans_transaction_recovery_payment" name="loans_transaction_recovery_payment" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Make Recovery Payment </h4>
<p>This API allows collecting recovery payments for written-off loans</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=recoverypayment
</code>
<code class="method-request">
POST loans/5/transactions?command=recoverypayment
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionDate": "14 May 2013",
"transactionAmount": "500.00",
"paymentTypeId": "12",
"note": "check payment",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 5,
"resourceId": 564,
"changes": {
"transactionDate": "14 May 2013",
"transactionAmount": "500.00",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"note": "check payment",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<!--- end of recovery payment -->
<a id="loans_transaction_undo_write-off_loan" name="loans_transaction_undo_write-off_loan" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Undo Loan Write-off Transaction</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=undowriteoff
</code>
<code class="method-request">
POST loans/70/transactions?command=undowriteoff
Content-Type: application/json
Request Body:
{ }
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 22
}
</code>
</div>
</div>
<a id="loans_transaction_pre_close_loan" name="loans_transaction_pre_close_loan" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4> Pre-Close template</h4>
<p>This Api retrieves pre closure details of loan</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions?command=prepayLoan <b>or</b><br/>
https://DomainName/api/v1/loans/{loanId}/transactions?command=prepayLoan&dateFormat=dd+MMMM+yyyy&locale=en&transactionDate=02+April+2015
</code>
<code class="method-request">
POST loans/70/transactions?command=prepayLoan
Content-Type: application/json
Request Body:
{ }
</code>
<code class="method-response">
{
"amount":7765.28,
"principalPortion":7573.76,
"interestPortion":191.52,
"feeChargesPortion":0.00,
"penaltyChargesPortion":0.00
}
</code>
</div>
</div>
<a id="loans_transaction_retrieve" name="loans_transaction_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Transaction Details</h4>
<p>Example Request:</p>
<div class=apiClick>loans/5/transactions/3</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/transactions/{transactionId}
</code>
<code class="method-response">
{
"id": 3,
"type": {
"id": 2,
"code": "loanTransactionType.repayment",
"value": "Repayment",
"disbursement": false,
"repaymentAtDisbursement": false,
"repayment": true,
"contra": false,
"waiveInterest": false,
"waiveCharges": false,
"writeOff": false,
"recoveryRepayment": false
},
"date": [
2012,
5,
14
],
"manuallyReversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 559.88,
"interestPortion": 559.88
}
</code>
</div>
</div>
<a id="loans_transaction_adjust" name="loans_transaction_adjust" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Adjust a Transaction</h4>
<p><b>Note:</b> there is no need to specify command={transactionType} parameter.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>transactionDate, transactionAmount</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/transactions/{transactionId}
</code>
<code class="method-request">
POST loans/1/transactions/2
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "25 May 2012",
"transactionAmount": "50,000.00",
"note": "An optional note about why your adjusting or changing the transaction."
}
</code>
<code class="method-response">
{
"resourceId": 16
}
</code>
</div>
</div>
<!--Start of guarantors functionality-->
<a id="guarantors" name="guarantors" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Guarantors</h3>
<p>A person who guarantees to pay for someone else's debt
if he or she should default on a loan obligation. A guarantor acts as a co-signor of sorts.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>guarantorType</td>
</tr>
<tr>
<td class=fielddesc>Identifies if the guarantor is
an existing Client, Staff member or an external
individual <br/>
Refer <a href="#guarantors_template">Retrieve
Guarantor Details Template</a> for complete
details
</td>
</tr>
<tr class=alt>
<td>entityId</td>
</tr>
<tr>
<td class=fielddesc>The identifier for guarantors
who are an existing Client of Staff member.
</td>
</tr>
<tr class=alt>
<td>firstname</td>
</tr>
<tr>
<td class=fielddesc>Guarantors first name
</td>
</tr>
<tr class=alt>
<td>lastname</td>
</tr>
<tr>
<td class=fielddesc>Guarantors last name
</td>
</tr>
<tr class=alt>
<td>officeName</td>
</tr>
<tr>
<td class=fielddesc>Name of the office with which the internal guarantors are associated
</td>
</tr>
<tr class=alt>
<td>addressLine1, addressLine2, city, state, zip,
country, mobileNumber, housePhoneNumber, comment,
dob</td>
</tr>
<tr>
<td class=fielddesc>Address, contact and date of
birth details of an external guarantor
</td>
</tr>
<tr class=alt>
<td>savingsId</td>
</tr>
<tr>
<td class=fielddesc>Guarantors Savings Account on which Amount will be blocked
</td>
</tr>
<tr class=alt>
<td>amount</td>
</tr>
<tr>
<td class=fielddesc>Guarantee amount which will be blocked on savings account.
</td>
</tr>
</table>
</div>
</div>
<a id="guarantors_list" name="guarantors_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Guarantors</h4>
<p>Example Requests:</p>
<div class=apiClick>loans/1/guarantors</div>
<br>
<br>
<div class=apiClick>loans/1/guarantors?fields=firstname,lastname</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/guarantors
</code>
<code class="method-response">
[
{
"id": 1,
"loanId": 1,
"guarantorType": {
"id": 1,
"code": "guarantor.existing.customer",
"value": "CUSTOMER"
},
"firstname": "Declan",
"lastname": "Browne",
"officeName": "Head Office",
"joinedDate": [
2009,
1,
4
]
}
]
</code>
</div>
</div>
<a id="guarantors_template" name="guarantors_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Guarantors Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>loans/1/guarantors/template</div>
<div class=apiClick>loans/1/guarantors/accounts/template?clientId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/guarantors/template
</code>
<code class="method-response">
{
"guarantorType": {
"id": 1,
"code": "guarantor.existing.customer",
"value": "CUSTOMER"
},
"guarantorTypeOptions": [
{
"id": 1,
"code": "guarantor.existing.customer",
"value": "CUSTOMER"
},
{
"id": 2,
"code": "guarantor.staff",
"value": "STAFF"
},
{
"id": 3,
"code": "guarantor.external",
"value": "EXTERNAL"
}
]
}
</code>
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/guarantors/accounts/template?clientId={clientId}
</code>
<code class="method-response">
{
"guarantorType": {
"id": 1,
"code": "guarantor.existing.customer",
"value": "CUSTOMER"
},
"status": false,
"accountLinkingOptions": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 3,
"clientName": "Client_FirstName_UUV18 Client_LastName_9T2D",
"productId": 1,
"productName": "FIXED_DEPOSIT_PRODUCT_U0NS9T",
"fieldOfficerId": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 4,
"inMultiplesOf": 100,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
]
}
</code>
</div>
</div>
<a id="guarantors_retrieve" name="guarantors_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Guarantor</h4>
<p>Example Requests:</p>
<div class=apiClick>/loans/1/guarantors/1</div>
<br>
<br>
<div class=apiClick>/loans/1/guarantors/1</div>
<br>
<br>
<div class=apiClick>/loans/1/guarantors/1?fields=firstname</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/guarantors/{guarantorId}
</code>
<code class="method-response">
{
"id": 1,
"loanId": 1,
"guarantorType": {
"id": 1,
"code": "guarantor.existing.customer",
"value": "CUSTOMER"
},
"firstname": "Declan",
"officeName": "Head Office",
"joinedDate": [
2009,
1,
4
]
}
</code>
</div>
</div>
<a id="guarantors_create" name="guarantors_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Guarantor</h4>
<p>
<b>Note:</b> You may associate any number of Guarantors
to a Loan. The mandatory fields would vary based
on the "guarantorType"<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for "internal" guarantors</div></td>
</tr>
<tr class=alt>
<td>guarantorTypeId, entityId</td>
</tr>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields for "external" guarantors</div></td>
</tr>
<tr class=alt>
<td>guarantorTypeId, firstname, lastname</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields
for "internal" guarantors</div></td>
</tr>
<tr class=alt>
<td>savingsId, amount</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1//loans/{loanId}}/guarantors
</code>
<code class="method-request">
POST /loans/1/guarantors
Content-Type: application/json
Request Body:
{
guarantorTypeId:3,
firstname:Lyndon,
lastname:Johnson
}
</code>
<code class="method-response">
{
"officeId": 2,
"loanId": 1,
"resourceId": 9
}
</code>
<code class="method-request">
POST /loans/1/guarantors
Content-Type: application/json
Request Body:
{
guarantorTypeId:1,
entityId:2
}
</code>
<code class="method-response">
{
"officeId": 2,
"loanId": 1,
"resourceId": 10
}
</code>
</div>
</div>
<a id="guarantors_update" name="guarantors_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Guarantor</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/loans/{loanId}/guarantors/{guarantorId}
</code>
<code class="method-request">
PUT loans/1/guarantors/1
Content-Type: application/json
Request Body:
{
entityId:1
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 1,
"changes": {
"entityId": 1
}
}
</code>
</div>
</div>
<a id="guarantors_delete" name="guarantors_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Remove a Guarantor</h4>
<p>
<b>Note:</b> A guarantor can be removed only from loans that are not yet approved.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/loans/{loanId}/guarantors/{guarantorId}
DELETE https://DomainName/api/v1/loans/{loanId}/guarantors/{guarantorId}?guarantorFundingId={guarantorFundingId}
</code>
<code class="method-request">
DELETE loans/1/guarantors/1
DELETE loans/1/guarantors/1?guarantorFundingId=1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 2,
"loanId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<!-- start of collaterals content -->
<a id="collaterals" name="collaterals" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3> Loan Collateral</h3>
<p>In lending agreements, collateral is a borrower's pledge of specific property to a lender,
to secure repayment of a loan. The collateral serves as protection for a lender against a
borrower's default - that is, any borrower failing to pay the principal and interest under
the terms of a loan obligation. If a borrower does default on a loan (due to insolvency
or other event), that borrower forfeits (gives up) the property pledged as collateral
- and the lender then becomes the owner of the collateral
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>type</td>
</tr>
<tr>
<td class=fielddesc>Identifies the type of a collateral <br/>
Ex: Gold, property etc (permitted types can be configured using
<a href="#configs_codes_codevalues">Code Values</a> for
the <a href="#configs_codes">Code</a> <i>LoanCollateral</i>) <br/>
Refer <a href="#collaterals_template">Retrieve
Collateral Details Template</a> for complete
details
</td>
</tr>
<tr class=alt>
<td>value</td>
</tr>
<tr>
<td class=fielddesc>The market value of a Collateral.
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>Description for the collateral
</td>
</tr>
<tr class=alt>
<td>currency</td>
</tr>
<tr>
<td class=fielddesc>Details of the currency used
to estimate the value of a Collateral.
The currency defaults to the currency of the
Loan for which this Collateral serves as a
guarantee
</td>
</tr>
</table>
</div>
</div>
<a id="collaterals_list" name="collaterals_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Loan Collaterals</h4>
<p>Example Requests:</p>
<div class=apiClick>loans/1/collaterals</div>
<br>
<br>
<div class=apiClick>loans/1/collaterals?fields=value,description</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/collaterals
</code>
<code class="method-response">
[
{
"id": 12,
"type": {
"id": 8,
"name": "Gold"
},
"value": 50000,
"description": "24 Carat Gold chain weighing 12 grams",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
]
</code>
</div>
</div>
<a id="collaterals_template" name="collaterals_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Collateral Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>loans/1/collaterals/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/collaterals/template
</code>
<code class="method-response">
{
"allowedCollateralTypes": [
{
"id": 9,
"name": "Silver",
"position": 0
},
{
"id": 8,
"name": "Gold",
"position": 0
},
{
"id": 10,
"name": "Property",
"position": 0
}
]
}
</code>
</div>
</div>
<a id="collaterals_retrieve" name="collaterals_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Collateral</h4>
<p>Example Requests:</p>
<div class=apiClick>/loans/1/collaterals/1</div>
<br>
<br>
<div class=apiClick>/loans/1/collaterals/1?fields=value,description</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/collaterals/{guarantorId}
</code>
<code class="method-response">
{
"id": 12,
"type": {
"id": 8,
"name": "Gold"
},
"value": 50000,
"description": "24 Carat Gold chain weighing 12 grams",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
} </code>
</div>
</div>
<a id="collaterals_create" name="collaterals_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Collateral</h4>
<p>
<b>Note:</b> Currently, Collaterals may be added only before a Loan
is approved<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for "internal" collaterals</div></td>
</tr>
<tr class=alt>
<td>collateralTypeId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1//loans/{loanId}/collaterals
</code>
<code class="method-request">
POST /loans/1/collaterals
Content-Type: application/json
Request Body:
{
collateralTypeId:9,
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 12
}
</code>
<code class="method-request">
POST /loans/1/collaterals
Content-Type: application/json
Request Body:
{
"collateralTypeId":"8",
"value": "50000",
"dateFormat":"dd MMMM yyyy",
"locale": "en",
"description": "24 Carat Gold chain weighing 12 grams"
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 13
}
</code>
</div>
</div>
<a id="collaterals_update" name="collaterals_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Collateral</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/loans/{loanId}/collaterals/{collateralId}
</code>
<code class="method-request">
PUT loans/1/collaterals/12
Content-Type: application/json
Request Body:
{
"description": "22 Carat Gold chain weighing 12 grams"
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 12,
"changes": {
"description": "22 Carat Gold chain weighing 12 grams"
}
}
</code>
</div>
</div>
<a id="collaterals_delete" name="collaterals_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Remove a Collateral</h4>
<p>
<b>Note:</b> A collateral can only be removed from Loans that are not yet approved.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/loans/{loanId}/collaterals/{collateralId}
</code>
<code class="method-request">
DELETE loans/1/collaterals/13
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 13
}
</code>
</div>
</div>
<!-- start of Loan charges content-->
<a id="loans_charges" name="loans_charges" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loan Charges</h3>
<p>Its typical for MFIs to add extra costs for their loan products. They
can be either Fees or Penalties.</p>
<p>Loan Charges are instances of <a href="#charges">Charges</a> and
represent either fees and penalties for loan products. Refer <a href="#charges">Charges</a>
for documentation of the various properties of a charge, Only additional properties (
specific to the context of a Charge being associated with a Loan) are
described here</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>amountPaid</td>
</tr>
<tr>
<td class=fielddesc>The Total amount which has been paid for this Charge
</td>
</tr>
<tr class=alt>
<td>amountWaived</td>
</tr>
<tr>
<td class=fielddesc>The Total amount that has been waived for this Charge
</td>
</tr>
<tr class=alt>
<td>amountWrittenOff</td>
</tr>
<tr>
<td class=fielddesc>Total amount written off from this Charge
</td>
</tr>
<tr class=alt>
<td>amountOutstanding</td>
</tr>
<tr>
<td class=fielddesc>The Total outstanding amount for this Charge
</td>
</tr>
</table>
</div>
</div>
<a id="loans_charges_list" name="loans_charges_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Loan Charges</h4>
<p>Example Requests:</p>
<div class=apiClick>loans/1/charges</div>
<br>
<br>
<div class=apiClick>loans/1/charges?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/charges
</code>
<code class="method-response">
[
{
"id": 1,
"chargeId": 1,
"name": "Loan Processing fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
},
{
"id": 7,
"chargeId": 2,
"name": "Collection Fee",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2013,
3,
29
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
}
]
</code>
</div>
</div>
<a id="loans_charges_template" name="loans_charges_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Loan Charges Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>loans/1/charges/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/charges/template
</code>
<code class="method-response">
{
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"chargeOptions": [
{
"id": 2,
"name": "Collection Fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
},
{
"id": 3,
"name": "Late payment penalty",
"active": true,
"penalty": true,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 1,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
},
{
"id": 1,
"name": "Loan Processing fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
}
],
"penalty": false
}
</code>
</div>
</div>
<a id="loans_charges_retrieve" name="loans_charges_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan Charge</h4>
<p>Example Requests:</p>
<div class=apiClick>/loans/1/charges/1</div>
<br>
<br>
<div class=apiClick>/loans/1/charges/1?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loans/{loanId}/charges/{chargeId}
</code>
<code class="method-response">
{
"id": 1,
"chargeId": 1,
"name": "Loan Processing fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
} </code>
</div>
</div>
<a id="loans_charges_create" name="loans_charges_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Loan Charge</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for Loan Charges</div></td>
</tr>
<tr class=alt>
<td>chargeId, amount, dueDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/charges
</code>
<code class="method-request">
POST /loans/1/charges
Content-Type: application/json
Request Body:
{
"chargeId": "2",
"locale": "en",
"amount": "100",
"dateFormat": "dd MMMM yyyy",
"dueDate": "29 April 2013"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 31
}
</code>
</div>
</div>
<a id="loans_charges_update" name="loans_charges_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Loan Charge</h4>
<p>Currently Loan Charges may be updated only if the Loan
is not yet approved
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/loans/{loanId}/charges/{chargeId}
</code>
<code class="method-request">
PUT loans/1/charges/12
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"amount": "60",
"dueDate": "27 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 6,
"changes": {
"dueDate": "27 March 2013",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"amount": 60.0
}
}
</code>
</div>
</div>
<a id="loans_charges_pay" name="loans_charges_pay"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Pay Loan Charge</h4>
<p>Loan Charge will be paid if the loan is linked with a savings account
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/{loanId}/charges/{chargeId}?command=pay
</code>
<code class="method-request">
POST loans/1/charges/12?command=pay
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transactionDate": "19 September 2013"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 6,
"savingsId": 1,
"resourceId": 12
}
</code>
</div>
</div>
<a id="loans_charges_delete" name="loans_charges_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Loan Charge</h4>
<p>
<b>Note:</b>Currently, A Loan Charge may only be removed from Loans that are not
yet approved.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/loans/{loanId}/charges/{chargeId}
</code>
<code class="method-request">
DELETE loans/1/charges/2
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 2
}
</code>
</div>
</div>
<!-- Loan Rescheduling content -->
<a id="loan_rescheduling" name="loan_rescheduling" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loan Rescheduling</h3>
<p>Loan rescheduling provides the ability to give clients extra grace periods, extend loan term by adding extra installments and adjust the interest rate of a loan.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>loanId</td>
</tr>
<tr>
<td class=fielddesc>The ID of the loan to be rescheduled.</td>
</tr>
<tr class=alt>
<td>rescheduleFromDate</td>
</tr>
<tr>
<td class=fielddesc>Due date of the start point (installment) of the rescheduling.</td>
</tr>
<tr class=alt>
<td>graceOnPrincipal</td>
</tr>
<tr>
<td class=fielddesc>Number of installments to be added with zero principal.</td>
</tr>
<tr class=alt>
<td>graceOnInterest</td>
</tr>
<tr>
<td class=fielddesc>Number of installments to be added with zero interest.</td>
</tr>
<tr class=alt>
<td>extraTerms</td>
</tr>
<tr>
<td class=fielddesc>Number of installments to be added after the last loan repayment schedule installment.</td>
</tr>
<tr class=alt>
<td>recalculateInterest</td>
</tr>
<tr>
<td class=fielddesc>If recalculateInterest="true", the total interest amount of the loan is recalculated. If recalculateInterest="false", the total interest amount remains the same.</td>
</tr>
<tr class=alt>
<td>newInterestRate</td>
</tr>
<tr>
<td class=fielddesc>New interest rate to be used in calculating the interest amount for each rescheduled period/installment.</td>
</tr>
<tr class=alt>
<td>adjustedDueDate</td>
</tr>
<tr>
<td class=fielddesc>New due date for the start point (installment) of the rescheduling.</td>
</tr>
<tr class=alt>
<td>rescheduleReasonId</td>
</tr>
<tr>
<td class=fielddesc>The ID of the code value that indicates the reason for rescheduling the loan.</td>
</tr>
<tr class=alt>
<td>rescheduleReasonComment</td>
</tr>
<tr>
<td class=fielddesc>Text provided as extra reason for the rescheduling of the loan.</td>
</tr>
<tr class=alt>
<td>submittedOnDate</td>
</tr>
<tr>
<td class=fielddesc>The date on which the loan reschedule request was made.</td>
</tr>
</table>
</div>
</div>
<a id="loan_reschedule_request_create" name="loan_reschedule_request_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Loan Reschedule Request</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>loanId, rescheduleFromDate, rescheduleReasonId, submittedOnDate,<br />
graceOnPrincipal OR graceOnInterest OR extraTerms OR newInterestRate OR adjustedDueDate
</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>recalculateInterest, rescheduleReasonComment</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/rescheduleloans
</code>
<code class="method-request">
POST rescheduleloans
Content-Type: application/json Request Body:
{
"loanId": 1,
"graceOnPrincipal": 2,
"graceOnInterest": 3,
"extraTerms": 2,
"rescheduleFromDate": "04 December 2014",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"recalculateInterest": true,
"submittedOnDate": "04 September 2014",
"newInterestRate" : 28,
"rescheduleReasonId": 1
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 1
}
</code>
</div>
<div class="method-example">
<code class="method-request">
POST rescheduleloans
Content-Type: application/json Request Body:
{
"loanId": 1,
"graceOnPrincipal": 2,
"rescheduleFromDate": "25 December 2013",
"adjustedDueDate": "31 December 2013",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"submittedOnDate": "04 September 2013",
"rescheduleReasonComment" : "Client has gone AWOL",
"rescheduleReasonId": 1
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="loan_reschedule_request_retrieve" name="loan_reschedule_request_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan Reschedule Request</h4>
<p>Example Requests:</p>
<div class=apiClick>rescheduleloans/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/rescheduleloans/{requestId}
</code>
<code class="method-response">
{
"id": 1,
"loanId": 1,
"clientId": 1,
"clientName": "test test",
"loanAccountNumber": "000000001",
"statusEnum": {
"id": 100,
"code": "loanStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"pendingApproval": true,
"approved": false,
"rejected": false
},
"rescheduleFromInstallment": 5,
"rescheduleFromDate": [
2013,
12,
25
],
"recalculateInterest": false,
"rescheduleReasonCodeValue": {
"id": 1,
"name": "Passport",
"isActive": false
},
"timeline": {
"submittedOnDate": [
2013,
9,
4
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator"
},
"rescheduleReasonComment": "Client has gone AWOL",
"loanTermVariationsData": [
{
"id": 13,
"termType": {
"id": 4,
"code": "loanTermType.dueDate",
"value": "dueDate"
},
"termVariationApplicableFrom": [
2013,
12,
25
],
"dateValue": [
2013,
12,
31
],
"isSpecificToInstallment": false
},
{
"id": 14,
"termType": {
"id": 8,
"code": "loanTermType.graceOnPrincipal",
"value": "graceOnPrincipal"
},
"termVariationApplicableFrom": [
2013,
12,
25
],
"decimalValue": 2,
"isSpecificToInstallment": false
}
]
}
</code>
</div>
</div>
<a id="loan_reschedule_preview_retrieve" name="loan_reschedule_preview_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Preview of The New Loan Repayment Schedule</h4>
<p>Example Requests:</p>
<div class=apiClick>rescheduleloans/1?command=previewLoanReschedule</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/rescheduleloans/{requestId}?command=previewLoanReschedule
</code>
<code class="method-response">
"currency": {
"code": "KES",
"name": "Kenyan Shilling",
"decimalPlaces": 0,
"inMultiplesOf": 10,
"displaySymbol": "KSh",
"nameCode": "currency.KES",
"displayLabel": "Kenyan Shilling (KSh)"
},
"loanTermInDays": 182,
"totalPrincipalDisbursed": 10000,
"totalPrincipalExpected": 10000,
"totalPrincipalPaid": 900.000000,
"totalInterestCharged": 960,
"totalFeeChargesCharged": 0.000000,
"totalPenaltyChargesCharged": 2500.000000,
"totalRepaymentExpected": 13460,
"totalOutstanding": 12060.000000,
"periods": [
{
"period": 1,
"fromDate": [
2013,
11,
8
],
"dueDate": [
2013,
11,
8
],
"daysInPeriod": 0,
"principalOriginalDue": 0,
"principalDue": 0,
"principalOutstanding": 0,
"principalLoanBalanceOutstanding": 10000,
"interestOriginalDue": 0,
"interestDue": 0,
"interestOutstanding": 0,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 0,
"totalDueForPeriod": 0,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 0,
"totalOverdue": 0,
"totalActualCostOfLoanForPeriod": 0
},
...
...
{
"period": 30,
"fromDate": [
2014,
5,
23
],
"dueDate": [
2014,
5,
30
],
"daysInPeriod": 7,
"principalOriginalDue": 300,
"principalDue": 300,
"principalOutstanding": 300,
"principalLoanBalanceOutstanding": 0,
"interestOriginalDue": 130,
"interestDue": 130,
"interestOutstanding": 130,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 430,
"totalDueForPeriod": 430,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 430,
"totalOverdue": 430,
"totalActualCostOfLoanForPeriod": 130
}
]
}
</code>
</div>
</div>
<a id="loan_reschedule_request_reject" name="loan_reschedule_request_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reject a Loan Reschedule Request</h4>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/rescheduleloans/{requestId}?command=reject</code>
<code class="method-request">POST rescheduleloans/1?command=reject
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "11 September 2014"
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 1,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "11 September 2014",
"rejectedByUserId": 1
}
}
</code>
</div>
</div>
<a id="loan_reschedule_request_approve" name="loan_reschedule_request_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Approve a Loan Reschedule Request</h4>
<p>Rescheduling of a loan happens once a loan reschedule request is approved.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/rescheduleloans/{requestId}?command=approve</code>
<code class="method-request">POST rescheduleloans/1?command=approve
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "11 September 2014"
}
</code>
<code class="method-response">
{
"loanId": 1,
"resourceId": 1,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "11 September 2014",
"approvedByUserId": 1
}
}
</code>
</div>
</div>
<!-- start Loan term variations -->
<a id="loan_term_variations" name="loan_term_variations" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loan Rescheduling</h3>
<p>Loan Term Variations provides the ability to change due dates, amounts and number of instalments before loan approval.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>loanId</td>
</tr>
<tr>
<td class=fielddesc>The ID of the loan to be modified.</td>
</tr>
<tr class=alt>
<td>exceptions</td>
</tr>
<tr>
<td class=fielddesc>contains exception data for variations(modifiedinstallments,newinstallments and deletedinstallments described below) </td>
</tr>
</table>
<p>Exception object fields</p>
<p>Modifiedinstallments Array fields</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>dueDate</td>
</tr>
<tr>
<td class=fielddesc>Schedule dueDate for which this exception should be applied.</td>
</tr>
<tr class=alt>
<td>modifiedDueDate</td>
</tr>
<tr>
<td class=fielddesc> this is the exception data to move the due date to specified date for a instalment</td>
</tr>
<tr class=alt>
<td>installmentAmount</td>
</tr>
<tr>
<td class=fielddesc> new instalment amount(principal+interest) for the specified instalment. supported only for interest method declining with equal instalments Amortization</td>
</tr>
<tr class=alt>
<td>principal</td>
</tr>
<tr>
<td class=fielddesc> new Principal amount for the specified instalment. supported only for interest method declining with equal instalments Amortization and for Flat loans.</td>
</tr>
</table>
<p>newinstallments Array fields</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>dueDate</td>
</tr>
<tr>
<td class=fielddesc>Schedule dueDate for inserting new instalment.</td>
</tr>
<tr class=alt>
<td>installmentAmount</td>
</tr>
<tr>
<td class=fielddesc> new instalment amount(principal+interest) for the new instalment. supported only for interest method declining with equal instalments Amortization</td>
</tr>
<tr class=alt>
<td>principal</td>
</tr>
<tr>
<td class=fielddesc> new Principal amount for the new instalment. supported only for interest method declining with equal instalments Amortization and for Flat loans.</td>
</tr>
</table>
<p>deletedinstallments Array fields</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>dueDate</td>
</tr>
<tr>
<td class=fielddesc>Schedule dueDate for removing specific instalment.</td>
</tr>
</table>
</div>
</div>
<a id="loans_calculate_with_exceptions" name="loans_calculate_with_exceptions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Calculate loan repayment schedule based on Loan term variations</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>exceptions,locale,dateFormat</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/1/schedule?command=calculateLoanSchedule
</code>
<code class="method-request">
POST loans/{loanIdd}/schedule?command=calculateLoanSchedule
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"exceptions": {
"modifiedinstallments": [{
"dueDate": '01 April 2016',
"modifiedDueDate": '05 April 2016'
},
{
"dueDate": '05 January 2016',
"modifiedDueDate": '01 January 2016'
}],
"deletedinstallments": [{
"dueDate": "01 October 2016"
}],
newinstallments: [{
dueDate: '10 October 2016',
installmentAmount: '1000'
}]
}
}
</code>
<code class="method-response">
{
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"loanTermInDays": 12,
"totalPrincipalDisbursed": 10000,
"totalPrincipalExpected": 10000,
"totalInterestCharged": 1340.98,
"totalFeeChargesCharged": 0,
"totalPenaltyChargesCharged": 0,
"totalRepaymentExpected": 11340.98,
"periods": [{
"period": 1,
"fromDate": [2015,
11,
1],
"dueDate": [2015,
12,
1],
"daysInPeriod": 30,
"principalOriginalDue": 745.6,
"principalDue": 745.6,
"principalOutstanding": 745.6,
"principalLoanBalanceOutstanding": 9254.4,
"interestOriginalDue": 200,
"interestDue": 200,
"interestOutstanding": 200,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 945.6,
"totalDueForPeriod": 945.6,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 945.6,
"totalOverdue": 945.6,
"totalActualCostOfLoanForPeriod": 200
},
{
"period": 2,
"fromDate": [2015,
12,
1],
"dueDate": [2016,
1,
1],
"daysInPeriod": 31,
"principalOriginalDue": 814.91,
"principalDue": 814.91,
"principalOutstanding": 814.91,
"principalLoanBalanceOutstanding": 8439.49,
"interestOriginalDue": 185.09,
"interestDue": 185.09,
"interestOutstanding": 185.09,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 1000,
"totalDueForPeriod": 1000,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 1000,
"totalActualCostOfLoanForPeriod": 185.09
},
{
"period": 3,
"fromDate": [2016,
1,
1],
"dueDate": [2016,
2,
1],
"daysInPeriod": 31,
"principalOriginalDue": 770.75,
"principalDue": 770.75,
"principalOutstanding": 770.75,
"principalLoanBalanceOutstanding": 7668.74,
"interestOriginalDue": 168.79,
"interestDue": 168.79,
"interestOutstanding": 168.79,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 168.79
},
{
"period": 4,
"fromDate": [2016,
2,
1],
"dueDate": [2016,
3,
5],
"daysInPeriod": 33,
"principalOriginalDue": 786.17,
"principalDue": 786.17,
"principalOutstanding": 786.17,
"principalLoanBalanceOutstanding": 6882.57,
"interestOriginalDue": 153.37,
"interestDue": 153.37,
"interestOutstanding": 153.37,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 153.37
},
{
"period": 5,
"fromDate": [2016,
3,
5],
"dueDate": [2016,
4,
5],
"daysInPeriod": 31,
"principalOriginalDue": 801.89,
"principalDue": 801.89,
"principalOutstanding": 801.89,
"principalLoanBalanceOutstanding": 6080.68,
"interestOriginalDue": 137.65,
"interestDue": 137.65,
"interestOutstanding": 137.65,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 137.65
},
{
"period": 6,
"fromDate": [2016,
4,
5],
"dueDate": [2016,
5,
1],
"daysInPeriod": 26,
"principalOriginalDue": 817.93,
"principalDue": 817.93,
"principalOutstanding": 817.93,
"principalLoanBalanceOutstanding": 5262.75,
"interestOriginalDue": 121.61,
"interestDue": 121.61,
"interestOutstanding": 121.61,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 121.61
},
{
"period": 7,
"fromDate": [2016,
5,
1],
"dueDate": [2016,
6,
1],
"daysInPeriod": 31,
"principalOriginalDue": 834.28,
"principalDue": 834.28,
"principalOutstanding": 834.28,
"principalLoanBalanceOutstanding": 4428.47,
"interestOriginalDue": 105.26,
"interestDue": 105.26,
"interestOutstanding": 105.26,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 105.26
},
{
"period": 8,
"fromDate": [2016,
6,
1],
"dueDate": [2016,
7,
1],
"daysInPeriod": 30,
"principalOriginalDue": 850.97,
"principalDue": 850.97,
"principalOutstanding": 850.97,
"principalLoanBalanceOutstanding": 3577.5,
"interestOriginalDue": 88.57,
"interestDue": 88.57,
"interestOutstanding": 88.57,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 88.57
},
{
"period": 9,
"fromDate": [2016,
7,
1],
"dueDate": [2016,
8,
1],
"daysInPeriod": 31,
"principalOriginalDue": 867.99,
"principalDue": 867.99,
"principalOutstanding": 867.99,
"principalLoanBalanceOutstanding": 2709.51,
"interestOriginalDue": 71.55,
"interestDue": 71.55,
"interestOutstanding": 71.55,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 71.55
},
{
"period": 10,
"fromDate": [2016,
8,
1],
"dueDate": [2016,
9,
1],
"daysInPeriod": 31,
"principalOriginalDue": 885.35,
"principalDue": 885.35,
"principalOutstanding": 885.35,
"principalLoanBalanceOutstanding": 1824.16,
"interestOriginalDue": 54.19,
"interestDue": 54.19,
"interestOutstanding": 54.19,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.54,
"totalDueForPeriod": 939.54,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.54,
"totalActualCostOfLoanForPeriod": 54.19
},
{
"period": 11,
"fromDate": [2016,
9,
1],
"dueDate": [2016,
10,
10],
"daysInPeriod": 39,
"principalOriginalDue": 903.05,
"principalDue": 903.05,
"principalOutstanding": 903.05,
"principalLoanBalanceOutstanding": 921.11,
"interestOriginalDue": 36.48,
"interestDue": 36.48,
"interestOutstanding": 36.48,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.53,
"totalDueForPeriod": 939.53,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.53,
"totalActualCostOfLoanForPeriod": 36.48
},
{
"period": 12,
"fromDate": [2016,
10,
10],
"dueDate": [2016,
11,
1],
"daysInPeriod": 22,
"principalOriginalDue": 921.11,
"principalDue": 921.11,
"principalOutstanding": 921.11,
"principalLoanBalanceOutstanding": 0,
"interestOriginalDue": 18.42,
"interestDue": 18.42,
"interestOutstanding": 18.42,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 939.53,
"totalDueForPeriod": 939.53,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 939.53,
"totalActualCostOfLoanForPeriod": 18.42
}]
}
</code>
</div>
</div>
<a id="loans_update_variations" name="loans_update_variations" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Updates loan repayment schedule based on Loan term variations</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>exceptions,locale,dateFormat</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/1/schedule?command=addVariations
</code>
<code class="method-request">
POST loans/{loanIdd}/schedule?command=addVariations
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"exceptions": {
"modifiedinstallments": [{
"dueDate": '01 April 2016',
"modifiedDueDate": '05 April 2016'
},
{
"dueDate": '05 January 2016',
"modifiedDueDate": '01 January 2016'
}],
"deletedinstallments": [{
"dueDate": "01 October 2016"
}],
newinstallments: [{
dueDate: '10 October 2016',
installmentAmount: '1000'
}]
}
}
</code>
<code class="method-response">
{
"loanId": 1,
"changes": {
"loanTermVariations": [{
"id": 21,
"termType": {
"id": 4,
"code": "loanTermType.dueDate",
"value": "dueDate"
},
"termVariationApplicableFrom": [2016,
1,
1],
"dateValue": [2016,
1,
10],
"isSpecificToInstallment": true
},
{
"id": 22,
"termType": {
"id": 3,
"code": "loanTermType.principalAmount",
"value": "principalAmount"
},
"termVariationApplicableFrom": [2016,
1,
10],
"decimalValue": 1100,
"isSpecificToInstallment": true
},
{
"id": 23,
"termType": {
"id": 3,
"code": "loanTermType.principalAmount",
"value": "principalAmount"
},
"termVariationApplicableFrom": [2016,
8,
1],
"decimalValue": 1000,
"isSpecificToInstallment": true
},
{
"id": 24,
"termType": {
"id": 5,
"code": "loanTermType.dueDate",
"value": "insertInstallment"
},
"termVariationApplicableFrom": [2016,
8,
15],
"decimalValue": 900,
"isSpecificToInstallment": true
}]
}
}
</code>
</div>
</div>
<a id="loans_delete_variations" name="loans_delete_variations" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Updates loan repayment schedule by removing Loan term variations</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td></td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loans/1/schedule?command=deleteVariations
</code>
<code class="method-request">
POST loans/{loanIdd}/schedule?command=deleteVariations
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"loanId": 1,
"changes": {
"removedEntityIds": [{
21,22}]
}
}
</code>
</div>
</div>
<!-- End Loan Term variations-->
<!-- start of offices content -->
<a id="offices" name="offices" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Offices</h3>
<p>Offices are used to model an MFIs structure. A hierarchical
representation of offices is supported. There will always be at
least one office (which represents the MFI or an MFIs head
office). All subsequent offices added must have a parent office.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>externalId</td>
</tr>
<tr>
<td class=fielddesc>A place to put an external reference for
this office e.g. The ID another system uses for it.<br> If
provided, it must be unique.
</td>
</tr>
<tr class=alt>
<td>hierarchy</td>
</tr>
<tr>
<td class=fielddesc>This field is a system generated
convenience field. It can't be set.<br> It uses "dot
notation" to define where an office stands in the office
hierarchy.<br> For example, the system default office (id =
1) has a hierarchy value of '.'<br> An office (id = 12)
placed directly underneath this default office has a hierarchy
value of '.12.'<br> And if a further office (id = 78) is
placed directly under office (id = 12) its hierarchy value is
'.12.78.'<br>
<br> The hierarchy value is useful when you need to display
offices in 'hierarchy' order (perhaps indented in a drop down
list box).
</td>
</tr>
</table>
</div>
</div>
<a id="offices_list" name="offices_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Offices</h4>
<p>Example Requests:</p>
<div class=apiClick>offices</div>
<br>
<br>
<div class=apiClick>offices?fields=id,name,openingDate</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/offices
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
}
]
</code>
</div>
</div>
<a id="offices_template" name="offices_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Office Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>offices/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/offices/template
</code>
<code class="method-response">
{
"openingDate": [
2013,
2,
4
],
"allowedParents": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
]
}
</code>
</div>
</div>
<a id="offices_retrieve" name="offices_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve an Office</h4>
<p>Example Requests:</p>
<div class=apiClick>offices/1</div>
<br>
<br>
<div class=apiClick>offices/1?template=true</div>
<br>
<br>
<div class=apiClick>offices/1?fields=id,name,parentName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/offices/1
</code>
<code class="method-response">
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
}
</code>
</div>
</div>
<a id="offices_create" name="offices_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create an Office</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, openingDate, parentId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/offices
</code>
<code class="method-request">
POST offices
Content-Type: application/json
Request Body:
{
"name": "Example New Branch",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"openingDate": "01 July 2007",
"parentId": 2,
"externalId": "SYS54-88"
}
</code>
<code class="method-response">
{
"officeId": 3,
"resourceId": 3
}
</code>
</div>
</div>
<a id="offices_update" name="offices_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Office</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/offices/{officeId}
</code>
<code class="method-request">
PUT offices/1
Content-Type: application/json
Request Body:
{
"name": "Name is updated"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 1,
"changes": {
"name": "Name is updated"
}
}
</code>
</div>
</div>
<!-- end of office api docs -->
<!-- start of loan products api docs -->
<a id="loanproducts" name="loanproducts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loan Products</h3>
<p>A Loan product is a template that is used when creating a
loan. Much of the template definition can be overridden during
loan creation.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name associated with loan product on system.</td>
</tr>
<tr class=alt>
<td>shortName</td>
</tr>
<tr>
<td class=fielddesc>Short name associated with a loan product. <br>
An abbreviated version of the name, used in reports or menus where space is limited, such as Collection Sheets.
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>For providing helpful description of product offering.</td>
</tr>
<tr class=alt>
<td>fundId</td>
</tr>
<tr>
<td class=fielddesc>For associating a loan product with a given fund by default.</td>
</tr>
<tr class=alt>
<td>includeInBorrowerCycle</td>
</tr>
<tr>
<td class=fielddesc>It is a flag, Used to denote whether the loans should include in loan cycle counter or not.</td>
</tr>
<tr class=alt>
<td>useBorrowerCycle</td>
</tr>
<tr>
<td class=fielddesc>It is a flag, Used to denote whether the loans should depend on <br>borrower loan cycle counter or not.</td>
</tr>
<tr class=alt>
<td>currencyCode</td>
</tr>
<tr>
<td class=fielddesc>A three letter ISO code of currency.</td>
</tr>
<tr class=alt>
<td>digitsAfterDecimal</td>
</tr>
<tr>
<td class=fielddesc>Override the currency default value for digitsAfterDecimal.</td>
</tr>
<tr class=alt>
<td>inMultiplesOf</td>
</tr>
<tr>
<td class=fielddesc>Override the default value for rounding currency to multiples of value provided.</td>
</tr>
<tr class=alt>
<td>installmentAmountInMultiplesOf</td>
</tr>
<tr>
<td class=fielddesc>Override the default value for rounding instalment amount to multiples of value provided.</td>
</tr>
<tr class=alt>
<td>principal</td>
</tr>
<tr>
<td class=fielddesc>The loan amount to be disbursed to through loan.</td>
</tr>
<tr class=alt>
<td>numberOfRepayments</td>
</tr>
<tr>
<td class=fielddesc>Number of installments to repay.<br>
Used like: <b>numberOfRepayments</b> Every <i>repaymentEvery</i>
<i>repaymentFrequencyType</i><br> e.g. <b>10</b> (repayments) Every 12 Weeks
</td>
</tr>
<tr class=alt>
<td>repaymentEvery</td>
</tr>
<tr>
<td class=fielddesc>Used like: numberOfRepayments Every
<b>repaymentEvery</b> repaymentFrequencyType<br> e.g. 10
(repayments) Every <b>12</b> Weeks
</td>
</tr>
<tr class=alt>
<td>repaymentFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>Used like: <i>numberOfRepayments</i> Every
repaymentEvery <b>repaymentFrequencyType</b><br> e.g. 10
(repayments) Every 12 <b>Weeks</b> <br>
<span>Example Values:</span> 0=Days, 1=Weeks, 2=Months
</td>
</tr>
<tr class=alt>
<td>interestRatePerPeriod</td>
</tr>
<tr>
<td class=fielddesc>Interest Rate.<br> Used like:
<b>interestRatePerPeriod</b> % interestRateFrequencyType - interestType<br>
e.g. <b>12.0000</b>% Per year - Declining Balance
</td>
</tr>
<tr class=alt>
<td>interestRateFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>Used like: interestRatePerPeriod%
interestRateFrequencyType - interestType<br> e.g. 12.0000%
<b>Per year</b> - Declining Balance <br>
<span>Example Values:</span> 2=Per month, 3=Per year
</td>
</tr>
<tr class=alt>
<td>amortizationType</td>
</tr>
<tr>
<td class=fielddesc><span>Example Values:</span> 0=Equal
principle payments, 1=Equal installments</td>
</tr>
<tr class=alt>
<td>interestType</td>
</tr>
<tr>
<td class=fielddesc>Used like: interestRatePerPeriod%
interestRateFrequencyType - interestType<br> e.g. 12.0000%
Per year - <b>Declining Balance</b> <br>
<span>Example Values:</span> 0=Declining Balance, 1=Flat
</td>
</tr>
<tr class=alt>
<td>interestCalculationPeriodType</td>
</tr>
<tr>
<td class=fielddesc><span>Example Values:</span> 0=Daily, 1=Same as repayment period</td>
</tr>
<tr class=alt>
<td>allowPartialPeriodInterestCalcualtion</td>
</tr>
<tr>
<td class=fielddesc>This value will be supported along with interestCalculationPeriodType as Same as repayment period to calculate interest for partial periods.
<span>Example:</span> Interest charged from is 5th of April , Principal is 10000 and interest is 1% per month then the interest will be (10000 * 1%)* (25/30) , it calculates for the month first then calculates exact periods between start date and end date(can be a decimal)
</td>
</tr>
<tr class=alt>
<td>inArrearsTolerance</td>
</tr>
<tr>
<td class=fielddesc>The amount that can be 'waived' at end
of all loan payments because it is too small to worry about.<br>
This is also the tolerance amount assessed when determining if a
loan is in arrears.
</td>
</tr>
<tr class=alt>
<td>principalVariationsForBorrowerCycle,interestRateVariationsForBorrowerCycle,<br>numberOfRepaymentVariationsForBorrowerCycle</td>
</tr>
<tr>
<td class=fielddesc>Variations for loan, based on borrower cycle number
</td>
</tr>
<tr class=alt>
<td>minimumDaysBetweenDisbursalAndFirstRepayment</td>
</tr>
<tr>
<td class=fielddesc>The minimum number of days allowed between a Loan disbursal and its first repayment.
</td>
</tr>
<tr class=alt>
<td>principalThresholdForLastInstalment</td>
</tr>
<tr>
<td class=fielddesc>Field represents percentage of current instalment principal amount for comparing against principal outstanding to add another repayment instalment. If the outstanding principal amount is less then calculated amount, remaining outstanding amount will be added to current instalment. Default value for multi disburse loan is 50% and non-multi disburse loan is 0%
</tr>
<tr class=alt>
<td>canDefineInstallmentAmount</td>
</tr>
<tr>
<td class=fielddesc>if provided as true, then fixed instalment amount can be provided from loan account.
</td>
</tr>
<tr class=alt>
<td>transactionProcessingStrategyId</td>
</tr>
<tr>
<td class=fielddesc>
An enumeration that indicates the type of transaction processing strategy to be used. This relates to functionality that is also known as <b>Payment Application Logic</b>.
<p>A number of out of the box approaches exist, some are custom to specific MFIs, some are more general and indicate the order in which payments are processed.</p>
<p>Refer to the <a href="#paymentapplicationlogic">Payment Application Logic / Transaction Processing Strategy<a> section in the appendix for more detailed overview of each available <b>payment application logic</b> provided out of the box.</p>
<i>List of current approaches</i>:<br/>
<ul>
<li>1 = Mifos style (Similar to Old Mifos)</li>
<li>2 = Heavensfamily (Custom MFI approach)</li>
<li>3 = Creocore (Custom MFI approach)</li>
<li>4 = RBI (India)</li>
<li>5 = Principal Interest Penalties Fees Order</li>
<li>6 = Interest Principal Penalties Fees Order</li>
<li>7 = Early Payment Strategy</li>
</ul>
</td>
</tr>
<tr class=alt>
<td>graceOnPrincipalPayment</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the number of repayment periods that grace should apply to the principal component of a repayment period.
</td>
</tr>
<tr class=alt>
<td>graceOnInterestPayment</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the number of repayment periods that grace should apply to the interest component of a repayment period. Interest is still calculated but offset to later repayment periods.
</td>
</tr>
<tr class=alt>
<td>graceOnInterestCharged</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the number of repayment periods that should be interest-free.
</td>
</tr>
<tr class=alt>
<td>graceOnArrearsAgeing</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - Used in Arrears calculation to only take into account loans that are more than graceOnArrearsAgeing days overdue.
</td>
</tr>
<tr class=alt>
<td>overdueDaysForNPA</td>
</tr>
<tr>
<td class=fielddesc>Optional: Integer - represents the maximum number of days a Loan may
be overdue before being classified as a NPA (non performing asset)
</td>
</tr>
<tr class=alt>
<td>accountMovesOutOfNPAOnlyOnArrearsCompletion</td>
</tr>
<tr>
<td class=fielddesc>Optional: Boolean - if provided as true, Loan Account moves out of NPA state only when all arrears are cleared
</td>
</tr>
<tr class=alt>
<td>accountingRule</td>
</tr>
<tr>
<td class=fielddesc>Specifies if accounting is enabled for the particular
product and the type of the accounting rule to be used
<span>Example Values:</span>1=NONE, 2=CASH_BASED, 3=ACCRUAL_PERIODIC, 4=ACCRUAL_UPFRONT</td>
</tr>
<tr class=alt>
<td>isInterestRecalculationEnabled</td>
</tr>
<tr>
<td class=fielddesc>It is a flag, Used to denote whether interest recalculation is enabled or disabled for the particular product</td>
</tr>
<tr class=alt>
<td>daysInYearType</td>
</tr>
<tr>
<td class=fielddesc>Specifies the number of days in a year. <br>
<span>Example Values:</span>1=ACTUAL(Actual number of days in year), 360=360 DAYS, 364=364 DAYS(52 WEEKS), 365=365 DAYS</td>
</tr>
<tr class=alt>
<td>daysInMonthType</td>
</tr>
<tr>
<td class=fielddesc>Specifies the number of days in a month. <br>
<span>Example Values:</span>1=ACTUAL(Actual number of days in month), 30=30 DAYS</td>
</tr>
<tr class=alt>
<td>interestRecalculationCompoundingMethod</td>
</tr>
<tr>
<td class=fielddesc>Specifies which amount portion should be added to principal for interest recalculation. <br>
<span>Example Values:</span>0=NONE(Only on principal), 1=INTEREST(Principal+Interest), 2=FEE(Principal+Fee), 3=FEE And INTEREST (Principal+Fee+Interest)</td>
</tr>
<tr class=alt>
<td>rescheduleStrategyMethod</td>
</tr>
<tr>
<td class=fielddesc>Specifies what action should perform on loan repayment schedule for advance payments. <br>
<span>Example Values:</span>1=Reschedule next repayments, 2=Reduce number of installments, 3=Reduce EMI amount</td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>Specifies effective date from which the compounding of interest or fee amounts will be considered in recalculation on late payment.<br>
<span>Example Values:</span>1=Same as repayment period, 2=Daily, 3=Weekly, 4=Monthly</td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyInterval</td>
</tr>
<tr>
<td class=fielddesc>Specifies compounding frequency interval for interest recalculation.<br>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyDate</td>
</tr>
<tr>
<td class=fielddesc>Specifies compounding frequency start date for interest recalculation.<br>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyType</td>
</tr>
<tr>
<td class=fielddesc>Specifies effective date from which the late or advanced payment amounts will be considered in recalculation.<br>
<span>Example Values:</span>1=Same as repayment period, 2=Daily, 3=Weekly, 4=Monthly</td>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyInterval</td>
</tr>
<tr>
<td class=fielddesc>Specifies rest frequency interval for interest recalculation.<br>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyDate</td>
</tr>
<tr>
<td class=fielddesc>Specifies rest frequency start date for interest recalculation.<br>
</tr>
<tr class=alt>
<td>preClosureInterestCalculationStrategy</td>
</tr>
<tr>
<td class=fielddesc>Specifies applicable days for interest calculation on pre closure of a loan.<br>
<span>Example Values:</span>1=Calculate till pre closure date, 2=Calculate till rest frequency date</td>
</tr>
<tr class=alt>
<td>isArrearsBasedOnOriginalSchedule</td>
</tr>
<tr>
<td class=fielddesc>If Specified as true, arrears will be identified based on original schedule.<br>
</tr>
<tr class=alt>
<td>allowAttributeOverrides</td>
</tr>
<tr>
<td class=fielddesc>Specifies if select attributes may be overridden for individual loan accounts.<br>
</tr>
</table>
</div>
</div>
<a id="loanproducts_list" name="loanproducts_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Loan Products</h4>
<p>Example Requests:</p>
<div class=apiClick>loanproducts</div>
<br>
<br>
<div class=apiClick>loanproducts?fields=name,description,interestRateFrequencyType,amortizationType</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts
</code>
<code class="method-response">
[
{
"id": 1,
"name": "personal loan product",
"shortName": "pe1",
"includeInBorrowerCycle": false,
"useBorrowerCycle": false,
"startDate": [
2013,
9,
2
],
"closeDate": [
2014,
2,
7
],
"status": "loanProduct.active",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principal": 10000.000000,
"minPrincipal": 5000.000000,
"maxPrincipal": 15000.000000,
"numberOfRepayments": 10,
"minNumberOfRepayments": 5,
"maxNumberOfRepayments": 15,
"repaymentEvery": 7,
"repaymentFrequencyType": {
"id": 0,
"code": "repaymentFrequency.periodFrequencyType.days",
"value": "Days"
},
"interestRatePerPeriod": 15.000000,
"interestRateFrequencyType": {
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
},
"annualInterestRate": 15.000000,
"amortizationType": {
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
"interestType": {
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
"interestCalculationPeriodType": {
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
},
"transactionProcessingStrategyId": 1,
"transactionProcessingStrategyName": "Mifos style",
"principalVariationsForBorrowerCycle": [],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": [],
"daysInMonthType": {
"id": 30,
"code": "DaysInMonthType.days360",
"value": "30 Days"
},
"daysInYearType": {
"id": 360,
"code": "DaysInYearType.days360",
"value": "360 Days"
},
"isInterestRecalculationEnabled": true,
"interestRecalculationData": {
"id": 3,
"productId": 1,
"interestRecalculationCompoundingType": {
"id": 2,
"code": "interestRecalculationCompoundingMethod.fee",
"value": "Fee"
},
"recalculationCompoundingFrequencyType": {
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
},
"rescheduleStrategyType": {
"id": 2,
"code": "loanRescheduleStrategyMethod.reduce.number.of.installments",
"value": "Reduce number of installments"
},
"recalculationRestFrequencyType": {
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
},
"preClosureInterestCalculationStrategy": {
"id":1,
"code":"loanPreClosureInterestCalculationStrategy.tillPreClosureDate",
"value":"Till preclose Date"
},
"isArrearsBasedOnOriginalSchedule" : true
},
"accountingRule": {
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
},
"principalThresholdForLastInstalment":0
}
]
</code>
</div>
</div>
<a id="loanproducts_template" name="loanproducts_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Loan Product Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>loanproducts/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts/template
</code>
<code class="method-response">
{
"includeInBorrowerCycle": false,
"useBorrowerCycle": false,
"currency": {
"code": "",
"name": "",
"decimalPlaces": 0,
"inMultiplesOf": 0,
"displaySymbol": "",
"nameCode": "",
"displayLabel": " []"
},
"repaymentFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"interestRateFrequencyType": {
"id": 2,
"code": "interestRateFrequency.periodFrequencyType.months",
"value": "Per month"
},
"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"
},
"principalVariationsForBorrowerCycle": [],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": [],
"accountingRule": {
"id": 1,
"code": "accountingRuleType.none",
"value": "NONE"
},
"daysInMonthType": {
"id": 1,
"code": "DaysInMonthType.actual",
"value": "Actual"
},
"daysInYearType": {
"id": 1,
"code": "DaysInYearType.actual",
"value": "Actual"
},
"isInterestRecalculationEnabled": false,
"interestRecalculationData": {
"interestRecalculationCompoundingType": {
"id": 0,
"code": "interestRecalculationCompoundingMethod.none",
"value": "None"
},
"rescheduleStrategyType": {
"id": 3,
"code": "loanRescheduleStrategyMethod.reduce.emi.amount",
"value": "Reduce EMI amount"
},"preClosureInterestCalculationStrategy": {
"id":1,
"code":"loanPreClosureInterestCalculationStrategy.tillPreClosureDate",
"value":"Till preclose Date"
}
},
"paymentTypeOptions": [
{
"id": 10,
"name": "check",
"position": 1
}
],
"currencyOptions": [
{
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
],
"repaymentFrequencyTypeOptions": [
{
"id": 0,
"code": "repaymentFrequency.periodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "repaymentFrequency.periodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
}
],
"preClosureInterestCalculationStrategyOptions": [
{
"id":1,
"code":"loanPreClosureInterestCalculationStrategy.tillPreClosureDate",
"value":"Till preclose Date"
},
{
"id":2,
"code":"loanPreClosureInterestCalculationStrategy.tillRestFrequencyDate",
"value":"Till rest Frequency Date"
}
],
"interestRateFrequencyTypeOptions": [
{
"id": 2,
"code": "interestRateFrequency.periodFrequencyType.months",
"value": "Per month"
},
{
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
}
],
"amortizationTypeOptions": [
{
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
{
"id": 0,
"code": "amortizationType.equal.principal",
"value": "Equal principal payments"
}
],
"interestTypeOptions": [
{
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
{
"id": 0,
"code": "interestType.declining.balance",
"value": "Declining Balance"
}
],
"interestCalculationPeriodTypeOptions": [
{
"id": 0,
"code": "interestCalculationPeriodType.daily",
"value": "Daily"
},
{
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
}
],
"transactionProcessingStrategyOptions": [
{
"id": 1,
"code": "mifos-standard-strategy",
"name": "Penalties, Fees, Interest, Principal order"
},
{
"id": 2,
"code": "heavensfamily-strategy",
"name": "HeavensFamily Unique"
},
{
"id": 3,
"code": "creocore-strategy",
"name": "Creocore Unique"
},
{
"id": 4,
"code": "rbi-india-strategy",
"name": "Overdue/Due Fee/Int,Principal"
},
{
"id": 5,
"code": "principal-interest-penalties-fees-order-strategy",
"name": "Principal Interest Penalties Fees Order"
},
{
"id": 6,
"code": "interest-principal-penalties-fees-order-strategy",
"name": "Interest Principal Penalties Fees Order"
}
],
"chargeOptions": [
{
"id": 5,
"name": "des charge",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 1,
"name": "flat install",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50.000000,
"chargeTimeType": {
"id": 8,
"code": "chargeTimeType.instalmentFee",
"value": "Instalment Fee"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 9,
"name": "install amt+int",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5.000000,
"chargeTimeType": {
"id": 8,
"code": "chargeTimeType.instalmentFee",
"value": "Instalment Fee"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 3,
"code": "chargeCalculationType.percent.of.amount.and.interest",
"value": "% Loan Amount + Interest"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 10,
"name": "install int",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5.000000,
"chargeTimeType": {
"id": 8,
"code": "chargeTimeType.instalmentFee",
"value": "Instalment Fee"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 4,
"code": "chargeCalculationType.percent.of.interest",
"value": "% Interest"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 2,
"name": "install per",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5.000000,
"chargeTimeType": {
"id": 8,
"code": "chargeTimeType.instalmentFee",
"value": "Instalment Fee"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"chargePaymentMode": {
"id": 1,
"code": "chargepaymentmode.accounttransfer",
"value": "Account transfer"
}
},
{
"id": 8,
"name": "spe int",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5.000000,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 4,
"code": "chargeCalculationType.percent.of.interest",
"value": "% Interest"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 4,
"name": "specific acc transfer",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 1,
"code": "chargepaymentmode.accounttransfer",
"value": "Account transfer"
}
},
{
"id": 7,
"name": "specific amt+int",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5.000000,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 3,
"code": "chargeCalculationType.percent.of.amount.and.interest",
"value": "% Loan Amount + Interest"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 3,
"name": "specific per",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5.000000,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 6,
"name": "xyz",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50.000000,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 1,
"code": "chargepaymentmode.accounttransfer",
"value": "Account transfer"
}
}
],
"accountingRuleOptions": [
{
"id": 1,
"code": "accountingRuleType.none",
"value": "NONE"
},
{
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
},
{
"id": 3,
"code": "accountingRuleType.accrual",
"value": "ACCRUAL BASED"
}
],
"accountingMappingOptions": {
"liabilityAccountOptions": [
{
"id": 11,
"name": "over payment",
"glCode": "13",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "over payment",
"tagId": {
"id": 0
},
"organizationRunningBalance": 0
},
],
"assetAccountOptions": [
{
"id": 1,
"name": "fund source",
"glCode": "01",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "fund source",
"tagId": {
"id": 0
},
"organizationRunningBalance": -60000
},
{
"id": 2,
"name": "Loan portfolio",
"glCode": "02",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "Loan portfolio",
"tagId": {
"id": 0
},
"organizationRunningBalance": 60000
},
{
"id": 3,
"name": "transfers",
"glCode": "03",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "transfers",
"tagId": {
"id": 0
},
"organizationRunningBalance": 0
},
],
"expenseAccountOptions": [
{
"id": 10,
"name": "loans written off 2",
"glCode": "12",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "loans written off 2",
"tagId": {
"id": 0
},
"organizationRunningBalance": 0
}
],
"incomeAccountOptions": [
{
"id": 4,
"name": "income from interest",
"glCode": "04",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "income from interest",
"tagId": {
"id": 0
},
"organizationRunningBalance": 19
},
{
"id": 8,
"name": "income from fees 2",
"glCode": "10",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "income from fees 2",
"tagId": {
"id": 0
},
"organizationRunningBalance": 0
},
{
"id": 9,
"name": "income from penalities 2",
"glCode": "11",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "income from penalities 2",
"tagId": {
"id": 0
},
"organizationRunningBalance": 0
}
]
},
"valueConditionTypeOptions": [
{
"id": 2,
"code": "LoanProductValueConditionType.equal",
"value": "equals"
},
{
"id": 3,
"code": "LoanProductValueConditionType.greterthan",
"value": "greter than"
}
],
"daysInMonthTypeOptions": [{
"id": 1,
"code": "DaysInMonthType.actual",
"value": "Actual"
},
{
"id": 30,
"code": "DaysInMonthType.days360",
"value": "30 Days"
}],
"daysInYearTypeOptions": [{
"id": 1,
"code": "DaysInYearType.actual",
"value": "Actual"
},
{
"id": 360,
"code": "DaysInYearType.days360",
"value": "360 Days"
},
{
"id": 364,
"code": "DaysInYearType.days364",
"value": "364 Days"
},
{
"id": 365,
"code": "DaysInYearType.days365",
"value": "365 Days"
}],
"interestRecalculationCompoundingTypeOptions": [{
"id": 0,
"code": "interestRecalculationCompoundingMethod.none",
"value": "None"
},
{
"id": 2,
"code": "interestRecalculationCompoundingMethod.fee",
"value": "Fee"
},
{
"id": 1,
"code": "interestRecalculationCompoundingMethod.interest",
"value": "Interest"
},
{
"id": 3,
"code": "interestRecalculationCompoundingMethod.interest.and.fee",
"value": "Fee and Interest"
}],
"rescheduleStrategyTypeOptions": [{
"id": 3,
"code": "loanRescheduleStrategyMethod.reduce.emi.amount",
"value": "Reduce EMI amount"
},
{
"id": 2,
"code": "loanRescheduleStrategyMethod.reduce.number.of.installments",
"value": "Reduce number of installments"
},
{
"id": 1,
"code": "loanRescheduleStrategyMethod.reschedule.next.repayments",
"value": "Reschedule next repayments"
}],
"interestRecalculationFrequencyTypeOptions": [
{
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
},
{
"id":2,
"code":"interestRecalculationFrequencyType.daily",
"value":"Daily"
},
{
"id":3,
"code":"interestRecalculationFrequencyType.weekly",
"value":"Weekly"
},
{
"id":4,
"code":"interestRecalculationFrequencyType.monthly",
"value":"Monthly"
}]
}
</code>
</div>
</div>
<a id="loanproducts_retrieve" name="loanproducts_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan Product</h4>
<p>Example Requests:</p>
<div class=apiClick>loanproducts/1</div>
<br>
<br>
<div class=apiClick>loanproducts/1?template=true</div>
<br>
<br>
<div class=apiClick>loanproducts/1?fields=name,description,numberOfRepayments</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts/{productId}
</code>
<code class="method-response">
{
"id": 11,
"name": "advanced accounting",
"shortName": "ad11",
"includeInBorrowerCycle": true,
"useBorrowerCycle": true,
"status": "loanProduct.active",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"principal": 10000.000000,
"minPrincipal": 2000.000000,
"maxPrincipal": 15000.000000,
"numberOfRepayments": 7,
"repaymentEvery": 7,
"repaymentFrequencyType": {
"id": 0,
"code": "repaymentFrequency.periodFrequencyType.days",
"value": "Days"
},
"interestRatePerPeriod": 5.000000,
"interestRateFrequencyType": {
"id": 2,
"code": "interestRateFrequency.periodFrequencyType.months",
"value": "Per month"
},
"annualInterestRate": 60.000000,
"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"
},
"transactionProcessingStrategyId": 1,
"transactionProcessingStrategyName": "Mifos style",
"charges": [],
"principalVariationsForBorrowerCycle": [
{
"id": 21,
"borrowerCycleNumber": 1,
"paramType": {
"id": 1,
"code": "LoanProductParamType.principal",
"value": "principal"
},
"valueConditionType": {
"id": 2,
"code": "LoanProductValueConditionType.equal",
"value": "equals"
},
"minValue": 2000.000000,
"maxValue": 20000.000000,
"defaultValue": 15000.000000
},
{
"id": 20,
"borrowerCycleNumber": 1,
"paramType": {
"id": 1,
"code": "LoanProductParamType.principal",
"value": "principal"
},
"valueConditionType": {
"id": 3,
"code": "LoanProductValueConditionType.greterthan",
"value": "greter than"
},
"minValue": 3000.000000,
"maxValue": 25000.000000,
"defaultValue": 20000.000000
}
],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": [],
"accountingRule": {
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
},
"accountingMappings": {
"fundSourceAccount": {
"id": 1,
"name": "fund source",
"glCode": "01"
},
"loanPortfolioAccount": {
"id": 2,
"name": "Loan portfolio",
"glCode": "02"
},
"transfersInSuspenseAccount": {
"id": 3,
"name": "transfers",
"glCode": "03"
},
"interestOnLoanAccount": {
"id": 4,
"name": "income from interest",
"glCode": "04"
},
"incomeFromFeeAccount": {
"id": 8,
"name": "income from fees 2",
"glCode": "10"
},
"incomeFromPenaltyAccount": {
"id": 9,
"name": "income from penalities 2",
"glCode": "11"
},
"writeOffAccount": {
"id": 10,
"name": "loans written off 2",
"glCode": "12"
},
"overpaymentLiabilityAccount": {
"id": 11,
"name": "over payment",
"glCode": "13"
}
},
"paymentChannelToFundSourceMappings": [
{
"paymentType": {
"id": 10,
"name": "check"
},
"fundSourceAccount": {
"id": 1,
"name": "fund source",
"glCode": "01"
}
}
],
"feeToIncomeAccountMappings": [
{
"charge": {
"id": 1,
"name": "flat install",
"active": false,
"penalty": false
},
"incomeAccount": {
"id": 8,
"name": "income from fees 2",
"glCode": "10"
}
},
{
"charge": {
"id": 2,
"name": "install per",
"active": false,
"penalty": false
},
"incomeAccount": {
"id": 4,
"name": "income from interest",
"glCode": "04"
}
},
{
"charge": {
"id": 5,
"name": "des charge",
"active": false,
"penalty": false
},
"incomeAccount": {
"id": 9,
"name": "income from penalities 2",
"glCode": "11"
}
},
"multiDisburseLoan":true,"maxTrancheCount":3,"outstandingLoanBalance":36000.000000,
"overdueDaysForNPA":2,
"principalThresholdForLastInstalment":50
]
}
</code>
</div>
</div>
<a id="loanproducts_create" name="loanproducts_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Loan Product</h4>
<p>Depending of the Accounting Rule (accountingRule) selected,
additional fields with details of the appropriate Ledger Account
identifiers would need to be passed in.
</p>
</p>Refer <a href="https://mifosforge.jira.com/wiki/display/MIFOSX/A+Possible+accounting+Spec">
MifosX Accounting Specs Draft</a> for more details regarding the
significance of the selected accounting rule
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, shortName, currencyCode, digitsAfterDecimal, inMultiplesOf, principal,
numberOfRepayments, repaymentEvery, repaymentFrequencyType,
interestRatePerPeriod, interestRateFrequencyType, amortizationType, interestType,
interestCalculationPeriodType, transactionProcessingStrategyId,
accountingRule, isInterestRecalculationEnabled, daysInYearType, daysInMonthType</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>inArrearsTolerance, graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged, graceOnArrearsAgeing, charges, paymentChannelToFundSourceMappings, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, includeInBorrowerCycle,
useBorrowerCycle,principalVariationsForBorrowerCycle,
numberOfRepaymentVariationsForBorrowerCycle,
interestRateVariationsForBorrowerCycle,
multiDisburseLoan,maxTrancheCount,
outstandingLoanBalance,overdueDaysForNPA,holdGuaranteeFunds, principalThresholdForLastInstalment, accountMovesOutOfNPAOnlyOnArrearsCompletion, canDefineInstallmentAmount, installmentAmountInMultiplesOf, allowAttributeOverrides, allowPartialPeriodInterestCalcualtion
</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields for Cash(2) based accounting</div></td>
</tr>
<tr class=alt>
<td>fundSourceAccountId, loanPortfolioAccountId, interestOnLoanAccountId,
incomeFromFeeAccountId, incomeFromPenaltyAccountId,
writeOffAccountId, transfersInSuspenseAccountId, overpaymentLiabilityAccountId</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields for periodic (3) and upfront (4)accrual accounting</div></td>
</tr>
<tr class=alt>
<td>fundSourceAccountId, loanPortfolioAccountId, interestOnLoanAccountId,
incomeFromFeeAccountId, incomeFromPenaltyAccountId,
writeOffAccountId, receivableInterestAccountId, receivableFeeAccountId,
receivablePenaltyAccountId, transfersInSuspenseAccountId, overpaymentLiabilityAccountId</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields if interest recalculation is enabled(true)</div></td>
</tr>
<tr class=alt>
<td>interestRecalculationCompoundingMethod, rescheduleStrategyMethod, recalculationRestFrequencyType</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Optional Fields if interest recalculation is enabled(true) </div></td>
</tr>
<tr class=alt>
<td>isArrearsBasedOnOriginalSchedule, preClosureInterestCalculationStrategy</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Optional Fields if interest recalculation is enabled(true) and recalculationRestFrequencyType is not same as repayment period</div></td>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyInterval, recalculationRestFrequencyDate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Optional Fields if interest recalculation is enabled(true) and interestRecalculationCompoundingMethod is enabled</div></td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyType</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Optional Fields if interest recalculation is enabled(true) and interestRecalculationCompoundingMethod is enabled and
recalculationCompoundingFrequencyType is not same as repayment period</div></td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyInterval, recalculationCompoundingFrequencyDate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields if Hold Guarantee funds is enabled(true)</div></td>
</tr>
<tr class=alt>
<td>mandatoryGuarantee</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Optional Fields if Hold Guarantee funds is enabled(true)</div></td>
</tr>
<tr class=alt>
<td>minimumGuaranteeFromOwnFunds,minimumGuaranteeFromGuarantor</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loanproducts
</code>
<code class="method-request">
POST loanproducts
Content-Type: application/json
Request Body:
{"currencyCode":"USD",
"includeInBorrowerCycle":"true",
"useBorrowerCycle":true,
"digitsAfterDecimal":"2",
"inMultiplesOf":"0",
"repaymentFrequencyType":0,
"interestRateFrequencyType":2,
"amortizationType":1,
"interestType":0,
"interestCalculationPeriodType":1,
"transactionProcessingStrategyId":1,
"principalVariationsForBorrowerCycle":[],
"interestRateVariationsForBorrowerCycle":[],
"numberOfRepaymentVariationsForBorrowerCycle":[
{
"valueConditionType":2,
"borrowerCycleNumber":"1",
"minValue":"5",
"defaultValue":"10",
"maxValue":"15"
},
{
"valueConditionType":3,
"borrowerCycleNumber":"1",
"minValue":"7",
"defaultValue":"15",
"maxValue":"20"
}
],
"allowAttributeOverrides":
{amortizationType : true,
interestType : true,
transactionProcessingStrategyId : false,
interestCalculationPeriodType : true,
inArrearsTolerance : false,
repaymentEvery : true,
graceOnPrincipalAndInterestPayment : true,
graceOnArrearsAgeing : true},
"accountingRule":"2",
"name":"product 5",
"shortName":"prd5",
"principal":"5000",
"numberOfRepayments":"7",
"repaymentEvery":"7",
"interestRatePerPeriod":"5",
"paymentChannelToFundSourceMappings":[],
"feeToIncomeAccountMappings":[],
"penaltyToIncomeAccountMappings":[],
"charges":[],
"overdueDaysForNPA":2,
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"fundSourceAccountId":1,
"loanPortfolioAccountId":2,
"transfersInSuspenseAccountId":3,
"interestOnLoanAccountId":4,
"incomeFromFeeAccountId":8,
"incomeFromPenaltyAccountId":9,
"writeOffAccountId":10,
"overpaymentLiabilityAccountId":11,
"daysInMonthType":1,
"daysInYearType":1,
"isInterestRecalculationEnabled":"false",
"holdGuaranteeFunds":"false",
"principalThresholdForLastInstallment":20
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
<code class="method-request">
POST loanproducts
Content-Type: application/json
Request Body:
{
"name": "LP Cash Accounting",
"shortName": "LPCA",
"currencyCode": "USD",
"locale": "en_GB",
"digitsAfterDecimal": "2",
"inMultiplesOf": 0,
"principal": "100,000.00",
"numberOfRepayments": "12",
"repaymentEvery": "1",
"repaymentFrequencyType": 2,
"transactionProcessingStrategyId": 1,
"interestRatePerPeriod": "1.75",
"interestRateFrequencyType": 2,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1,
"daysInMonthType":1,
"daysInYearType":1,
"isInterestRecalculationEnabled":"true",
"interestRecalculationCompoundingMethod":"0",
"rescheduleStrategyMethod":"3",
"recalculationRestFrequencyType":"1",
"preClosureInterestCalculationStrategy":1,
"accountingRule":"2",
"fundSourceAccountId":"4",
"loanPortfolioAccountId":"8",
"interestOnLoanAccountId":"34",
"incomeFromFeeAccountId":"37",
"incomeFromPenaltyAccountId":"35",
"writeOffAccountId":"41",
"transfersInSuspenseAccountId":"4",
"overpaymentLiabilityAccountId":"2",
"paymentChannelToFundSourceMappings": [
{
"paymentTypeId": "11",
"fundSourceAccountId": "11"
}
],
"feeToIncomeAccountMappings": [
{
"chargeId": "1",
"incomeAccountId": "5"
},
{
"chargeId": "2",
"incomeAccountId": "8"
}
],
"penaltyToIncomeAccountMappings": [
{
"chargeId": "6",
"incomeAccountId": "9"
}
]
}
</code>
<code class="method-response">
{
"resourceId": 2
}
</code>
<code class="method-request">
POST loanproducts
Content-Type: application/json
Request Body:
{
"name": "LP Accrual Accounting",
"shortName": "LPAA",
"currencyCode": "USD",
"locale": "en_GB",
"digitsAfterDecimal": "2",
"inMultiplesOf": 0,
"principal": "100,000.00",
"numberOfRepayments": "12",
"repaymentEvery": "1",
"repaymentFrequencyType": 2,
"transactionProcessingStrategyId": 1,
"interestRatePerPeriod": "1.75",
"interestRateFrequencyType": 2,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1,
"daysInMonthType":1,
"daysInYearType":1,
"isInterestRecalculationEnabled":"false",
"accountingRule":"3",
"fundSourceAccountId":"4",
"loanPortfolioAccountId":"8",
"receivableInterestAccountId":"9",
"receivableFeeAccountId":"11",
"receivablePenaltyAccountId":"10",
"interestOnLoanAccountId":"34",
"incomeFromFeeAccountId":"37",
"incomeFromPenaltyAccountId":"35",
"overpaymentLiabilityAccountId":"2",
"writeOffAccountId":"41"
}
</code>
<code class="method-response">
{
"resourceId": 3
}
</code>
</div>
</div>
<a id="loanproducts_update" name="loanproducts_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Loan Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/loanproducts/{loanId}
</code>
<code class="method-request">
PUT loanproducts/1
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"principal": "70,000.00"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"principal": 70000,
"locale": "en_GB"
}
}
</code>
<code class="method-request">
PUT loanproducts/3
Content-Type: application/json
Request Body:
{
"locale": "en",
"isInterestRecalculationEnabled":"true",
"interestRecalculationCompoundingMethod":"0",
"rescheduleStrategyMethod":"3",
"recalculationRestFrequencyType":"1"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"locale": "en",
"isInterestRecalculationEnabled":"true",
"interestRecalculationCompoundingMethod":"0",
"rescheduleStrategyMethod":"3",
"recalculationRestFrequencyType":"1"
}
}
</code>
</div>
</div>
<!-- end of loan products api docs -->
<!-- start of loan products mix api docs -->
<a id="loanproductmix" name="loanproductmix" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Loan Products Mix</h3>
<p>If you have the appropriate permissions, you can decide which types of products a given client or group can mix. In this way, you can restrict clients from having active loans accounts of different products at the same time.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>restrictedProducts</td>
</tr>
<tr>
<td class=fielddesc>List of productIds to create a product mix</td>
</tr>
</table>
</div>
</div>
<a id="loanproductmix_list" name="loanproductmix_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Loan Product Mix</h4>
<p>Example Requests:</p>
<div class=apiClick>loanproducts?associations=productMixes</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts?associations=productMixes
</code>
<code class="method-response">
[
{
"productId": 1,
"productName": "Personal Loan",
"restrictedProducts": [
{
"id": 2,
"name": "Joint Loan",
"includeInBorrowerCycle": false
},
{
"id": 5,
"name": "Primary Loan",
"includeInBorrowerCycle": false
},
{
"id": 3,
"name": "Daily Loan",
"includeInBorrowerCycle": false
}
],
"allowedProducts": [
{
"id": 1,
"name": "Personal Loan",
"includeInBorrowerCycle": false
},
{
"id": 6,
"name": "Personal Loan -2",
"includeInBorrowerCycle": false
},
{
"id": 4,
"name": "Weekly Loan",
"includeInBorrowerCycle": false
}
]
},
{
"productId": 2,
"productName": "Joint Loan",
"restrictedProducts": [
{
"id": 1,
"name": "Personal Loan",
"includeInBorrowerCycle": false
},
{
"id": 6,
"name": "Personal Loan -2",
"includeInBorrowerCycle": false
}
],
"allowedProducts": [
{
"id": 3,
"name": "Daily Loan",
"includeInBorrowerCycle": false
},
{
"id": 2,
"name": "Joint Loan",
"includeInBorrowerCycle": false
},
{
"id": 5,
"name": "Primary Loan",
"includeInBorrowerCycle": false
},
{
"id": 4,
"name": "Weekly Loan",
"includeInBorrowerCycle": false
}
]
}
]
</code>
</div>
</div>
<a id="loanproductmix_template" name="loanproductmix_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Product Mix Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<p>This request gets all the products details for which productmix is not defined.</p>
<br/>
<div class=apiClick>loanproducts/template?isProductMixTemplate=true</div>
<br/><br/>
<p>This request gets the productmix details for the specific loanproduct.</p>
<br/>
<div class=apiClick>loanproducts/5/productmix</div>
<br/>
<div class=apiClick>loanproducts/5/productmix?template=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts/template?isProductMixTemplate=true
</code>
<code class="method-response">
{
"productOptions": [
{
"id": 5,
"name": "Primary Loan"
},
{
"id": 4,
"name": "Weekly Loan"
}
]
}
</code>
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts/5/productmix
</code>
<code class="method-response">
{
"restrictedProducts": [
{
"id": 1,
"name": "Personal Loan",
"includeInBorrowerCycle": false
}
],
"allowedProducts": [
{
"id": 3,
"name": "Daily Loan",
"includeInBorrowerCycle": false
},
{
"id": 2,
"name": "Joint Loan",
"includeInBorrowerCycle": false
},
{
"id": 6,
"name": "Personal Loan -2",
"includeInBorrowerCycle": false
},
{
"id": 5,
"name": "Primary Loan",
"includeInBorrowerCycle": false
},
{
"id": 4,
"name": "Weekly Loan",
"includeInBorrowerCycle": false
}
]
}
</code>
</div>
</div>
<a id="loanproductmix_retrieve" name="loanproductmix_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Loan Product Mix</h4>
<p>Example Requests:</p>
<div class=apiClick>loanproducts/5/productmix</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/loanproducts/5/productmix
</code>
<code class="method-response">
{
"restrictedProducts": [
{
"id": 1,
"name": "Personal Loan",
"includeInBorrowerCycle": false
}
],
"allowedProducts": [
{
"id": 3,
"name": "Daily Loan",
"includeInBorrowerCycle": false
},
{
"id": 2,
"name": "Joint Loan",
"includeInBorrowerCycle": false
},
{
"id": 6,
"name": "Personal Loan -2",
"includeInBorrowerCycle": false
},
{
"id": 5,
"name": "Primary Loan",
"includeInBorrowerCycle": false
},
{
"id": 4,
"name": "Weekly Loan",
"includeInBorrowerCycle": false
}
]
}
</code>
</div>
</div>
<a id="loanproductmix_create" name="loanproductmix_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Loan Product Mix</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>restrictedProducts</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/loanproducts/5/productmix
</code>
<code class="method-request">
POST loanproducts/{productId}/productmix
Content-Type: application/json
Request Body:
{"restrictedProducts":["1"]}
</code>
<code class="method-response">
{
"changes":{
"restrictedProductsForMix":[1],
"removedProductsForMix":[]
},
"productId":5
}
</code>
</div>
</div>
<a id="loanproductmix_update" name="loanproductmix_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Loan Product Mix</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/loanproducts/{productId}/productmix
</code>
<code class="method-request">
PUT loanproducts/5/productmix
Content-Type: application/json
Request Body:
{
"restrictedProducts":["3"]
}
</code>
<code class="method-response">
{
"changes": {
"restrictedProductsForMix": [3],
"removedProductsForMix": [1]
},
"productId": 5
}
</code>
</div>
</div>
<a id="loanproductmix_delete" name="loanproductmix_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Loan Product Mix</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/loanproducts/{productId}/productmix
</code>
<code class="method-request">
DELETE loanproducts/5/productmix
</code>
<code class="method-response">
{
"changes": {
"removedProductsForMix": [3]
},
"productId": 5
}
</code>
</div>
</div>
<!-- end of loan products mix api docs -->
<!-- start of holidays api docs -->
<a id="holidays" name="holidays" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Holidays</h3>
<p>Some MFI's span large regions where different branch offices might observe different holidays. They need the ability to define holidays for specific branch offices and be able to set the repayment rule to follow during those holidays.
</p>
<p>
The reschedule of repayments to <b>repaymentsRescheduledTo</b> date during defined holidays is turned on/off by enabling/disabling <i>reschedule-repayments-on-holidays</i> in <a href="#configs_global">Global configurations</a>.
</p>
<p> Allow Repayment transactions on a defined holidays is turned on/off by enabling/disabling allow-transactions-on-holiday in <a href="#configs_global">Global configurations</a>.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the holiday.
</td>
</tr>
<tr class=alt>
<td>fromDate</td>
</tr>
<tr>
<td class=fielddesc>The date on holiday begins.
</td>
</tr>
<tr class=alt>
<td>toDate</td>
</tr>
<tr>
<td class=fielddesc>The date on holiday ends.
</td>
</tr>
<tr class=alt>
<td>repaymentsRescheduledTo</td>
</tr>
<tr>
<td class=fielddesc>Date to which repayments will be rescheduled when repayments date falls on a defined holiday. e.g. A holiday is defined on 25th of October 2013 with repaymentsRescheduledTo date to 26th of October 2013 and any loans with repayments date on 25th of October 2013 will be rescheduled to 26th of October 2013.
</td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>The officeId represents the office to which holiday is applied.
</td>
</tr>
</table>
</div>
</div>
<a id="holidays_list" name="holidays_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Holidays</h4>
<p>Example Requests:</p>
<div class=apiClick>holidays?officeId=1</div>
<br>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/holidays?officeId=1
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Good Friday",
"fromDate": [
2013,
10,
25
],
"toDate": [
2013,
10,
25
],
"repaymentsScheduleTo": [
2013,
10,
26
],
"status": {
"id": 100,
"code": "holidayStatusType.pending.for.activation",
"value": "Pending for activation"
}
}
]
</code>
</div>
</div>
<a id="holidays_create" name="holiday_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Holiday</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, description, fromDate, toDate, repaymentsRescheduledTo, offices</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/holidays
</code>
<code class="method-request">
POST holidays
Content-Type: application/json
Request Body:
{
"name": "Good Friday",
"description": "Good Friday",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"fromDate": "25 October 2013",
"toDate": "25 October 2013",
"repaymentsRescheduledTo": "26 October 2013",
"offices": [
{"officeId":"1"},
{"officeId":"2"}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="holidays_activate" name="holidays_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Activate a Holiday</h4>
<p>Always Holidays are created in pending state. This API allows to activate a holiday.</p>
<p>Only the active holidays are considered for rescheduling the loan repayment.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/holidays/{holidayId}?command=activate
</code>
<code class="method-request">
POST holidays
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="holidays_retrieve" name="holidays_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Holiday</h4>
<p>Example Requests:</p>
<div class=apiClick>holidays/1</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/holidays/{holidayId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Good Friday",
"fromDate": [
2013,
10,
25
],
"toDate": [
2013,
10,
25
],
"repaymentsRescheduledTo": [
2013,
10,
26
],
"status": {
"id": 100,
"code": "holidayStatusType.active",
"value": "Active"
}
}
</code>
</div>
</div>
<a id="holidays_update" name="holidays_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Holiday</h4>
<p>If a holiday is in pending state (created and not activated) then all fields are allowed to modify. Once holidays become active only name and descriptions are allowed to modify.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/holidays/{holidayId}
</code>
<code class="method-request">
PUT holidays/1
Content-Type: application/json
Request Body:
{
name:"Independence day",
description: "Holiday for Independence day celebration"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"name": "Independence day",
"description": "Holiday for Independence day celebration"
}
}
</code>
</div>
</div>
<a id="holidays_delete" name="holidays_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Holiday</h4>
<p>This API allows to delete a holiday. This is a soft delete the deleted holiday status is marked as deleted.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/holidays/{holidayId}
</code>
<code class="method-request">
DELETE holidays/1
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of holidays api docs -->
<!-- start of workingdays api docs -->
<a id="workingdays" name="workingdays" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Working days</h3>
<p>The days of the week that are workdays.
</p>
<p>
Rescheduling of repayments when it falls on a non-working is turned on /off by enable/disable reschedule-future-repayments parameter in <a href="#configs_global">Global configurations</a>.
</p>
<p>
Allow transactions on non-working days is configurable by enabling/disbaling the allow-transactions-on-non_workingday parameter in <a href="#configs_global">Global configurations</a>.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandotory Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>recurrence</td>
</tr>
<tr>
<td class=fielddesc>Recurrence pattern</td>
</tr>
<tr class=alt>
<td>repaymentRescheduleType</td>
</tr>
<tr>
<td class=fielddesc>repayment reschedule type .Options listed on the schedule for repayments on non-working days
</td>
</tr>
<tr class=alt>
<td>extendTermForDailyRepayments</td>
</tr>
<tr>
<td class=fielddesc>Extend the term for loans following a daily repayment schedule.Expects boolean value true/false</td>
</tr>
<tr class=alt>
<td>locale</td>
</tr>
<tr>
<td class=fielddesc>locale must be provided.</td>
</tr>
</table>
<table id="nw_repayment_schedule_rule" class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Schedule for repayments on non-working day</div></td>
</tr>
<tr class=alt>
<td>Same day</td>
</tr>
<tr>
<td class=fielddesc>The repayments schedule for same day regardless of it's a non-working day.
</td>
</tr>
<tr class=alt>
<td>Next workday</td>
</tr>
<tr>
<td class=fielddesc>The repayments reschedule to next working day. e.g. if a repayment falls on a non-working day will be rescheduled to next available working day.
</td>
</tr>
<tr class=alt>
<td>Previous workday</td>
</tr>
<tr>
<td class=fielddesc>The repayments reschedule to previous working day. e.g. if a repayment falls on a non-working day will be rescheduled to previous available working day.
</td>
</tr>
<tr class=alt>
<td>Next scheduled meeting</td>
</tr>
<tr>
<td class=fielddesc>The repayments reschduled to next scheduled meeting.
</td>
</tr>
</table>
</div>
</div>
<a id="workingdays_template" name="workingdays_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Working Days Template</h4>
<p>This is a convenience resource. It can be useful when
building maintenance user interface screens for working days.
</p>
<p>Example Request:</p>
<div class=apiClick>workingdays/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/workingdays/template
</code>
<code class="method-response">
{
"repaymentRescheduleOptions": [
{
"id": 1,
"code": "RepaymentRescheduleType.same.day",
"value": "same day"
},
{
"id": 4,
"code": "RepaymentRescheduleType.move.to.previous.working.day",
"value": "move to previous working day"
},
{
"id": 3,
"code": "RepaymentRescheduleType.move.to.next.repayment.meeting.day",
"value": "move to next repayment meeting day"
},
{
"id": 2,
"code": "RepaymentRescheduleType.move.to.next.working.day",
"value": "move to next working day"
}
]
}
</code>
</div>
</div>
<a id="workingdays_list" name="workingdays_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Working days</h4>
<p>Example Requests:</p>
<div class=apiClick>workingdays</div>
<br>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/workingdays
</code>
<code class="method-response">
[
{
"id": 1,
"recurrence": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR",
"repaymentRescheduleType": {
"id": 4,
"code": "RepaymentRescheduleType.move.to.next.working.day",
"value": "move to next working day"
}
"extendTermForDailyRepayments" : true
}
]
</code>
</div>
</div>
<a id="workingdays_update" name="workingdays_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Working Day</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>recurrence,repaymentRescheduleType,extendTermForDailyRepayments,locale</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/Workingdays/1
</code>
<code class="method-request">
PUT holidays
Content-Type: application/json
Request Body:
{
"recurrence": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,SU",
"locale": "en",
"repaymentsRescheduledType": 4,
"extendTermForDailyRepayments": false
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of workingdays api docs -->
<!-- start of configurations api docs -->
<a id="configs" name="configs" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Currency</h3>
<p>Application related configuration around viewing/updating
the currencies permitted for use within the MFI.</p>
</div>
</div>
<a id="configs_currencyretrieve" name="configs_currencyretrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Currency Configuration</h4>
<p>Returns the list of currencies permitted for use AND the
list of currencies not selected (but available for selection).</p>
<p>Example Requests:</p>
<div class=apiClick>currencies</div>
<br>
<br>
<div class=apiClick>currencies?fields=selectedCurrencyOptions</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/currencies
</code>
<code class="method-response">
{
"selectedCurrencyOptions": [
{
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
],
"currencyOptions": [
{
"code": "AFN",
"name": "Afghanistan Afghani",
"decimalPlaces": 2,
"nameCode": "currency.AFN",
"displayLabel": "Afghanistan Afghani [AFN]"
},
{
"code": "ALL",
"name": "Albanian Lek",
"decimalPlaces": 2,
"nameCode": "currency.ALL",
"displayLabel": "Albanian Lek [ALL]"
},
{
"code": "ZWD",
"name": "Zimbabwe Dollar",
"decimalPlaces": 2,
"nameCode": "currency.ZWD",
"displayLabel": "Zimbabwe Dollar [ZWD]"
}
]
}
</code>
</div>
</div>
<a id="configs_currencyupdate" name="configs_currencyupdate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Currency Configuration</h4>
<p>Updates the list of currencies permitted for use.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/currencies
</code>
<code class="method-request">
PUT currencies
Content-Type: application/json
Request Body:
{
"currencies": [
"KES",
"BND",
"LBP",
"GHC",
"USD",
"XOF",
"AED",
"AMD"
]
}
</code>
<code class="method-response">
{
"currencies": [
"KES",
"BND",
"LBP",
"GHC",
"USD",
"XOF",
"AED",
"AMD"
]
}
</code>
</div>
</div>
<a id="configs_global" name="configs_global" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Global Configuration</h3>
<p>Global configuration related to set of supported enable/disable configurations:</p>
<ol>
<li><b>maker-checker</b> - defaults to false - if true turns on maker-checker functionality</li>
<li><b>reschedule-future-repayments</b> - defaults to false - if true reschedules repayemnts which falls on a non-working day to configured repayment <a href="#nw_repayment_schedule_rule">rescheduling rule</a></li>
<li><b>allow-transactions-on-non_workingday</b> - defaults to false - if true allows transactions on non-working days</li>
<li><b>reschedule-repayments-on-holidays</b> - defaults to false - if true reschedules repayemnts which falls on a non-working day to defined <a href="#holidays">reschedule date</a></li>
<li><b>allow-transactions-on-holiday</b> - defaults to false - if true allows transactions on <a href="#holidays">holidays</a></li>
<li><b>savings-interest-posting-current-period-end</b> - Set it at the database level before any savings interest is posted. When set as false(default), interest will be posted on the first date of next period. If set as true, interest will be posted on last date of current period. There is no difference in the interest amount posted.</li>
<li><b>financial-year-beginning-month</b> - Set it at the database level before any savings interest is posted. Allowed values 1 - 12 (January - December). Interest posting periods are evaluated based on this configuration.</li>
<li><b>meetings-mandatory-for-jlg-loans</b> - if set to true, enforces all JLG loans to follow a meeting schedule belonging to either the parent group or Center.</li>
</ol>
</div>
</div>
<a id="configs_globalconfig_retrieve" name="configs_globalconfig_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Global Configuration</h4>
<p>Returns the list global enable/disable configurations.</p>
<p>Example Requests:</p>
<div class=apiClick>configurations</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/configurations
</code>
<code class="method-response">
{
"globalConfiguration": [
{
"name": "maker-checker",
"enabled": true,
"value": 0,
"id": 1
},
{
"name": "amazon-S3",
"enabled": false,
"value": 0,
"id": 2
},
]
}
</code>
</div>
</div>
<a id="configs_globalconfig_retrieve_one" name="configs_globalconfig_retrieve_one" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Global Configuration</h4>
<p>Returns a global enable/disable configurations.</p>
<p>Example Requests:</p>
<div class=apiClick>configurations/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/configurations/1
</code>
<code class="method-response">
{
"name": "maker-checker",
"enabled": true,
"value": 0,
"id": 1
}
</code>
</div>
</div>
<a id="configs_globalconfig_retrieve_survey" name="configs_globalconfig_retrieve_survey" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Global Configuration for surveys</h4>
<p>Returns the list global enable/disable survey configurations.</p>
<p>Example Requests:</p>
<div class=apiClick>configurations/survey</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/configurations/survey
</code>
<code class="method-response">
{
"ppi_kenya_2005": [
{
"name": "maker-checker",
"enabled": true,
"value": 0,
"id": 1
},
{
"name": "ppi_tanzania_20012",
"enabled": false,
"value": 0,
"id": 2
},
]
}
</code>
</div>
</div>
<a id="configs_globalconfig_update" name="configs_globalconfig_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Global Configuration</h4>
<p>Updates an enable/disable global configuration item.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/configurations/9
</code>
<code class="method-request">
PUT configurations
Content-Type: application/json
Request Body: {
"enabled":"true",
"value":2
}
</code>
<code class="method-response">
{
"resourceId": 9,
"changes": {
"enabled": true
}
} </code>
</div>
</div>
<a id="cache" name="cache" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Cache</h3>
<p>The following settings are possible for cache:
<ul>
<li><b>No Caching</b>: caching turned off</li>
<li><b>Single node</b>: caching on for single instance deployments of platorm (works for multiple tenants but only one tomcat)</li>
</ul>
</p>
<p>By default caching is set to <i>No Caching</i>. Switching between caches results in the cache been clear e.g. from <i>Single node</i> to <i>No cache</i> and back again would clear down the single node cache.</p>
</div>
</div>
<a id="caches_list" name="caches_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Cache Types</h4>
<p>Returns the list of caches.</p>
<p>Example Requests:</p>
<div class=apiClick>caches</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/caches
</code>
<code class="method-response">
[
{
"cacheType": {
"id": 1,
"code": "cacheType.noCache",
"value": "No cache"
},
"enabled": true
},
{
"cacheType": {
"id": 2,
"code": "cacheType.singleNode",
"value": "Single node"
},
"enabled": false
},
{
"cacheType": {
"id": 3,
"code": "cacheType.multiNode",
"value": "Multi node"
},
"enabled": false
}
]
</code>
</div>
</div>
<a id="caches_switch" name="caches_switch"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Switch Cache</h4>
<p>Switches the cache to chosen one.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/caches
</code>
<code class="method-request">
PUT caches
Content-Type: application/json
Request Body:
{
"cacheType": 2
}
</code>
<code class="method-response">
{
"changes": {
"cacheType": 2
}
}
</code>
</div>
</div>
<a id="configs_hooks" name="configs_hooks" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Hooks</h3>
<p>Hooks are a mechanism to trigger custom code on the occurence of events.</p>
<p>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.
<p />
<p>In order for MifosX to send webhook payloads, your server needs to be accessible from the Internet. MifosX will send along a few HTTP headers to differentiate between event types.</p>
<p>X-Mifos-Entity - The entity type that was triggered. <br/>
X-Mifos-Action - The action triggered on the entity type. <br/>
X-Mifos-Platform-TenantId - The tenant which experienced the event.</p>
</div>
</div>
<a id="configs_hooks_create" name="configs_hooks_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Hook</h4>
<p>The following parameters can be passed for the creation of a hook :-
<ul>
<li> name - string - Required. The name of the template that is being called. (See /hooks/template for the list of valid hook names.)</li>
<li> isActive - boolean - Determines whether the hook is actually triggered.</li>
<li> events - array - Determines what events the hook is triggered for.
</li>
<li> config - hash - Required. Key/value pairs to provide settings for this hook. These settings vary between the templates.</li>
<li> templateId - Optional. The UGD template ID associated with the same entity (client or loan).</li>
<ul></p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/hooks
</code>
<code class="method-request">
POST hooks
Content-Type: application/json
Request Body:
{
"name": "Web",
"isActive": true,
"displayName": "Kremlin",
"templateId": 1,
"events": [
{
"actionName": "DISBURSE",
"entityName": "LOAN"
},
{
"actionName": "REPAYMENT",
"entityName": "LOAN"
}
],
"config": {
"Payload URL": "http://example.com/webhook",
"Content Type": "json"
}
}
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
</div>
</div>
<a id="configs_hooks_retrieve" name="configs_hooks_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Hooks</h4>
<p>Returns the list of hooks.</p>
<p>Example Requests:</p>
<div class=apiClick>hooks</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/hooks
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Web",
"displayName": "Kremlin",
"isActive": true,
"createdAt": [2014, 9, 16],
"updatedAt": [2014, 9, 16],
"templateId": 1,
"templateName": "My UGD",
"events": [
{
"actionName": "DISBURSE",
"entityName": "LOAN"
},
{
"actionName": "REPAYMENT",
"entityName": "LOAN"
}
],
"config": [
{
"fieldName": "Content Type",
"fieldValue": "json"
},
{
"fieldName": "Payload URL",
"fieldValue": "https://abc.com/api"
}
]
}
]
</code>
</div>
</div>
<a id="configs_hook_retrieve" name="configs_hook_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Hook</h4>
<p>Returns the details of a Hook.</p>
<p>Example Requests:</p>
<div class=apiClick>hooks/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/hooks/{hookId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Web",
"displayName": "Kremlin",
"isActive": true,
"createdAt": [2014, 9, 16],
"updatedAt": [2014, 9, 16],
"templateId": 1,
"templateName": "My UGD",
"events": [
{
"actionName": "DISBURSE",
"entityName": "LOAN"
},
{
"actionName": "REPAYMENT",
"entityName": "LOAN"
}
],
"config": [
{
"fieldName": "Content Type",
"fieldValue": "json"
},
{
"fieldName": "Payload URL",
"fieldValue": "https://abc.com/api"
}
]
}
</code>
</div>
</div>
<a id="configs_hook_update" name="configs_hook_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Hook</h4>
<p>Updates the details of a hook.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/hooks/{hookId}
</code>
<code class="method-request">
PUT hooks/4
Content-Type: application/json
Request Body:
{
"name": "Web",
"isActive": true,
"displayName": "Local SMS Provider",
"events": [
{
"actionName": "DISBURSE",
"entityName": "LOAN"
}
],
"config": {
"Payload URL": "http://changed.com/sms",
"Content Type": "json"
}
}
</code>
<code class="method-response">
{
"resourceId": 4,
"changes": {
"displayName": "Local SMS Provider",
"events": [
{
"actionName": "DISBURSE",
"entityName": "LOAN"
}
],
"config": {
"Payload URL": "http://changed.com/sms",
"Content Type": "json"
}
}
}
</code>
</div>
</div>
<a id="configs_hook_delete" name="configs_hook_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Hook</h4>
<p>Deletes a hook.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/hooks/{hookId}
</code>
<code class="method-request">
DELETE hooks/4
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
</div>
</div>
<a id="hooks_template" name="hooks_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Hooks Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>hooks/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/hooks/template
</code>
<code class="method-response">
{
"templates": [
{
"name": "Web",
"schema": [
{
"fieldName": "Content Type",
"fieldType": "string",
"optional": true,
"placeholder": "json / form"
},
{
"fieldName": "Payload URL",
"fieldType": "string",
"optional": false
}
]
},
{
},...
],
"groupings": [
{
"name": "jobs",
"entities": [
{
"name": "SCHEDULER",
"actions": ["EXECUTEJOB", "UPDATE"]
},
{
},...
]
},
{
},...
]
}
</code>
</div>
</div>
<a id="configs_codes" name="configs_codes" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Codes</h3>
<p>Code and code values: Codes represent a specific category of
data, their code values are a specific instance of that category.</p>
<p>
Codes are mostly <b>system defined</b> 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
<p />
</div>
</div>
<a id="configs_codes_create" name="configs_codes_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Code</h4>
<p>Creates a code. Codes created through api are always 'user
defined' and so system defined is marked as false.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/codes
</code>
<code class="method-request">
POST codes
Content-Type: application/json
Request Body:
{
"name": "MyNewCode"
}
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
</div>
</div>
<a id="configs_codes_retrieve" name="configs_codes_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Codes</h4>
<p>Returns the list of codes.</p>
<p>Example Requests:</p>
<div class=apiClick>codes</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/codes
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Customer Identifier",
"systemDefined": true
},
{
"id": 2,
"name": "Gender",
"systemDefined": true
},
{
"id": 3,
"name": "Education",
"systemDefined": true
}
]
</code>
</div>
</div>
<a id="configs_code_retrieve" name="configs_code_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Code</h4>
<p>Returns the details of a Code.</p>
<p>Example Requests:</p>
<div class=apiClick>codes/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/codes/{codeId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Customer Identifier",
"systemDefined": true
}
</code>
</div>
</div>
<a id="configs_code_update" name="configs_codes_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Code</h4>
<p>Updates the details of a code if it is not system defined.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/codes/{codeId}
</code>
<code class="method-request">
PUT codes/4
Content-Type: application/json
Request Body:
{
"name": "MyNewCode(changed)"
}
</code>
<code class="method-response">
{
"resourceId": 4,
"changes": {
"name": "MyNewCode(changed)"
}
}
</code>
</div>
</div>
<a id="configs_code_delete" name="configs_code_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Code</h4>
<p>Deletes a code if it is not system defined.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/codes/{codeId}
</code>
<code class="method-request">
DELETE codes/4
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
</div>
</div>
<!-- Code Value starts here -->
<a id="configs_codes_codevalues" name="configs_codes_codevalues" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Code Values</h3>
<p>Code and code values: Codes represent a specific category of
data, their code values are a specific instance of that category.</p>
<p>
Codes are mostly <b>system defined</b> 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
<p />
</div>
</div>
<a id="configs_codes_codevalues_create" name="configs_codes_codevalues_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Code Value</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/codes/1/codevalues
</code>
<code class="method-request">
POST codes/1/codevalues
Content-Type: application/json
Request Body:
{
"name":"Ration Card",
"description: "Ration card information",
"position":"1"
}
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
</div>
</div>
<a id="configs_codes_codevalues_list" name="configs_codes_codevalues_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Code Values</h4>
<p>Returns the list of Code Values for a given Code</p>
<p>Example Requests:</p>
<div class=apiClick>codes/1/codevalues</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/codes/{codeId}/codevalues
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Passport",
"description: "Passport information",
"position": 0
},
{
"id": 2,
"name": "Id",
"description: "ID information",
"position": 0
},
{
"id": 3,
"name": "Drivers License",
"description: "Drivers License information",
"position": 0
},
{
"id": 4,
"name": "Any Other Id Type",
"description: "Any Other Id Type information",
"position": 0
},
{
"id": 5,
"name": "Ration Card",
"description: "Ration Card information",
"position": 1
}
]
</code>
</div>
</div>
<a id="configs_codes_codevalues_retrieve" name="configs_codes_codevalues_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Code Value</h4>
<p>Returns the details of a Code Value</p>
<p>Example Requests:</p>
<div class=apiClick>codes/1/codevalues/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/codes/{codeId}/codevalues/{codevalueId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Passport",
"description: "Passport information",
"position": 0
}
</code>
</div>
</div>
<a id="configs_codes_codevalues_update" name="configs_codes_codevalues_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Code Value</h4>
<p>Updates the details of a code value.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/codes/{codeId}/codevalues/{codevalueId}
</code>
<code class="method-request">
PUT codes/1/codevalues/1
Content-Type: application/json
Request Body:
{
"name": "Indian Passport",
"description": "Indian Passport information",
"position":2
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes":
{
"name": "Indian Passport",
"description": "Indian Passport information",
"position": 2
}
}
</code>
</div>
</div>
<a id="configs_codes_codevalues_delete" name="configs_codes_codevalues_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Code Value</h4>
<p>Deletes a code value</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/codes/{codeId}/codevalues/{codevalueId}
</code>
<code class="method-request">
DELETE codes/1/codevalues/5
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 5
}
</code>
</div>
</div>
<!-- Audit starts here -->
<a id="audits" name="audits" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Audits</h3>
<p>Every non-read Mifos 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.<br><br>
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.<br><br>
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.
<p/>
</div>
</div>
<a id="audits_list" name="audits_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Audits</h4>
<p>Get a 200 list of audits that match the criteria supplied and sorted by audit id in descending order,
and are within the requestors' data scope. Also it supports pagination and sorting</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>actionName</dt>
<dd>optional</dd>
<dd>Examples: CREATE, UPDATE, DISBURSE</dd>
<dt>entityName</dt>
<dd>optional</dd>
<dd>Examples: CLIENT, LOAN, FUND</dd>
<dt>resourceId</dt>
<dd>optional, <span>
The id value of the entityName</span>
</dd>
<dt>makerId</dt>
<dd>optional, <span>
The id value of the application user creating the entry</span>
</dd>
<dt>makerDateTimeFrom</dt>
<dd>optional, <span>
Get entries created on or after this</span>
</dd>
<dd>Example: 2013-04-10 08:00:00</dd>
<dt>makerDateTimeTo</dt>
<dd>optional, <span>
Get entries created on or before this</span>
</dd>
<dd>Example: 2013-05-10 08:00:00</dd>
<dt>checkerId</dt>
<dd>optional, <span>
The id value of the application user that checked (approved) the entry</span>
</dd>
<dt>checkerDateTimeFrom</dt>
<dd>optional, <span>
Get entries checked on or after this</span>
</dd>
<dd>Example: 2013-04-10 08:00:00</dd>
<dt>checkerDateTimeTo</dt>
<dd>optional, <span>
Get entries checked on or before this</span>
</dd>
<dd>Example: 2013-05-10 18:00:00</dd>
<dt>processingResult</dt>
<dd>optional, <span>
The enum value of the processing status</span>
</dd>
<dd>values:<br>
0: Invalid<br>
1: processed<br>
2: awaiting.approval<br>
3: rejected
</dd>
<dt>officeId</dt>
<dd>optional, <span>
The id value of the office/branch associated with the entry (if there is one)</span>
</dd>
<dt>groupId</dt>
<dd>optional, <span>
The id value of the group associated with the entry (if there is one).
A group is a general idea and may be a Center, a Group, a Communal Bank or other.</span>
</dd>
<dt>clientId</dt>
<dd>optional, <span>
The id value of the client associated with the entry (if there is one)</span>
</dd>
<dt>loanId</dt>
<dd>optional, <span>
The id value of the loan associated with the entry (if there is one)</span>
</dd>
<dt>savingsAccountId</dt>
<dd>optional, <span>
The id value of the savings account associated with the entry (if there is one)</span>
</dd>
<dt>includeJson</dt>
<dd>optional, <span>
Values are true, false. Default is false.</span>
</dd>
<dt>paged</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>If paged is true then results will be paginated.</dd>
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates from what result to start from.</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>id, actionName, entityName, resourceId, subresourceId, madeOnDate, checkedOnDate, officeName, groupName, clientName, loanAccountNo, savingsAccountNo</span>
</dd>
<dd>Orders the results by the field indicated.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>audits</div><br>
<div class=apiClick>audits?fields=madeOnDate,maker,processingResult</div><br>
<div class=apiClick>audits?makerDateTimeFrom=2013-03-25 08:00:00&makerDateTimeTo=2013-04-04 18:00:00</div><br>
<div class=apiClick>audits?officeId=1</div><br>
<div class=apiClick>audits?officeId=1&includeJson=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/audits
</code>
<code class="method-response">
[
{
"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"
},...
]
</code>
<code class="method-declaration">
GET https://DomainName/api/v1/audits?paged=true&limit=5
</code>
<code class="method-response">
{
"totalFilteredRecords": 30,
"pageItems": [
{
"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"
}
]
}
</code>
</div>
</div>
<a id="audits_searchtemplate" name="audits_searchtemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Audit Search Template</h4>
<p>This is a convenience resource. It can be useful when
building an Audit Search UI. "appUsers" are data scoped to
the office/branch the requestor is associated with.
</p>
<p>Example Requests:</p>
<div class=apiClick>audits/searchtemplate</div>
<div class=apiClick>audits/searchtemplate?fields=actionNames</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/audits/searchtemplate
</code>
<code class="method-response">
{
"appUsers": [
{
"id": 30,
"username": "user 1"
},
{
"id": 28,
"username": "user 2"
},
{
"id": 35,
"username": "user 3"
},...
],
"actionNames": [
"CREATE",
"DELETE",
"UPDATE",
"ACTIVATE",
"ADJUST",
"APPROVALUNDO",
"APPROVE",
"APPROVEINPAST",
"BULKREASSIGN",
"CALCULATEINTEREST",
"CLOSE",
"CLOSEASRESCHEDULED",
"CREATEHISTORIC",
"DEPOSIT",
"DEREGISTER",
"DISBURSALUNDO",
"DISBURSE",
"DISBURSEINPAST",
"INTEREST",
"PERMISSIONS",
"REGISTER",
"REJECT",...
],
"entityNames": [
"CALENDAR",
"CENTER",
"CHARGE",
"CLIENT",
"CLIENTIDENTIFIER",
"CLIENTIMAGE",
"CLIENTNOTE",
"CODE",
"CODEVALUE",
"COLLATERAL",
"CONFIGURATION",
"CURRENCY",
"DATATABLE",
"DEPOSITACCOUNT",
"DEPOSITNOTE",
"DEPOSITPRODUCT",
"DOCUMENT",
"FUND",
"GLACCOUNT",
"GLCLOSURE",
"GROUP",
"GROUPNOTE",...
],
"processingResults": [
{
"id": 0,
"processingResult": "invalid"
},
{
"id": 1,
"processingResult": "processed"
},
{
"id": 2,
"processingResult": "awaiting.approval"
},
{
"id": 3,
"processingResult": "rejected"
}
]
}
</code>
</div>
</div>
<a id="audits_retrieve" name="audits_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve an Audit Entry</h4>
<p></p>
<p>Example Requests:</p>
<div class=apiClick>audits/20</div>
<div class=apiClick>audits/20?fields=madeOnDate,maker,processingResult</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/audits
</code>
<code class="method-response">
{
"id": 20,
"actionName": "REPAYMENT",
"entityName": "LOAN",
"resourceId": 868,
"maker": "dataentry1",
"madeOnDate": 1358449025000,
"processingResult": "processed",
"commandAsJson": "{\"transactionDate\":\"28 September 2012\",\"transactionAmount\":\"1,967.00\",\"locale\":\"en\",\"dateFormat\":\"dd MMMM yyyy\"}",
"officeName": "another office",
"clientName": "another client",
"loanAccountNo": "23"
}
</code>
</div>
</div>
<!--Start of Account Number Format functionality-->
<a id="accountnumberformats" name="accountnumberformats" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Account number format</h3>
<p>Account number preferences are used to describe custom formats for account numbers associated with Customer, Loan and Savings accounts.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>accountType</td>
</tr>
<tr>
<td class=fielddesc>Identifies the type of the Account for which the Account number format applies <br/>
Refer <a href="#accountnumberformats_template">Retrieve
Account number formats Template</a> for complete
details
</td>
</tr>
<tr class=alt>
<td>prefixType</td>
</tr>
<tr>
<td class=fielddesc>Identifies a custom prefix for the account number
<br/>
Refer <a href="#accountnumberformats_template">Retrieve
Account number formats Template</a> for complete
details
</td>
</tr>
</table>
</div>
</div>
<a id="accountnumberformats_list" name="accountnumberformats_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Account number formats</h4>
<p>Example Requests:</p>
<div class=apiClick>accountnumberformats</div>
<br>
<br>
<div class=apiClick>accountnumberformats?fields=accountType,prefixType</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/accountnumberformats
</code>
<code class="method-response">
[
{
"id": 2,
"accountType":
{
"id": 1,
"code": "accountType.client",
"value": "CLIENT"
},
"prefixType":
{
"id": 101,
"code": "accountNumberPrefixType.clientType",
"value": "CLIENT_TYPE"
}
},
{
"id": 3,
"accountType":
{
"id": 2,
"code": "accountType.loan",
"value": "LOAN"
},
"prefixType":
{
"id": 201,
"code": "accountNumberPrefixType.loanProductShortName",
"value": "LOAN_PRODUCT_SHORT_NAME"
}
}
]
</code>
</div>
</div>
<a id="accountnumberformats_template" name="accountnumberformats_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Account number format Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>accountnumberformats/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/accountnumberformats/template
</code>
<code class="method-response">
{
"accountTypeOptions":
[
{
"id": 1,
"code": "accountType.client",
"value": "CLIENT"
},
{
"id": 2,
"code": "accountType.loan",
"value": "LOAN"
},
{
"id": 3,
"code": "accountType.savings",
"value": "SAVINGS"
},
{
"id": 4,
"code": "accountType.center",
"value": "CENTER"
},
{
"id": 5,
"code": "accountType.group",
"value": "GROUP"
}
],
"prefixTypeOptions":
{
"accountType.loan":
[
{
"id": 201,
"code": "accountNumberPrefixType.loanProductShortName",
"value": "LOAN_PRODUCT_SHORT_NAME"
},
{
"id": 1,
"code": "accountNumberPrefixType.officeName",
"value": "OFFICE_NAME"
}
],
"accountType.client":
[
{
"id": 1,
"code": "accountNumberPrefixType.officeName",
"value": "OFFICE_NAME"
},
{
"id": 101,
"code": "accountNumberPrefixType.clientType",
"value": "CLIENT_TYPE"
}
],
"accountType.savings":
[
{
"id": 301,
"code": "accountNumberPrefixType.savingsProductShortName",
"value": "SAVINGS_PRODUCT_SHORT_NAME"
},
{
"id": 1,
"code": "accountNumberPrefixType.officeName",
"value": "OFFICE_NAME"
}
],
"accountType.center":
[
{
"id": 1,
"code": "accountNumberPrefixType.officeName",
"value": "OFFICE_NAME"
}
],
"accountType.group":
[
{
"id": 1,
"code": "accountNumberPrefixType.officeName",
"value": "OFFICE_NAME"
},
]
}
}
</code>
</div>
</div>
<a id="accountnumberformats_retrieve" name="accountnumberformats_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve an Account number format</h4>
<p>Example Requests:</p>
<div class=apiClick>accountnumberformats/1</div>
<br>
<br>
<div class=apiClick>accountnumberformats/1?template=true</div>
<br>
<br>
<div class=apiClick>accountnumberformats/1?fields=accountType,prefixType</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/accountnumberformats/{accountnumberformatId}
</code>
<code class="method-response">
{
"id": 2,
"accountType":
{
"id": 1,
"code": "accountType.client",
"value": "CLIENT"
},
"prefixType":
{
"id": 101,
"code": "accountNumberPrefixType.clientType",
"value": "CLIENT_TYPE"
}
}
</code>
</div>
</div>
<a id="accountnumberformats_create" name="accountnumberformats_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create an Account number format</h4>
<p>
<b>Note:</b> You may associate a single Account number format for a given account type<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for Account number formats</div></td>
</tr>
<tr class=alt>
<td>accountType</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/accountnumberformats
</code>
<code class="method-request">
POST /accountnumberformats
Content-Type: application/json
Request Body:
{
accountType :1,
prefixType: 101
}
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
<code class="method-request">
POST /accountnumberformats
Content-Type: application/json
Request Body:
{
accountType :2,
prefixType: 201
}
</code>
<code class="method-response">
{
"resourceId": 5
}
</code>
</div>
</div>
<a id="accountnumberformats_update" name="accountnumberformats_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update an Account number format</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/accountnumberformats/{accountnumberformatId}
</code>
<code class="method-request">
PUT accountnumberformats/2
Content-Type: application/json
Request Body:
{
prefixType:1
}
</code>
<code class="method-response">
{
"resourceId": 2,
"changes":
{
"prefixType": "OFFICE_NAME"
}
}
</code>
</div>
</div>
<a id="accountnumberformats_delete" name="accountnumberformats_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete an Account number format</h4>
<p>
<b>Note:</b> Account numbers created while this format was active would remain unchanged.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/accountnumberformats/{accountnumberformatId}
</code>
<code class="method-request">
DELETE accountnumberformats/2
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 2
}
</code>
</div>
</div>
<!-- Maker Checker starts here -->
<a id="makercheckers" name="makercheckers" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Maker Checker (or 4-eye) functionality</h3>
<p>Apache Fineract Maker Checker functionality allows an MFI to define transactions
as having a maker and a checker phase. One user enters, deletes or changes data.
Then, another user that has "Checker" rights for that transaction, can inspect
and approve the data.
</p>
<p>By default, Maker Checker functionality is disabled.
See <a href="#configs_globalconfig_update">Update Global Configuration</a> to enable/disable
Maker Checker functionality at a global level.
</p>
<p>
Additionally, Maker Checker functionality for each transaction (permission) is disabled by default.
see <a href="#permissions_update">Enable/Disable Permissions for Maker Checker</a> to enable/disable
Maker Checker functionality at a transaction (permission) level.
</p>
<p>
Finally, to give checking rights to a user (via a role associated with the user) see
<a href="#rolespermissions_update">Update a Role's Permissions</a>
</p>
<p>For example, <br>
<code>
{
"permissions":{
"CREATE_GUARANTOR_CHECKER":true,
"CREATE_CLIENT_CHECKER":true
}
}
</code>
<br>
will give checking rights for CREATE_GUARANTOR and CREATE_CLIENT</p>
<p>Alternatively, the special permissions ALL_FUNCTIONS or CHECKER_SUPER_USER will give blanket
checking rights.
</p>
<p>
When a user "makes" an entry that is enabled for Maker Checker, it is audited and the audit status
is set to a value of 2 (awaiting.approval).
</p>
Checkers can only Check and approve entries that they have been permitted to check.<br><br>
Checkers can only Check and approve entries that are within their data scope. However,
'head office' Checkers can Check and approve all entries
including those that aren't office/branch related (as long as they have the Checker permissions)
e.g. Loan Product changes.
<p/>
</div>
</div>
<a id="makercheckers_list" name="makercheckers_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Maker Checker Entries</h4>
<p>Get a list of entries that can be checked by the requestor that match the criteria supplied.</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>actionName</dt>
<dd>optional</dd>
<dd>Examples: CREATE, UPDATE, DISBURSE</dd>
<dt>entityName</dt>
<dd>optional</dd>
<dd>Examples: CLIENT, LOAN, FUND</dd>
<dt>resourceId</dt>
<dd>optional, <span>
The id value of the entityName</span>
</dd>
<dt>makerId</dt>
<dd>optional, <span>
The id value of the application user creating the entry</span>
</dd>
<dt>makerDateTimeFrom</dt>
<dd>optional, <span>
Get entries created on or after this</span>
</dd>
<dd>Example: 2013-04-10 08:00:00</dd>
<dt>makerDateTimeTo</dt>
<dd>optional, <span>
Get entries created on or before this</span>
</dd>
<dd>Example: 2013-05-10 08:00:00</dd>
<dt>officeId</dt>
<dd>optional, <span>
The id value of the office/branch associated with the entry (if there is one)</span>
</dd>
<dt>groupId</dt>
<dd>optional, <span>
The id value of the group associated with the entry (if there is one).
A group is a general idea and may be a Center, a Group, a Communal Bank or other.</span>
</dd>
<dt>clientId</dt>
<dd>optional, <span>
The id value of the client associated with the entry (if there is one)</span>
</dd>
<dt>loanId</dt>
<dd>optional, <span>
The id value of the loan associated with the entry (if there is one)</span>
</dd>
<dt>savingsAccountId</dt>
<dd>optional, <span>
The id value of the savings account associated with the entry (if there is one)</span>
</dd>
<dt>includeJson</dt>
<dd>optional, <span>
Values are true, false. Default is false.</span>
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>makercheckers</div><br>
<div class=apiClick>makercheckers?fields=madeOnDate,maker,processingResult</div><br>
<div class=apiClick>makercheckers?makerDateTimeFrom=2013-03-25 08:00:00&makerDateTimeTo=2013-04-04 18:00:00</div><br>
<div class=apiClick>makercheckers?officeId=1</div><br>
<div class=apiClick>makercheckers?officeId=1&includeJson=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/makercheckers
</code>
<code class="method-response">
[
{
"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"
}
]
</code>
</div>
</div>
<a id="makercheckers_searchtemplate" name="makercheckers_searchtemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Maker Checker Search Template</h4>
<p>This is a convenience resource. It can be useful when
building a Checker Inbox UI. "appUsers" are data scoped to
the office/branch the requestor is associated with.
"actionNames" and "entityNames" returned are those that the
requestor has Checker approval permissions for.
</p>
<p>Example Requests:</p>
<div class=apiClick>makercheckers/searchtemplate</div>
<div class=apiClick>makercheckers/searchtemplate?fields=entityNames</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/audits/searchtemplate
</code>
<code class="method-response">
{
"appUsers": [
{
"id": 30,
"username": "user 1"
},
{
"id": 28,
"username": "user 2"
},
{
"id": 35,
"username": "user 3"
},...
],
"actionNames": [
"CREATE",
"DELETE",
"UPDATE",
"ACTIVATE",
"ADJUST",
"APPROVALUNDO",
"APPROVE",...
],
"entityNames": [
"CALENDAR",
"CENTER",
"CHARGE",
"CLIENT",
"CLIENTIDENTIFIER",...
]
}
</code>
</div>
</div>
<a id="makercheckers_approve" name="makercheckers_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Approve Maker Checker Entry</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/makercheckers/{auditId}?command=approve
</code>
<code class="method-request">
POST makercheckers/1?command=approve
Content-Type: application/json
</code>
<code class="method-response">{ "auditId": 1 } </code>
</div>
</div>
<a id="makercheckers_reject" name="makercheckers_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reject Maker Checker Entry</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/makercheckers/{auditId}?command=reject
</code>
<code class="method-request">
POST makercheckers/1?command=reject
Content-Type: application/json
</code>
<code class="method-response">{ "auditId": 1 } </code>
</div>
</div>
<a id="makercheckers_delete" name="makercheckers_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Maker Checker Entry</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/makercheckers/{auditId}
</code>
<code class="method-request">
DELETE makercheckers/1
Content-Type: application/json
</code>
<code class="method-response">{ "auditId": 1 } </code>
</div>
</div>
<!-- Maker Checker starts here -->
<a id="scheduler_jobs" name="scheduler_jobs" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>MIFOSX-BATCH JOBS</h3>
<p>Batch jobs (also known as cron jobs on Unix-based systems) are a series of back-end jobs executed on a computer at a particular time defined in job's cron expression.
</p>
<p>At any point, you can view the list of batch jobs scheduled to run along with other details specific to each job. Manually you can execute the jobs at any point of time.
</p>
<p>The scheduler status can be either "Active" or "Standby". If the scheduler status is Active, it indicates that all batch jobs are running/ will run as per the specified schedule.If the scheduler status is Standby, it will ensure all scheduled batch runs are suspended.
</p>
</div>
</div>
<a id="scheduler_jobs_list" name="scheduler_jobs_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Scheduler Jobs</h4>
<p>Returns the list of jobs.</p>
<p>Example Requests:</p>
<div class=apiClick>jobs</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/jobs
</code>
<code class="method-response">
[
{
"jobId": 1,
"displayName": "Update loan Summary",
"cronExpression": "0 0 22 1/1 * ? *",
"active": false,
"currentlyRunning": false,
"lastRunHistory": {
"version": 17,
"jobRunStartTime": "Jul 26, 2013 1:38:26 PM",
"jobRunEndTime": "Jul 26, 2013 1:38:26 PM",
"status": "success",
"triggerType": "application"
}
},
{
"jobId": 2,
"displayName": "Update Loan Arrears Ageing",
"nextRunTime": "Jul 27, 2013 12:01:00 AM",
"cronExpression": "0 1 0 1/1 * ? *",
"active": true,
"currentlyRunning": false,
"lastRunHistory": {
"version": 18,
"jobRunStartTime": "Jul 26, 2013 4:05:32 PM",
"jobRunEndTime": "Jul 26, 2013 4:05:32 PM",
"status": "success",
"triggerType": "application"
}
},
{
"jobId": 3,
"displayName": "Update Loan Paid In Advance",
"nextRunTime": "Jul 27, 2013 12:05:00 AM",
"cronExpression": "0 5 0 1/1 * ? *",
"active": true,
"currentlyRunning": false,
"lastRunHistory": {
"version": 16,
"jobRunStartTime": "Jul 26, 2013 4:15:47 PM",
"jobRunEndTime": "Jul 26, 2013 4:15:47 PM",
"status": "success",
"triggerType": "application"
}
},
{
"jobId": 4,
"displayName": "Apply Annual Fee For Savings",
"nextRunTime": "Jul 26, 2013 10:20:00 PM",
"cronExpression": "0 20 22 1/1 * ? *",
"active": true,
"currentlyRunning": false,
"lastRunHistory": {
"version": 11,
"jobRunStartTime": "Jul 26, 2013 12:00:37 PM",
"jobRunEndTime": "Jul 26, 2013 12:00:38 PM",
"status": "success
"triggerType": "application"
}
},
{
"jobId": 5,
"displayName": "Apply Holidays To Loans",
"nextRunTime": "Jul 27, 2013 12:00:00 PM",
"cronExpression": "0 0 12 * * ?",
"active": true,
"currentlyRunning": false,
"lastRunHistory": {
"version": 16,
"jobRunStartTime": "Jul 26, 2013 4:31:54 PM",
"jobRunEndTime": "Jul 26, 2013 4:31:55 PM",
"status": "success",
"triggerType": "application"
}
}
]
</code>
</div>
</div>
<a id="retrieve_scheduler_job" name="retrieve_scheduler_job"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Job</h4>
<p>Returns the details of a Job.</p>
<p>Example Requests:</p>
<div class=apiClick>jobs/5</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/jobs/{jobId}
</code>
<code class="method-response">
https://localhost:8443/fineract-provider/api/v1/jobs/5
{
"jobId": 5,
"displayName": "Apply Holidays To Loans",
"nextRunTime": "Jul 27, 2013 12:00:00 PM",
"cronExpression": "0 0 12 * * ?",
"active": true,
"currentlyRunning": false,
"lastRunHistory": {
"version": 16,
"jobRunStartTime": "Jul 26, 2013 4:31:54 PM",
"jobRunEndTime": "Jul 26, 2013 4:31:55 PM",
"status": "success",
"triggerType": "application"
}
}
</code>
</div>
</div>
<a id="update_scheduler_job" name="update_scheduler_job"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Job</h4>
<p>Updates the details of a job.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/jobs/{jobId}
</code>
<code class="method-request">
PUT jobs/1
Content-Type: application/json
{
"displayName":"Update loan Summary",
"cronExpression":"0 0 22 1/1 * ? *",
"active":"true"
} </code>
</div>
</div>
<a id="run_job" name="run_job"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Run a Job</h4>
<p>Manually Execute Specific Job.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/jobs/{jobId}?command=executeJob
</code>
<code class="method-request">
POST jobs/1?command=executeJob
</code>
</div>
</div>
<a id="retrieve_job_runhistory" name="retrieve_job_runhistory"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Job Run History</h4>
<p>Example Requests:</p>
<div class=apiClick>jobs/5/runhistory?offset=0&limit=200</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/jobs/{jobid}/runhistory?offset=0&limit=200
</code>
<code class="method-response">
{
"totalFilteredRecords": 8,
"pageItems": [
{
"version": 1,
"jobRunStartTime": "Jul 16, 2013 12:00:00 PM",
"jobRunEndTime": "Jul 16, 2013 12:00:00 PM",
"status": "success",
"triggerType": "cron"
},
{
"version": 2,
"jobRunStartTime": "Jul 17, 2013 12:00:00 PM",
"jobRunEndTime": "Jul 17, 2013 12:00:00 PM",
"status": "success",
"triggerType": "cron"
},
{
"version": 3,
"jobRunStartTime": "Jul 18, 2013 12:00:00 PM",
"jobRunEndTime": "Jul 18, 2013 12:00:01 PM",
"status": "success",
"triggerType": "cron"
},
{
"version": 4,
"jobRunStartTime": "Jul 19, 2013 12:00:00 PM",
"jobRunEndTime": "Jul 19, 2013 12:00:00 PM",
"status": "success",
"triggerType": "cron"
},
{
"version": 5,
"jobRunStartTime": "Jul 20, 2013 11:16:07 AM",
"jobRunEndTime": "Jul 20, 2013 11:16:07 AM",
"status": "success",
"triggerType": "application"
},
{
"version": 6,
"jobRunStartTime": "Jul 20, 2013 11:35:05 AM",
"jobRunEndTime": "Jul 20, 2013 11:35:05 AM",
"status": "success",
"triggerType": "application"
},
{
"version": 7,
"jobRunStartTime": "Jul 20, 2013 12:00:00 PM",
"jobRunEndTime": "Jul 20, 2013 12:00:00 PM",
"status": "success",
"triggerType": "cron"
},
{
"version": 8,
"jobRunStartTime": "Jul 22, 2013 12:00:00 PM",
"jobRunEndTime": "Jul 22, 2013 12:00:00 PM",
"status": "success",
"triggerType": "cron"
}
]
}
</code>
</div>
</div>
<a id="retrieve_scheduler_status" name="retrieve_scheduler_status"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Scheduler Status</h4>
<p>Returns the scheduler status.</p>
<p>Example Requests:</p>
<div class=apiClick>scheduler</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/scheduler
</code>
<code class="method-response">
https://localhost:8443/fineract-provider/api/v1/scheduler
{
"active": true
}
</code>
</div>
</div>
<a id="activate_scheduler" name="activate_scheduler"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Activate Scheduler Jobs</h4>
<p>Activates the scheduler job service.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/scheduler?command=start
</code>
<code class="method-request">
POST scheduler?command=start
</code>
</div>
</div>
<a id="suspend_scheduler" name="suspend_scheduler" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Suspend Scheduler Jobs</h4>
<p>Suspends the scheduler job service.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/scheduler?command=stop
</code>
<code class="method-request">
POST scheduler?command=stop
</code>
</div>
</div>
<a id="external_services" name="external_services" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>External Services</h3>
<p>External Services Configuration related to set of supported configurations for third party services like Amazon S3 and SMTP:</p>
<ol>
<li><b>S3 (Amazon S3):</b></li>
<li><b>s3_access_key</b> - </li>
<li><b>s3_bucket_name</b> - </li>
<li><b>s3_secret_key</b> - </li>
<br><br>
<li><b>SMTP (Email Service):</b></li>
<li><b>username</b> - </li>
<li><b>password</b> - </li>
<li><b>host</b> - </li>
<li><b>port</b> - </li>
<li><b>useTLS</b> - </li>
</ol>
</div>
</div>
<a id="configs_externalService_retrieve" name="configs_externalService_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve External Services Configuration</h4>
<p>Returns a external Service configurations based on the Service Name.</p>
<p>Service Names supported are S3 and SMTP.</p>
<p>Example Requests:</p>
<div class=apiClick>externalservice/SMTP</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/externalservice/{serviceName}
</code>
<code class="method-response">
[
{
"name": "username",
"value": "test@mifos.com"
},
{
"name": "password",
"value": "XXXX"
},
{
"name": "host",
"value": "smtp.gmail.com"
},
{
"name": "port",
"value": "25"
},
{
"name": "useTLS",
"value": "true"
}
]
</code>
</div>
</div>
<a id="config_externalService_update" name="config_externalService_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update External Service</h4>
<p>Updates the external Service Configuration for a Service Name.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/externalservice/{serviceName}
</code>
<code class="method-request">
PUT externalservice/S3
Content-Type: application/json
{
"username" : "test@mifos.org"
"password" : "XXXX"
}
</code>
</div>
</div>
<a id="twofactor_config" name="twofactor_config"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Two-Factor Configuration</h3>
<p>The following section describes the way to configure two-factor authentication</p>
<p>Two-Factor Authentication has to be enabled by either building with Gradle arguments
<i>-Ptwofactor=enabled</i> or enabling the <i>twofactor</i> profile via env. variable
</p>
<p>In order for SMS to be enabled an SMS bridge has to be setup with the message-gateway service.</p>
</div>
<div class="method-example">
</div>
</div>
<a id="twofactor_config_get" name="twofactor_config_get" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Two-Factor Configuration</h4>
<p>Returns available two-factor configuration.</p>
</div>
<div class="method-example">
<code class="method-declaration"> GET https://DomainName/api/v1/twofactor/configure
</code>
<code class="method-response">
{
"otp-delivery-email-body": "Hello {{username}}.\n\nYour OTP login token is {{token}}.",
"otp-delivery-sms-enable": true,
"otp-delivery-sms-provider": 6,
"otp-delivery-email-subject": "Fineract Two-Factor Authentication Token",
"otp-token-length": 5,
"access-token-live-time-extended": 604800,
"otp-delivery-email-enable": true,
"otp-token-live-time": 300,
"otp-delivery-sms-text": "Your authentication token for Fineract is {{token}}.",
"access-token-live-time": 86400
}
</code>
</div>
</div>
<a id="twofactor_config_update" name="twofactor_config_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Two-Factor Configuration</h4>
<p>Update two-factor configuration.</p>
</div>
<div class="method-example">
<code class="method-declaration"> PUT https://DomainName/api/v1/twofactor/configure
</code>
<code class="method-request">
{
"otp-delivery-sms-provider": 7
"otp-delivery-sms-enable": false
}
</code>
<code class="method-response">
{
"changes": {
"otp-delivery-sms-enable": false,
"otp-delivery-sms-provider": 7
}
}
</code>
</div>
</div>
<!-- Fund starts here -->
<a id="funds" name="funds" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Funds</h3>
</div>
</div>
<a id="funds_create" name="funds_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Fund</h4>
<p>Creates a fund.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/funds
</code>
<code class="method-request">
POST funds
Content-Type: application/json
Request Body:
{
"name": "EU Agri Fund"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="funds_retrieve" name="funds_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Funds</h4>
<p>Returns the list of funds.</p>
<p>Example Requests:</p>
<div class=apiClick>funds</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/funds
</code>
<code class="method-response">
[
{
"id": 1,
"name": "EU Agri Fund"
}
]
</code>
</div>
</div>
<a id="fund_retrieve" name="fund_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Fund</h4>
<p>Returns the details of a Fund.</p>
<p>Example Requests:</p>
<div class=apiClick>funds/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/funds/{fundId}
</code>
<code class="method-response">
{
"id": 1,
"name": "EU Agri Fund"
}
</code>
</div>
</div>
<a id="fund_update" name="fund_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Fund</h4>
<p>Updates the details of a fund.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/funds/{fundId}
</code>
<code class="method-request">
PUT funds/1
Content-Type: application/json
Request Body:
{
"name": "EU Agri Fund (2010-2020)"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"name": "EU Agri Fund (2010-2020)"
}
}
</code>
</div>
</div>
<a id="staff" name="staff" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Staff</h3>
<p>Allows you to model staff members. At present the key role
of significance is whether this staff member is a loan officer or
not.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>firstname</td>
</tr>
<tr>
<td class=fielddesc>First Name of the new Employee.</td>
</tr>
<tr class=alt>
<td>lastname</td>
</tr>
<tr>
<td class=fielddesc>Last Name of the new Employee.
</td>
</tr>
<tr class=alt>
<td>externalId</td>
</tr>
<tr>
<td class=fielddesc>ID to put an external reference for an Employee.</td>
</tr>
<tr class=alt>
<td>mobileNo</td>
</tr>
<tr>
<td class=fielddesc>Mobile number of an Employee.
</td>
</tr>
<tr class=alt>
<td>isLoanOfficer</td>
</tr>
<tr>
<td class=fielddesc>Indicates whether the employee account is to be created as <b>Loan Officer</b>. If isLoanOfficer=true, then the employee is <b>Loan Officer</b>. If isLoanOfficer=false, then the employee is
<b>not Loan Officer.</b>
</td>
</tr>
<tr class=alt>
<td>isActive</td>
</tr>
<tr>
<td class=fielddesc>Indicates whether the employee account is to be created as <b>Active</b>. If isActive=true, then employee is active. If isActive=false, then employee is inactive.</td>
</tr>
</table>
</div>
</div>
<a id="staff_create" name="staff_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a staff member</h4>
<p>Creates a staff member.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>officeId, firstname, lastname</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>isLoanOfficer, isActive</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/staff
</code>
<code class="method-request">
POST staff
Content-Type: application/json
Request Body:
{
"officeId": 1,
"firstname": "John",
"lastname": "Doe",
"isLoanOfficer": "true",
"externalId": "17H",
"mobileNo": "+353851239876",
"isActive": "true",
"joiningDate": "01 January 2009",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="staff_list" name="staff_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Staff</h4>
<p>Returns the list of staff members.</p>
<p>Example Requests:</p>
<div class=apiClick>staff</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/staff
</code>
<code class="method-response">
[
{
"id": 1,
"firstname": "John",
"lastname": "Doe",
"displayName": "Doe, John",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true,
"externalId": "17H",
"isActive": "true",
"joiningDate":[2009,8,1]
}
]
</code>
</div>
</div>
<a id="staff_retrieve" name="staff_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Staff Member</h4>
<p>Returns the details of a Staff Member.</p>
<p>Example Requests:</p>
<div class=apiClick>staff/1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/staff/{staffId}</code>
<code class="method-response">
{
"id": 1,
"firstname": "John",
"lastname": "Doe",
"displayName": "Doe, John",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true,
"externalId": "17H",
"isActive": "true",
"joiningDate":[2009,8,1]
}
</code>
</div>
</div>
<a id="staff_retrieve" name="staff_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Staff by status</h4>
<p>Returns the details of a Staff based on status.</p>
<p>By <b>default</b> it Returns all the </b>ACTIVE</b> Staff.</p>
<p>If status=INACTIVE, then it returns all <b>INACTIVE</b> Staff.</p>
<p>and for status=ALL, it Returns both <b>ACTIVE</b> and <b>INACTIVE</b> Staff.</p>
<p>Example Requests:</p>
<div class=apiClick>staff?status=active</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/staff?status={ACTIVE|INACTIVE|ALL}</code>
<code class="method-response">
{
"id": 1,
"firstname": "John",
"lastname": "Doe",
"displayName": "Doe, John",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true,
"externalId": "17H",
"isActive": "true",
"joiningDate":[2009,8,1]
}
</code>
</div>
</div>
<a id="staff_update" name="staff_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Staff Member</h4>
<p>Updates the details of a staff member.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/staff/{staffId}
</code>
<code class="method-request">
PUT staff/1
Content-Type: application/json
Request Body:
{
"isLoanOfficer": "false",
"externalId": "17Hbb"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 1,
"changes": {
"isLoanOfficer": false,
"externalId": "17Hbb"
}
}
</code>
</div>
</div>
<!--Charges section starts here-->
<a id="charges" name="charges" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Charges</h3>
<p>
Its typical for MFIs to add extra costs for their financial
products. These are typically <b>Fees</b> or <b>Penalties</b>.
</p>
<p>A <strong><i>Charge</i></strong> on fineract platform is what we use to model both <b>Fees</b> and <b>Penalties</b>.</p>
<p>At present we support defining charges for use with Client accounts and both loan and saving products.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name associated with this charge.</td>
</tr>
<tr class=alt>
<td>chargeAppliesTo</td>
</tr>
<tr>
<td class=fielddesc>Enumeration for indicating whether charge is to be applicable for loans, savings or clients.<br/>
1=Loans,
2=Savings,
3=Client
<p>Once a charge definiton has been created, this attribute cannot be changed at any point.</p>
</td>
</tr>
<tr class=alt>
<td>active</td>
</tr>
<tr>
<td class=fielddesc>Boolean flag determines if the charge is currently active.</td>
</tr>
<tr class=alt>
<td>penalty</td>
</tr>
<tr>
<td class=fielddesc>Boolean flag determines if the charge is a <b>penalty</b>. If false the charge is considered a <b>Fee</b></td>
</tr>
<tr class=alt>
<td>currencyCode</td>
</tr>
<tr>
<td class=fielddesc>A three letter ISO code of currency.</td>
</tr>
<tr class=alt>
<td>chargeCalculationType</td>
</tr>
<tr>
<td class=fielddesc>Enumeration for indicating whether charge amount is <b>flat</b> or <b>percentage</b> based:<br/>
1=Flat,
2=% of Amount
<p>Used in combination with <i>amount</i> parameter e.g 1 <b>% of Amount</b> or 3.50 <b>Flat</b></p>
<p>For loans, % of Amount refers to the loan principal disbursed.</p>
<p>For savings, % of Amount can be used with 'withrawal fees' and refers to the amount withdrawn.</p>
</td>
</tr>
<tr class=alt>
<td>amount</td>
</tr>
<tr>
<td class=fielddesc>The charge amount. Used in combination with <i>chargeCalculationType</i> parameter. e.g <b>1</b> % of Amount or <b>3.50</b> Flat</td>
</tr>
<tr class=alt>
<td>minCap</td>
</tr>
<tr>
<td class=fielddesc><b>Optional</b>: Can be used when a '% of Amount' value is used for <i>chargeCalculationType</i>.
<p>Used to enforce a minimum charge amount in cases where the calculated amount is less than the minimum amount provided.</p>
<p>e.g. A 2% fee with a minimum cap of 500:</br>
In case of a 5000 loan, the 2% is 100, and therefore automatically 500 is used as the value of the charge.
</p>
</td>
</tr>
<tr class=alt>
<td>maxCap</td>
</tr>
<tr>
<td class=fielddesc><b>Optional</b>: Can be used when a '% of Amount' value is used for <i>chargeCalculationType</i>.
<p>Used to enforce a maximum charge amount in cases where the calculated amount is greater than the maximum amount provided.</p>
<p>e.g. A 2% fee, with a maximum of 2000.:</br>
In case of a 150000 loan, the 2% adds up to 3000 charge, and therefore the maximum cap of 2000 will be used.
</p>
</td>
</tr>
<tr class=alt>
<td>chargeTimeType</td>
</tr>
<tr>
<td class=fielddesc>An enumeration indicating the time at which the charge becomes due:<br/>
<p>
1 = Disbursement : Applicable for loans and deducted at the time of loan disbursement.<br/>
2 = Specified Due Date : Adhoc charge can be applied for loans and savings on a specified due date.<br/>
3 = Savings Activation : This charge is applicable for savings account and charged at the time of account activation. This charge will be autodeducted once the account is activated with sufficient opening balance.<br/>
5 = Withdrawal fee : Charge applied to every withdrawal of savings account.<br/>
6 = Annual Fee : Recurring charge applied annually for savings on a specified Month and day. see <i>feeOnMonthDay</i><br/>
7 = Monthly Fee : Recurring charge applied on regular interval of months for savings. see <i>feeOnMonthDay</i> and <i>feeInterval</i>
</p>
</td>
</tr>
<tr class=alt>
<td>chargePaymentMode</td>
</tr>
<tr>
<td class=fielddesc><b>Applicable to loan charges only:</b> Enumeration for indicating whether charge is to be paid through an <i>Account Transfer</i> from savings or through <i>Regular</i> payment mode.<br/>
0=Regular,
1=Account Transfer
</td>
</tr>
<tr class=alt>
<td>feeOnMonthDay</td>
</tr>
<tr>
<td class=fielddesc>Used along with <i>monthDayFormat</i> to indicate the recurring charge due date starting on a given day of the month and follow specified <i>feeInterval</i>. e.g. fee due date starting on <b>10 May</b> with <i>feeInterval</i> of two (2) months then a recurring fee on 10th of every two months is applied to savings account. <i>monthDayFormat</i> indicates day and month formatting used e.g. "dd MMM" for 10 May <br/>
This field is mandatory if <i>chargeTimeType</i> is of type <b>Monthly Fee</b>
</td>
</tr>
<tr class=alt>
<td>feeInterval</td>
</tr>
<tr>
<td class=fielddesc>Fee to be applied on a specified interval.<br/>
This field is mandatory if <i>chargeTimeType</i> is of type <b>Monthly Fee</b> or <i>feeFrequency<i> is selcted
</td>
</tr>
<tr class=alt>
<td>feeFrequency</td>
</tr>
<tr>
<td class=fielddesc>This field is Optional Used to indicate the recurring(days,weeks,months and Years) charge due date starting on system calculated date for overdue penalty.<br/></td>
</tr>
<tr class=alt>
<td>incomeAccount</td>
</tr>
<tr>
<td class=fielddesc>This field is Optional and can be used only when a charge is applied to a Client. It indicates the Income or Liability account which gets
credited when a payment is made on this charge<br/></td>
</tr>
</table>
</div>
</div>
<a id="charges_template" name="charges_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Charge Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>charges/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/charges/template
</code>
<code class="method-response">
{
"active": false,
"penalty": false,
"currencyOptions": [
{
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
],
"chargeCalculationTypeOptions": [
{
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
{
"id": 3,
"code": "chargeCalculationType.percent.of.amount.and.interest",
"value": "% Loan Amount + Interest"
},
{
"id": 4,
"code": "chargeCalculationType.percent.of.interest",
"value": "% Interest"
}
],
"chargeAppliesToOptions": [
{
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
{
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
}
],
"chargeTimeTypeOptions": [
{
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
{
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
{
"id": 3,
"code": "chargeTimeType.savingsActivation",
"value": "Savings Activation"
},
{
"id": 5,
"code": "chargeTimeType.withdrawalFee",
"value": "Withdrawal Fee"
},
{
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
{
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
{
"id": 8,
"code": "chargeTimeType.instalmentFee",
"value": "Instalment Fee"
},
{
"id": 9,
"code": "chargeTimeType.overdueInstallment",
"value": "overdue fees"
},
{
"id": 10,
"code": "chargeTimeType.overdraftFee",
"value": "Overdraft Fee"
}
],
"chargePaymetModeOptions": [
{
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
},
{
"id": 1,
"code": "chargepaymentmode.accounttransfer",
"value": "Account transfer"
}
],
"loanChargeCalculationTypeOptions": [
{
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
{
"id": 3,
"code": "chargeCalculationType.percent.of.amount.and.interest",
"value": "% Loan Amount + Interest"
},
{
"id": 4,
"code": "chargeCalculationType.percent.of.interest",
"value": "% Interest"
}
],
"loanChargeTimeTypeOptions": [
{
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
{
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
{
"id": 8,
"code": "chargeTimeType.instalmentFee",
"value": "Instalment Fee"
},
{
"id": 9,
"code": "chargeTimeType.overdueInstallment",
"value": "overdue fees"
}
],
"savingsChargeCalculationTypeOptions": [
{
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
}
],
"savingsChargeTimeTypeOptions": [
{
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
{
"id": 3,
"code": "chargeTimeType.savingsActivation",
"value": "Savings Activation"
},
{
"id": 5,
"code": "chargeTimeType.withdrawalFee",
"value": "Withdrawal Fee"
},
{
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
{
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
{
"id": 10,
"code": "chargeTimeType.overdraftFee",
"value": "Overdraft Fee"
}
],
"feeFrequencyOptions": [
{
"id": 0,
"code": "loanTermFrequency.periodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "loanTermFrequency.periodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "loanTermFrequency.periodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "loanTermFrequency.periodFrequencyType.years",
"value": "Years"
}
]
}
</code>
</div>
</div>
<a id="charges_create" name="charges_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create/Define a Charge</h4>
<p>Define a new charge that can later be associated with loans and savings through their respective product definitions or directly on each account instance.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/charges
</code>
<code class="method-request">
POST charges
Content-Type: application/json
Request Body:
{
"name": "Loan service fee",
"chargeAppliesTo": 1,
"currencyCode": "USD",
"locale": "en",
"amount": "230.56",
"chargeTimeType": "1",
"chargeCalculationType": "1",
"chargePaymentMode": "1",
"active": true
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
<code class="method-request">
POST charges
Content-Type: application/json
Request Body:
{
"locale": "en",
"name": "Default Penalty",
"amount": "2",
"currencyCode": "USD",
"chargeAppliesTo": "1",
"chargeTimeType": "2",
"chargeCalculationType": "2",
"chargePaymentMode": "1",
"active": "true",
"penalty": "true",
"minCap": 50.00,
"maxCap": 100.00
}
</code>
<code class="method-response">
{
"resourceId": 4
}
</code>
<code class="method-request">
POST charges
Content-Type: application/json
Request Body:
{
"locale": "en",
"name": "Annuaul Fee",
"amount": "20",
"currencyCode": "USD",
"chargeAppliesTo": "2",
"chargeTimeType": "6",
"chargeCalculationType": "1",
"chargePaymentMode": "1",
"active": "true",
"penalty": "false"
}
</code>
<code class="method-response">
{
"resourceId": 5
}
</code>
<code class="method-request">
POST charges
Content-Type: application/json
Request Body:
{
"locale": "en",
"name": "Quarterly Fee",
"amount": "5",
"currencyCode": "USD",
"chargeAppliesTo": "2",
"chargeTimeType": "7",
"feeOnMonthDay": "10 May",
"monthDayFormat": "dd MMM",
"feeInterval": "4",
"chargeCalculationType": "1",
"active": "true",
"penalty": "false"
}
</code>
<code class="method-response">
{
"resourceId": 6
}
</code>
<code class="method-request">
POST charges
Content-Type: application/json
Request Body:
{
"chargeAppliesTo":1,
"feeFrequency":1,
"feeInterval":"2",
"name":"overdue charge",
"currencyCode":"USD",
"chargeTimeType":9,
"chargeCalculationType":1,
"chargePaymentMode":0,
"amount":"50",
"active":true,
"penalty":"true",
"locale":"en",
"monthDayFormat":"dd MMM"
}
</code>
<code class="method-response">
{
"resourceId": 7
}
</code>
<code class="method-request">
POST charges
Content-Type: application/json
Request Body:
{
"chargeAppliesTo": 2,
"name": "Weekly Fee",
"currencyCode": "USD",
"chargeTimeType": 11,
"chargeCalculationType": 1,
"feeInterval": "1",
"amount": "10",
"active": true,
"locale": "en"
}
</code>
<code class="method-response">
{
"resourceId": 8
}
</code>
</div>
</div>
<a id="charges_list" name="charges_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Charges</h4>
<p>Returns the list of defined charges.</p>
<p>Example Requests:</p>
<div class=apiClick>charges</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/charges
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Loan service fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 230.56,
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode":{
"id":1,
"code":"chargepaymentmode.accounttransfer",
"value":"Account transfer"
}
},
{
"id": 54,
"chargeId": 12,
"name": "Loan service fee 2",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"percentage": 2.000000,
"amountPercentageAppliedTo": 14000.000000,
"currency": {
"code": "KES",
"name": "Kenyan Shilling",
"decimalPlaces": 2,
"displaySymbol": "KSh",
"nameCode": "currency.KES",
"displayLabel": "Kenyan Shilling (KSh)"
},
"amount": 500.000000,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 500.000000,
"amountOrPercentage": 2.000000,
"penalty": false,
"chargePaymentMode": {
"id": 1,
"code": "chargepaymentmode.accounttransfer",
"value": "Account transfer"
},
"paid": false,
"waived": false,
"chargePayable": true,
"minCap": 500.000000,
"maxCap": 1000.000000
},
]
</code>
</div>
</div>
<a id="charges_retrieve" name="charges_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Charge</h4>
<p>Returns the details of a defined Charge.</p>
<p>Example Requests:</p>
<div class=apiClick>charges/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/charges/{chargeId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Loan service fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 230.56,
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode":{
"id":1,
"code":"chargepaymentmode.accounttransfer",
"value":"Account transfer"
}
}
</code>
</div>
</div>
<a id="charges_update" name="charges_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Charge</h4>
<p>Updates the details of a Charge.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/charges/{chargeId}
</code>
<code class="method-request">
PUT charges/1
Content-Type: application/json
Request Body:
{
"name": "Loan service fee(changed)"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"name": "Loan service fee(changed)"
}
}
</code>
</div>
</div>
<a id="charges_delete" name="charges_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Charge</h4>
<p>Deletes a Charge.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/charges/{chargeId}
</code>
<code class="method-request">
DELETE charges/1
Content-Type: application/json
</code>
<code class="method-response">{ "resourceId": 1 } </code>
</div>
</div>
<!--Accounting Rules section starts here-->
<a id="accountingrules" name="accountingrules" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Accounting Rules</h3>
<p>
It is typical scenario in MFI's that non accountants pass journal entries on a regular basis.
For Ex: 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.
</p>
<p>Enter accounting rules, an abstraction on top of manual Journal entires for enabling
simpler data entry.
An accounting rule can define any of the following abstractions
<ul>
<li>A Simple journal entry where both the credit and debit account have been preselected</li>
<li>A Simple journal entry where either credit or debit accounts have been limited to a
pre-selected list of accounts (Ex: Debit account should be one of "Bank of America" of "JP Morgan"
and credit account should be "Cash")
</li>
<li>A Compound journal entry where multiple debits and / or multiple credits may be made
amongst a set of preselected list of accounts (Ex: Credit account should be either "Bank Of America"
or "Cash" and debit account can be "Employee Salary" and/or "Miscellenous Expenses")
</li>
</ul>
</p>
<p>An accounting rule can also be optionally associated with a branch, so that only a particular Branch's
users have access to the rule</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the accounting rule</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>A description of the accounting rule.</td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>An Optional Office for this accounting rule is applicable.</td>
</tr>
<tr class=alt>
<td>accountToDebit</td>
</tr>
<tr>
<td class=fielddesc>ID of the target account to be Debited</td>
</tr>
<tr class=alt>
<td>accountToCredit</td>
</tr>
<tr>
<td class=fielddesc>ID of the target account to be Credited</td>
</tr>
<tr class=alt>
<td>debitTags</td>
</tr>
<tr>
<td class=fielddesc>A list of accounting Tags. Any Ledger account with this tag can serve as the
account to be debited.<br> This parameter is optional, if <b>accountToDebit</b> present in the request params</td>
</tr>
<tr class=alt>
<td>creditTags</td>
</tr>
<tr>
<td class=fielddesc>A list of accounting Tags. Any Ledger account with this tag can serve as the
account to be credited.<br> This parameter is optional, if <b>accountToCredit</b> present in the request params</td></td>
</tr>
<tr class=alt>
<td>allowMultipleDebitEntries</td>
</tr>
<tr>
<td class=fielddesc>Allows passing multiple debit entries for the accounting rule</td>
</tr>
<tr class=alt>
<td>allowMultipleCreditEntries</td>
</tr>
<tr>
<td class=fielddesc>Allows passing multiple credit entries for the accounting rule</td>
</tr>
<tr class=alt>
<td>paymentTypeId</td>
</tr>
<tr>
<td class=fielddesc>Allows passing multiple credit entries for the accounting rule</td>
</tr>
</table>
</div>
</div>
<a id="accountingrules_template" name="accountingrules_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Accounting Rule Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>accountingrules/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/accountingrules/template
</code>
<code class="method-response">
{
"systemDefined": false,
"allowedOffices": [{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}],
"allowedAccounts": [{
"id": 21,
"name": "Cash 2",
"parentId": 18,
"glCode": "20011",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "Cash",
"nameDecorated": "............Cash 2",
"tagId": {
"id": 10,
"name": "asset tag"
}
},
{
"id": 9,
"name": "Employee Salary",
"parentId": 8,
"glCode": "456674",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "Employee Salary",
"tagId": {
"id": 14,
"name": "Expenses Tag"
}
}]
}
</code>
</div>
</div>
<a id="accountingrules_create" name="accountingrules_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create/Define a Accounting rule</h4>
<p>Define a new Accounting rule.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, officeId,<br> accountToDebit OR debitTags,<br> accountToCredit OR creditTags.<br>
</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/accountingrules
</code>
<code class="method-request">
POST accountingrules
Content-Type: application/json
Request Body:
{
"name": "test",
"officeId": "1",
"accountToDebit": "21",
"accountToCredit": "9",
"description": "Employee salary"
}
</code>
<code class="method-response">
{
"officeId":1,
"resourceId":1
}
</code>
<code class="method-request">
POST accountingrules
Content-Type: application/json
Request Body:
{
"name": "fordocs",
"officeId": "1",
"debitTags": ["10","11"],
"allowMultipleDebitEntries": "true",
"creditTags": ["12","13"],
"allowMultipleCreditEntries": "true",
"description": "for api docs"
}
</code>
<code class="method-response">
{
"officeId":1,
"resourceId":2
}
</code>
<code class="method-request">
POST accountingrules
Content-Type: application/json
Request Body:
{
"name": "test123",
"officeId": "1",
"accountToDebit": "21",
"creditTags": ["12", "13"],
"allowMultipleCreditEntries": "false",
"description": "Employee salary"
}
</code>
<code class="method-response">
{
"officeId":1,
"resourceId":3
}
</code>
<code class="method-request">
POST accountingrules
Content-Type: application/json
Request Body:
{
"name": "fordocstest",
"officeId": "1",
"debitTags": ["10","11"],
"allowMultipleDebitEntries": "false",
"accountToCredit": "9",
"description": "for api docs"
}
</code>
<code class="method-response">
{
"officeId":1,
"resourceId":4
}
</code>
</div>
</div>
<a id="accountingrules_list" name="accountingrules_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Accounting Rules</h4>
<p>Returns the list of defined accounting rules.</p>
<p>Example Requests:</p>
<div class=apiClick>accountingrules</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/accountingrules
</code>
<code class="method-response">
[{
"id": 1,
"officeId": 1,
"officeName": "Head Office",
"name": "test",
"description": "Employee salary",
"systemDefined": false,
"debitAccountHead": {
"id": 21,
"name": "Cash 2",
"glCode": "20011",
"disabled": false,
"manualEntriesAllowed": false
},
"creditAccountHead": {
"id": 9,
"name": "Employee Salary",
"glCode": "456674",
"disabled": false,
"manualEntriesAllowed": false
}
},
{
"id": 2,
"officeId": 1,
"officeName": "Head Office",
"name": "A L1",
"description": "aafff",
"systemDefined": false,
"debitAccountHead": {
"id": 3,
"name": "A L",
"glCode": "10003",
"disabled": false,
"manualEntriesAllowed": false
},
"creditAccountHead": {
"id": 4,
"name": "car loan",
"glCode": "10004",
"disabled": false,
"manualEntriesAllowed": false
}
}]
</code>
</div>
</div>
<a id="accountingrules_retrieve" name="accountingrules_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Accounting rule</h4>
<p>Returns the details of a defined Accounting rule.</p>
<p>Example Requests:</p>
<div class=apiClick>accountingrules/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/accountingrules/{accountingruleId}
</code>
<code class="method-response">
{
"id": 1,
"officeId": 1,
"officeName": "Head Office",
"name": "test",
"description": "Employee salary",
"systemDefined": false,
"debitAccountHead": {
"id": 21,
"name": "Cash 2",
"glCode": "20011",
"disabled": false,
"manualEntriesAllowed": false
},
"creditAccountHead": {
"id": 9,
"name": "Employee Salary",
"glCode": "456674",
"disabled": false,
"manualEntriesAllowed": false
}
}
</code>
</div>
</div>
<a id="accountingrules_update" name="accountingrules_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Accounting Rule</h4>
<p>Updates the details of a Accounting rule.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/accountingrules/{accountingruleId}
</code>
<code class="method-request">
PUT accountingrules/1
Content-Type: application/json
Request Body:
{
"name": "Employee Salary posting rule"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"name": "Employee Salary posting rule"
}
}
</code>
</div>
</div>
<a id="accountingrules_delete" name="accountingrules_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Accounting Rule</h4>
<p>Deletes a Accounting rule.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/accountingrules/{accountingruleId}
</code>
<code class="method-request">
DELETE accountingrules/1
Content-Type: application/json
</code>
<code class="method-response">{ "resourceId": 1 } </code>
</div>
</div>
<!-- start of saving products api docs -->
<a id="savingsproducts" name="savingsproducts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Savings Product:</h3>
<p>An MFIs savings product offerings are modeled using this API.</p>
<p>When creating savings accounts, the details from the savings product are used to auto fill details of the savings account application process.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>name</td></tr>
<tr><td class=fielddesc>The name of the product offering.</td></tr>
<tr class=alt><td>shortName</td></tr>
<tr><td class=fielddesc>Shortname associated with a saving product. <br>
An abbreviated version of the name, used in reports or menus where space is limited.
</td></tr>
<tr class=alt><td>description</td></tr>
<tr><td class=fielddesc>A description of the product offering.</td></tr>
<tr class=alt><td>currencyCode</td></tr>
<tr><td class=fielddesc>Three letter ISO code representing currency.</td></tr>
<tr class=alt><td>digitsAfterDecimal</td></tr>
<tr><td class=fielddesc>Override the currency default value for digitsAfterDecimal.</td></tr>
<tr class=alt><td>inMultiplesOf</td></tr>
<tr><td class=fielddesc>Override the default value for rounding currency to multiples of provided value.</td></tr>
<tr class=alt><td>nominalAnnualInterestRate</td></tr>
<tr><td class=fielddesc>The default interest rate set when creating savings accounts of this type of product. e.g. <b>5</b>% Per year - It number here is always expressed as the Nominal APR.</td></tr>
<tr class=alt><td>interestCompoundingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is compounded. 1=Daily, 4=Monthly (at end of month)</td></tr>
<tr class=alt><td>interestPostingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is posted or credited to savings account. 4=Monthly (at end of month), 5=Quarterly (at end of quarter, 31st Mar, 30th Jun, 30th Sep, 31st Dec)</td></tr>
<tr class=alt><td>interestCalculationType</td></tr>
<tr><td class=fielddesc>The interest calculation method used: 1=Daily Balance or 2=Average Daily Balance</td></tr>
<tr class=alt><td>interestCalculationDaysInYearType</td></tr>
<tr><td class=fielddesc>The setting for number of days in year to use: 360=360 Days, 365=365 Days</td></tr>
<tr class=alt><td>minRequiredOpeningBalance</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets the minimum deposit amount required to open a savings account e.g. <b>2,000</b></td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the savings account is 'locked in' and withdrawals are not allowed. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequency</i> to indicate the length of time that the savings account is 'locked in' and withdrawals are not allowed. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b></td></tr>
<tr class=alt><td>withdrawalFeeForTransfers</td></tr>
<tr><td class=fielddesc><b>Optional</b>: Used along with <i>withdrawalFeeAmount</i> to indicate whether the withdrawal fee should be applied on the account for account transfers .</td></tr>
<tr class=alt><td>accountingRule</td></tr>
<tr>
<td class=fielddesc>Specifies if accounting is enabled for the particular
product and the type of the accounting rule to be used
<span>Example Values:</span>1=NONE,2=CASH_BASED</td>
</tr>
<tr class=alt><td>allowOverdraft</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, depending on the value mark the savings account as overdraft account </td></tr>
<tr class=alt><td>overdraftLimit</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets the maximum allowed overdraft amount for a savings account e.g. <b>5,000</b> else set the limit as zero</td></tr>
<tr class=alt><td>minBalanceForInterestCalculation</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, balance must be greater than provided value for calculation of interest e.g. <b>5,000</b> </td></tr>
<tr class=alt><td>enforceMinRequiredBalance</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If set to <span>true</span>, validates that the account balance does not
fall below <span>minRequiredBalance</span> </td></tr>
<tr class=alt><td>minRequiredBalance</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets an indicator of the minimum required balance of the savings account e.g. <b>5,000</b> else set the limit as zero. Note that <span>enforceMinRequiredBalance</span> determines if the minimum required balance is enforced</td></tr>
<tr class=alt><td>withHoldTax</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets an indicator for applying withhold tax on interest posting for savings account </td></tr>
<tr class=alt><td>taxGroupId</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If withhold tax set as true, with hold tax will be applied as per the tax group provided </td></tr>
</table>
</div>
</div>
<a id="savingsproducts_template" name="savingsproducts_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Savings Product Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request: </p>
<div class=apiClick>savingsproducts/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsproducts/template</code>
<code class="method-response">
{
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsInterestPostingPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"accountingRule": {
"id": 1,
"code": "accountingRuleType.none",
"value": "NONE"
},
"currencyOptions": [
{
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
],
"interestCompoundingPeriodTypeOptions": [
{
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
{
"id": 2,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.weekly",
"value": "Weekly"
},
{
"id": 3,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.biweekly",
"value": "Bi-Weekly"
},
{
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
{
"id": 5,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.quarterly",
"value": "Quarterly"
},
{
"id": 6,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.biannual",
"value": "Semi-Annual"
},
{
"id": 7,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.annual",
"value": "Annually"
},
{
"id": 8,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.nocompounding",
"value": "No Compounding - Simple Interest"
}
],
"interestPostingPeriodTypeOptions": [
{
"id": 4,
"code": "savings.interest.posting.period.savingsInterestPostingPeriodType.monthly",
"value": "Monthly"
},
{
"id": 5,
"code": "savings.interest.posting.period.savingsInterestPostingPeriodType.quarterly",
"value": "Quarterly"
},
{
"id": 6,
"code": "savings.interest.posting.period.savingsInterestPostingPeriodType.biannual",
"value": "Semi-Annual"
},
{
"id": 7,
"code": "savings.interest.posting.period.savingsInterestPostingPeriodType.annual",
"value": "Annually"
}
],
"interestCalculationTypeOptions": [
{
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
{
"id": 2,
"code": "savingsInterestCalculationType.averagedailybalance",
"value": "Average Daily Balance"
}
],
"interestCalculationDaysInYearTypeOptions": [
{
"id": 360,
"code": "savingsInterestCalculationDaysInYearType.days360",
"value": "360 Days"
},
{
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
}
],
"lockinPeriodFrequencyTypeOptions": [
{
"id": 0,
"code": "savings.lockin.savingsPeriodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "savings.lockin.savingsPeriodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "savings.lockin.savingsPeriodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "savings.lockin.savingsPeriodFrequencyType.years",
"value": "Years"
}
],
"withdrawalFeeTypeOptions": [
{
"id": 1,
"code": "savingsWithdrawalFeesType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "savingsWithdrawalFeesType.percent.of.amount",
"value": "% of Amount"
}
],
"paymentTypeOptions": [
{
"id": 14,
"name": "Wire Transfer",
"position": 0
},
{
"id": 13,
"name": "Cash",
"position": 1
}
],
"accountingRuleOptions": [
{
"id": 1,
"code": "accountingRuleType.none",
"value": "NONE"
},
{
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
},
{
"id": 3,
"code": "accountingRuleType.accrual",
"value": "ACCRUAL BASED"
}
],
"accountingMappingOptions": {
"liabilityAccountOptions": [
{
"id": 15,
"name": "Savings Control",
"glCode": "50001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "Savings Control",
"tagId": {
"id": 0
}
}
],
"assetAccountOptions": [
{
"id": 2,
"name": "Cash",
"glCode": "100001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 16,
"name": "Savings Reference",
"glCode": "100007",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "Savings Reference",
"tagId": {
"id": 0
}
},
{
"id": 12,
"name": "HDFC Rajajinagar",
"glCode": "100015",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 1,
"name": "Loan Portfolio",
"glCode": "10003",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 7,
"name": "Interest Receivable",
"glCode": "10005",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 8,
"name": "Penalties Receivable",
"glCode": "10008",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 9,
"name": "Fee Receivable",
"glCode": "10009",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
}
],
"expenseAccountOptions": [
{
"id": 6,
"name": "Write Off Expenses",
"glCode": "60001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 13,
"name": "Employee Salary",
"glCode": "60002",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 18,
"name": "Interest On Savings",
"glCode": "60003",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "Interest On Savings",
"tagId": {
"id": 0
}
}
],
"incomeAccountOptions": [
{
"id": 3,
"name": "Income from Interest",
"glCode": "40001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 4,
"name": "Income from Fees",
"glCode": "40002",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
},
{
"id": 5,
"name": "Income from Penalties",
"glCode": "40004",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"tagId": {}
}
]
},
"chargeOptions" : [ { "active" : true,
"amount" : 200,
"chargeAppliesTo" : { "code" : "chargeAppliesTo.savings",
"id" : 2,
"value" : "Savings"
},
"chargeCalculationType" : { "code" : "chargeCalculationType.flat",
"id" : 1,
"value" : "Flat"
},
"chargePaymentMode" : { "code" : "chargepaymentmode.regular",
"id" : 0,
"value" : "chargepaymentmode.regular"
},
"chargeTimeType" : { "code" : "chargeTimeType.specifiedDueDate",
"id" : 2,
"value" : "Specified due date"
},
"currency" : { "code" : "USD",
"decimalPlaces" : 2,
"displayLabel" : "US Dollar ($)",
"displaySymbol" : "$",
"name" : "US Dollar",
"nameCode" : "currency.USD"
},
"id" : 4,
"name" : "Savings charge 1",
"penalty" : false
},
{ "active" : true,
"amount" : 300,
"chargeAppliesTo" : { "code" : "chargeAppliesTo.savings",
"id" : 2,
"value" : "Savings"
},
"chargeCalculationType" : { "code" : "chargeCalculationType.flat",
"id" : 1,
"value" : "Flat"
},
"chargePaymentMode" : { "code" : "chargepaymentmode.regular",
"id" : 0,
"value" : "chargepaymentmode.regular"
},
"chargeTimeType" : { "code" : "chargeTimeType.specifiedDueDate",
"id" : 2,
"value" : "Specified due date"
},
"currency" : { "code" : "USD",
"decimalPlaces" : 2,
"displayLabel" : "US Dollar ($)",
"displaySymbol" : "$",
"name" : "US Dollar",
"nameCode" : "currency.USD"
},
"id" : 5,
"name" : "Savings charge 2",
"penalty" : false
}
]
}
</code>
</div>
</div>
<a id="entitydatatablechecks" name="entitydatatablechecks" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Entity-Datatable Checks</h3>
<p>This defines Entity-Datatable Check.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>entity</td></tr>
<tr><td class=fielddesc>The entity to which the Entity-Datatable Check to be attached.</td></tr>
<tr class=alt><td>status</td></tr>
<tr><td class=fielddesc>The action to be attached to an Entity-Datatable Check.</td></tr>
<tr class=alt><td>datatableName</td></tr>
<tr><td class=fielddesc>Name of the datatable on which the Entity-Datatable Check to be imposed.</td></tr>
<tr class=alt><td>productId</td></tr>
<tr><td class=fielddesc>Optional: The product to be associated with an entity.</td></tr>
</table>
</div>
</div>
<a id="entitydatatablechecks_create" name="entitydatatablechecks_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create Entity-Datatable Checks</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>entity, status, datatableName</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Non-Mandatory Fields</div></td></tr>
<tr class=alt>
<td>productId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/entityDatatableChecks</code>
<code class="method-request">POST entitydatatablechecks
Content-Type: application/json
Request Body:
{
"entity": "m_loan",
"status": 100,
"datatableName": "Additional Details",
"productId": 1
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="entitydatatablechecks_list" name="entitydatatablechecks_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Entity-Datatable Checks</h4>
<p>The <i>list</i> capability of Entity-Datatable Checks can support <b>pagination</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
</dl>
<p>Example Request:</p>
<div class=apiClick>entityDatatableChecks?offset=0&limit=15</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/entityDatatableChecks?offset=0&limit=15
</code>
<code class="method-response">
{
"totalFilteredRecords": 15,
"pageItems": [{
"id": 45,
"entity": "m_client",
"status": {
"id": 100,
"code": "CREATE",
"value": "CREATE"
},
"datatableName": "Client Personal Details",
"systemDefined": false,
"order": 45
},
{
"id": 48,
"entity": "m_group",
"status": {
"id": 100,
"code": "CREATE",
"value": "CREATE"
},
"datatableName": "Group Activation Details",
"systemDefined": false,
"order": 48
}, ...]
}
</code>
</div>
</div>
<a id="entitydatatablechecks_template" name="entitydatatablechecks_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Entity-Datatable Checks Template</h4>
<p>This is a convenience resource useful for
building maintenance user interface screens for Entity-Datatable Checks
applications. The template data returned consists of:
<ul>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>entityDatatableChecks/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/entityDatatableChecks/template
</code>
<code class="method-response">
{
"entities": ["m_client",
"m_loan",
"m_group",
"m_savings_account"],
"statusClient": [{
"name": "CREATE",
"code": 100
},
{
"name": "ACTIVATE",
"code": 300
},
{
"name": "CLOSE",
"code": 600
}],
"statusGroup": [{
"name": "CREATE",
"code": 100
},
{
"name": "ACTIVATE",
"code": 300
},
{
"name": "CLOSE",
"code": 600
}],
"statusSavings": [{
"name": "CREATE",
"code": 100
},
{
"name": "APPROVE",
"code": 200
},
{
"name": "ACTIVATE",
"code": 300
},
{
"name": "WITHDRAWN",
"code": 400
},
{
"name": "REJECTED",
"code": 500
},
{
"name": "CLOSE",
"code": 600
}],
"statusLoans": [{
"name": "CREATE",
"code": 100
},
{
"name": "APPROVE",
"code": 200
},
{
"name": "ACTIVATE",
"code": 300
},
{
"name": "WITHDRAWN",
"code": 400
},
{
"name": "REJECTED",
"code": 500
},
{
"name": "WRITE_OFF",
"code": 601
}],
"datatables": [{
"entity": "m_group",
"dataTableName": "Address Details"
},
{
"entity": "m_client",
"dataTableName": "CACT"
},
{
"entity": "m_client",
"dataTableName": "Family_Details"
}],
"loanProductDatas": [{
"id": 1,
"name": "Sakhi Shakthi",
"includeInBorrowerCycle": false,
"useBorrowerCycle": false,
"isLinkedToFloatingInterestRates": false,
"isFloatingInterestRateCalculationAllowed": false,
"allowVariableInstallments": false,
"isInterestRecalculationEnabled": false,
"canDefineInstallmentAmount": false,
"principalVariationsForBorrowerCycle": [],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": [],
"canUseForTopup": false,
"holdGuaranteeFunds": false,
"accountMovesOutOfNPAOnlyOnArrearsCompletion": false,
"syncExpectedWithDisbursementDate": false
},
{
"id": 2,
"name": "MEL One",
"includeInBorrowerCycle": false,
"useBorrowerCycle": false,
"isLinkedToFloatingInterestRates": false,
"isFloatingInterestRateCalculationAllowed": false,
"allowVariableInstallments": false,
"isInterestRecalculationEnabled": false,
"canDefineInstallmentAmount": false,
"principalVariationsForBorrowerCycle": [],
"interestRateVariationsForBorrowerCycle": [],
"numberOfRepaymentVariationsForBorrowerCycle": [],
"canUseForTopup": false,
"holdGuaranteeFunds": false,
"accountMovesOutOfNPAOnlyOnArrearsCompletion": false,
"syncExpectedWithDisbursementDate": false
}],
"savingsProductDatas": [{
"id": 1,
"name": "Deposit Account",
"withdrawalFeeForTransfers": false,
"allowOverdraft": false,
"enforceMinRequiredBalance": false,
"withHoldTax": false
},
{
"id": 2,
"name": "Savings Account One",
"withdrawalFeeForTransfers": false,
"allowOverdraft": false,
"enforceMinRequiredBalance": false,
"withHoldTax": false
}]
}
</code>
</div>
</div>
<a id="entitydatatablechecks_delete" name="entitydatatablechecks_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Entity-Datatable Checks</h4>
<p>
Deletes an existing Entity-Datatable Check
</p>
</div>
<div class="method-example">
<code class="method-declaration">DELETE https://Domain Name/api/v1/entityDatatableChecks/{entityDatatableCheckId}</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="smscampaigns_create" name="smscampaigns_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a SMS Campaign</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>campaignName, campaignType, triggerType, providerId, runReportId, message</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields for Cash based on selected report id</div></td></tr>
<tr class=alt>
<td>paramValue in json format</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/smscampaigns</code>
<code class="method-request">POST smscampaigns
Content-Type: application/json
Request Body:
{
"campaignName": "Savings Deposit Campaign",
"campaignType": "SMS",
"triggerType": 3,
"providerId": 2,
"runReportId": 180,
"paramValue": "{"officeId":1,"loanOfficerId":-1,"transactionId":1,"reportName":"Savings Deposit"}",
"message": "Hello {fullName} your account is credited with {depositAmount} on {transactionDate}",
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="smscampaigns_list" name="smscampaigns_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List SMS Campaigns</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td></td>
</tr>
</table>
<p>Example Requests:</p>
<div class=apiClick>smscampaigns</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/smscampaigns</code>
<code class="method-response">
[{
"id": 1,
"campaignName": "Savings Deposit Campaign"
"campaignType": "SMS",
"triggerType": 3,
"providerId": 2,
"runReportId": 180,
"reportName" : "Savings Deposit",
"paramValue": "{"officeId":1,"loanOfficerId":-1,"transactionId":1,"reportName":"Savings Deposit"}",
"message": "Hello {fullName} your account is credited with {depositAmount} on {transactionDate}",
"status" : { "id":"","code":"","value":""}
}]
</code>
</div>
</div>
<a id="smscampaigns_retrieve" name="smscampaigns_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a SMS Campaign</h4>
<p>Example Requests: </p>
<div class=apiClick>smscampaigns/1</div>
<br><br>
<div class=apiClick>smscampaigns/1?template=true</div>
<br><br>
<div class=apiClick>smscampaigns/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/smscampaigns/1</code>
<code class="method-response">
{
"id": 1,
"campaignName": "Savings Deposit Campaign"
"campaignType": "SMS",
"triggerType": 3,
"providerId": 2,
"runReportId": 180,
"reportName" : "Savings Deposit",
"paramValue": "{"officeId":1,"loanOfficerId":-1,"transactionId":1,"reportName":"Savings Deposit"}",
"message": "Hello {fullName} your account is credited with {depositAmount} on {transactionDate}",
"status" : { "id":"","code":"","value":""}
}
<B>In case of Scheduled Campaign</B>
{
"id": 1,
"campaignName": "Savings Deposit Campaign"
"campaignType": "SMS",
"triggerType": 3,
"providerId": 2,
"runReportId": 180,
"reportName" : "Savings Deposit",
"paramValue": "{"officeId":1,"loanOfficerId":-1,"transactionId":1,"reportName":"Savings Deposit"}",
"message": "Hello {fullName} your account is credited with {depositAmount} on {transactionDate}",
"status" : { "id":"","code":"","value":""},
"nextTriggerDate": "22 Jan 2017",
"lastTriggerDate": "22 Jan 2016",
"recurrenceStartDate":"22 Jan 2016",
"recurrence": "YEARLY"
}
<B>smscampaigns/1?template=true</B>
{
"id": 1,
"campaignName": "Savings Deposit Campaign"
"campaignType": "SMS",
"triggerType": 3,
"providerId": 2,
"runReportId": 180,
"reportName" : "Savings Deposit",
"paramValue": "{"officeId":1,"loanOfficerId":-1,"transactionId":1,"reportName":"Savings Deposit"}",
"message": "Hello {fullName} your account is credited with {depositAmount} on {transactionDate}",
"status" : { "id":"","code":"","value":""}
"smsProviderOptions": [{
"id": 1,
"tenantId": "1",
"phoneNo": "+XXXXXXXXXX",
"providerName": "Twilio SMS Provider",
"providerDescription": "Twilio, just for testing"
}],
"businessRulesOptions": [
{
"reportId": 166,
"reportName": "Active Clients",
"reportType": "SMS",
"reportSubType": "NonTriggered",
"reportDescription": "All clients with the status ‘Active’",
"reportParamName": {
"Office": "OfficeIdSelectOne",
"Loan Officer": "loanOfficerIdSelectAll"
}
}
],
"triggerTypeOptions": [
{"id": 1,"code": "triggerType.direct", "value": "Direct"},
{"id": 2, "code": "triggerType.schedule","value": "Scheduled"},
{"id": 3,"code": "triggerType.triggered","value": "Triggered"}
],
"months": [
{ "id": 1, "code": "JANUARY", "value": "JANUARY" },
{ "id": 2, "code": "FEBRUARY", "value": "FEBRUARY" },
{ "id": 3, "code": "MARCH", "value": "MARCH" },
{ "id": 4, "code": "APRIL", "value": "APRIL" },
{ "id": 5, "code": "MAY", "value": "MAY" },
{ "id": 6, "code": "JUNE", "value": "JUNE" },
{ "id": 7, "code": "JULY", "value": "JULY" },
{ "id": 8, "code": "AUGUST", "value": "AUGUST" },
{ "id": 9, "code": "SEPTEMBER", "value": "SEPTEMBER"},
{ "id": 10, "code": "OCTOBER", "value": "OCTOBER"},
{ "id": 11, "code": "NOVEMBER", "value": "NOVEMBER" }
],
"weekDays": [
{ "id": 1, "code": "calendarWeekDaysType.monday", "value": "MO" },
{ "id": 2, "code": "calendarWeekDaysType.tuesday", "value": "TU" },
{ "id": 3, "code": "calendarWeekDaysType.wednesday", "value": "WE" },
{ "id": 4, "code": "calendarWeekDaysType.thursday", "value": "TH"},
{ "id": 5, "code": "calendarWeekDaysType.friday", "value": "FR" },
{ "id": 6, "code": "calendarWeekDaysType.saturday", "value": "SA" },
{ "id": 7, "code": "calendarWeekDaysType.sunday", "value": "SU" }
],
"frequencyTypeOptions": [
{ "id": 1, "code": "calendarFrequencyType.daily", "value": "DAILY" },
{ "id": 2, "code": "calendarFrequencyType.weekly", "value": "WEEKLY"},
{ "id": 3, "code": "calendarFrequencyType.monthly", "value": "MONTHLY"},
{ "id": 4, "code": "calendarFrequencyType.yearly", "value": "YEARLY" }
],
"periodFrequencyOptions": [
{ "id": 0, "code": "periodFrequencyType.days", "value": "DAYS" },
{ "id": 1, "code": "periodFrequencyType.weeks", "value": "WEEKS" },
{ "id": 2, "code": "periodFrequencyType.months", "value": "MONTHS" },
{ "id": 3, "code": "periodFrequencyType.years", "value": "YEARS" }
]
}
<B>smscampaigns/template</B>
{
"smsProviderOptions": [{
"id": 1,
"tenantId": "1",
"phoneNo": "+XXXXXXXXXX",
"providerName": "Twilio SMS Provider",
"providerDescription": "Twilio, just for testing"
}],
"businessRulesOptions": [
{
"reportId": 166,
"reportName": "Active Clients",
"reportType": "SMS",
"reportSubType": "NonTriggered",
"reportDescription": "All clients with the status ‘Active’",
"reportParamName": {
"Office": "OfficeIdSelectOne",
"Loan Officer": "loanOfficerIdSelectAll"
}
}
],
"triggerTypeOptions": [
{"id": 1,"code": "triggerType.direct", "value": "Direct"},
{"id": 2, "code": "triggerType.schedule","value": "Scheduled"},
{"id": 3,"code": "triggerType.triggered","value": "Triggered"}
],
"months": [
{ "id": 1, "code": "JANUARY", "value": "JANUARY" },
{ "id": 2, "code": "FEBRUARY", "value": "FEBRUARY" },
{ "id": 3, "code": "MARCH", "value": "MARCH" },
{ "id": 4, "code": "APRIL", "value": "APRIL" },
{ "id": 5, "code": "MAY", "value": "MAY" },
{ "id": 6, "code": "JUNE", "value": "JUNE" },
{ "id": 7, "code": "JULY", "value": "JULY" },
{ "id": 8, "code": "AUGUST", "value": "AUGUST" },
{ "id": 9, "code": "SEPTEMBER", "value": "SEPTEMBER"},
{ "id": 10, "code": "OCTOBER", "value": "OCTOBER"},
{ "id": 11, "code": "NOVEMBER", "value": "NOVEMBER" }
],
"weekDays": [
{ "id": 1, "code": "calendarWeekDaysType.monday", "value": "MO" },
{ "id": 2, "code": "calendarWeekDaysType.tuesday", "value": "TU" },
{ "id": 3, "code": "calendarWeekDaysType.wednesday", "value": "WE" },
{ "id": 4, "code": "calendarWeekDaysType.thursday", "value": "TH"},
{ "id": 5, "code": "calendarWeekDaysType.friday", "value": "FR" },
{ "id": 6, "code": "calendarWeekDaysType.saturday", "value": "SA" },
{ "id": 7, "code": "calendarWeekDaysType.sunday", "value": "SU" }
],
"frequencyTypeOptions": [
{ "id": 1, "code": "calendarFrequencyType.daily", "value": "DAILY" },
{ "id": 2, "code": "calendarFrequencyType.weekly", "value": "WEEKLY"},
{ "id": 3, "code": "calendarFrequencyType.monthly", "value": "MONTHLY"},
{ "id": 4, "code": "calendarFrequencyType.yearly", "value": "YEARLY" }
],
"periodFrequencyOptions": [
{ "id": 0, "code": "periodFrequencyType.days", "value": "DAYS" },
{ "id": 1, "code": "periodFrequencyType.weeks", "value": "WEEKS" },
{ "id": 2, "code": "periodFrequencyType.months", "value": "MONTHS" },
{ "id": 3, "code": "periodFrequencyType.years", "value": "YEARS" }
]
}
</code>
</div>
</div>
<a id="smscampaigns_update" name="smscampaigns_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Campaign</h4>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/smscampaigns/{campaignId}</code>
<code class="method-request">POST smscampaigns/1
Content-Type: application/json
Request Body:
{
"message": "Hello your savings account {savingsAccountNo} debited with {withdrawAmount}"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"message": "Hello your savings account {savingsAccountNo} debited with {withdrawAmount}"
}
}
</code>
</div>
</div>
<a id="smscampaigns_delete" name="smscampaigns_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a SMS Campaign</h4>
<p>
<b>Note:</b> Only closed SMS Campaigns can be
deleted
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/smscampaigns/{campaignId}
</code>
<code class="method-request">
DELETE smscampaigns/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {}
}
</code>
</div>
</div>
<a id="smscampaigns_activate" name="smscampaigns_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Activates SMS Campaign</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/smscampaigns/{campaignId}?command=activate</code>
<code class="method-request">POST smscampaigns/1?command=activate
Content-Type: application/json
Request Body:
{
"activationDate":"01 May 2016",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "smsCampaignStatus.active",
"value": "active",
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activationDate": "01 May 2016"
}
}
</code>
</div>
</div>
<a id="smscampaigns_close" name="smscampaigns_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Deactivates SMS Campaign</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/smscampaigns/{campaignId}?command=close</code>
<code class="method-request">POST smscampaigns/1?command=close
Content-Type: application/json
Request Body:
{
"closureDate":"01 May 2016",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 600,
"code": "smsCampaignStatus.closed",
"value": "closed",
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"closureDate": "01 May 2016"
}
}
</code>
</div>
</div>
<a id="smscampaigns_reactivate" name="smscampaigns_reactivate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Reactivates SMS Campaign</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/smscampaigns/{campaignId}?command=reactivate</code>
<code class="method-request">POST smscampaigns/1?command=reactivate
Content-Type: application/json
Request Body:
{
"activationDate":"01 May 2016",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "smsCampaignStatus.active",
"value": "active",
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activationDate": "01 May 2016"
}
}
</code>
</div>
</div>
<a id="shareproducts_create" name="shareproducts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Share Product</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>name, shortName, description, currencyCode, digitsAfterDecimal,inMultiplesOf, locale,
totalShares, unitPrice, nominalShares,allowDividendCalculationForInactiveClients,accountingRule</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields for Cash based accounting (accountingRule = 2)</div></td></tr>
<tr class=alt>
<td>shareReferenceId, shareSuspenseId, shareEquityId, incomeFromFeeAccountId</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>sharesIssued, minimumShares, maximumShares, minimumActivePeriodForDividends, minimumactiveperiodFrequencyType,
lockinPeriodFrequency, lockinPeriodFrequencyType, marketPricePeriods, chargesSelected</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/products/share</code>
<code class="method-request">POST shareproducts
Content-Type: application/json
Request Body:
{
"name": "Share Product",
"shortName": "SP",
"description": "Description",
"currencyCode": "USD",
"digitsAfterDecimal": 2,
"inMultiplesOf": "1",
"locale": "en",
"totalShares": "1000",
"sharesIssued": "1000",
"unitPrice": "1",
"minimumShares": "10",
"nominalShares": "20",
"maximumShares": "30",
"minimumActivePeriodForDividends": "1",
"minimumactiveperiodFrequencyType": 0,
"lockinPeriodFrequency": "1",
"lockinPeriodFrequencyType": 1,
"allowDividendCalculationForInactiveClients": "true",
"marketPricePeriods": [{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"fromDate": "04 May 2016",
"shareValue": "2"
}],
"chargesSelected": [{
"id": 20
}],
"accountingRule": "1"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
<code class="method-request">POST shareproducts
Content-Type: application/json
Request Body:
{
"name": "Share Product",
"shortName": "SP",
"description": "Description",
"currencyCode": "USD",
"digitsAfterDecimal": 2,
"inMultiplesOf": "1",
"locale": "en",
"totalShares": "100000",
"sharesIssued": "100000",
"unitPrice": "1",
"minimumShares": "1000",
"nominalShares": "2000",
"maximumShares": "5000",
"minimumActivePeriodForDividends": "1",
"minimumactiveperiodFrequencyType": 0,
"lockinPeriodFrequency": "1",
"lockinPeriodFrequencyType": 1,
"allowDividendCalculationForInactiveClients": "true",
"marketPricePeriods": [{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"fromDate": "04 May 2016",
"shareValue": "2"
}],
"chargesSelected": [{
"id": 20
}],
"accountingRule": "2",
"shareReferenceId": 5,
"shareSuspenseId": 8,
"shareEquityId": 66,
"incomeFromFeeAccountId": 2
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="shareproducts_retrieve" name="shareproducts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Share Product</h4>
<p>Example Requests: </p>
<div class=apiClick>products/share/1</div>
<br><br>
<div class=apiClick>products/share/1?template=true</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/products/share/1</code>
<code class="method-response">
{
"id": 1,
"name": "Share Product",
"shortName": "SP",
"description": "SP",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 100,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"totalShares": 100,
"totalSharesIssued": 50,
"unitPrice": 1.00,
"shareCapital": 50.00,
"minimumShares": 1,
"nominalShares": 10,
"maximumShares": 50,
"marketPrice": [
{
"id": 4,
"fromDate": "Feb 1, 2016",
"shareValue": 1.00
},
{
"id": 5,
"fromDate": "May 3, 2016",
"shareValue": 5.00
}],
"charges": [{
"id": 20,
"name": "Share Account Activation Flat",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 1.000000,
"chargeTimeType": {
"id": 13,
"code": "chargeTimeType.activation",
"value": "Share Account Activate"
},
"chargeAppliesTo": {
"id": 4,
"code": "chargeAppliesTo.shares",
"value": "Shares"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
}],
"allowDividendCalculationForInactiveClients": true,
"lockinPeriod": 1,
"lockPeriodTypeEnum": {
"id": 0,
"value": "Days"
},
"minimumActivePeriod": 1,
"minimumActivePeriodForDividendsTypeEnum": {
"id": 0,
"value": "Days"
},
"accountingRule": {
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
},
"accountingMappings": {
"shareReferenceId": {
"id": 1,
"name": "ACCOUNT_NAME_1FJBQ",
"glCode": "ASSET_ED1461237837829"
},
"incomeFromFeeAccountId": {
"id": 14,
"name": "ACCOUNT_NAME_1FJBQ",
"glCode": "INCOME_OY1461237869836"
},
"shareEquityId": {
"id": 66,
"name": "Equity Account",
"glCode": "EQUITY1"
},
"shareSuspenseId": {
"id": 8,
"name": "ACCOUNT_NAME_1FJBQ",
"glCode": "LIABILITY_MA1461237860198"
}
},
"currencyOptions": [{
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}],
"chargeOptions": [{
"id": 20,
"name": "Share Account Activation Flat",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 1.000000,
"chargeTimeType": {
"id": 13,
"code": "chargeTimeType.activation",
"value": "Share Account Activate"
},
"chargeAppliesTo": {
"id": 4,
"code": "chargeAppliesTo.shares",
"value": "Shares"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 21,
"name": "Share Purchase %",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 0.500000,
"chargeTimeType": {
"id": 14,
"code": "chargeTimeType.sharespurchase",
"value": "Share Purchase"
},
"chargeAppliesTo": {
"id": 4,
"code": "chargeAppliesTo.shares",
"value": "Shares"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
}
],
"minimumActivePeriodFrequencyTypeOptions": [{
"id": 0,
"code": "savings.lockin.sharePeriodFrequencyType.days",
"value": "Days"
}],
"lockinPeriodFrequencyTypeOptions": [{
"id": 0,
"code": "savings.lockin.sharePeriodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "savings.lockin.sharePeriodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "savings.lockin.sharePeriodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "savings.lockin.sharePeriodFrequencyType.years",
"value": "Years"
}],
"accountingMappingOptions": {
"liabilityAccountOptions": [{
"id": 4,
"name": "ACCOUNT_NAME_1FJBQ",
"glCode": "LIABILITY_2T1461237838897",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "DEFAULT_DESCRIPTION",
"nameDecorated": "ACCOUNT_NAME_1FJBQ",
"tagId": {
"id": 0,
"isActive": false
}
}],
"assetAccountOptions": [{
"id": 1,
"name": "ACCOUNT_NAME_1FJBQ",
"glCode": "ASSET_ED1461237837829",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "DEFAULT_DESCRIPTION",
"nameDecorated": "ACCOUNT_NAME_1FJBQ",
"tagId": {
"id": 0,
"isActive": false
}
}],
"incomeAccountOptions": [{
"id": 2,
"name": "ACCOUNT_NAME_1FJBQ",
"glCode": "INCOME_9O1461237838422",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "DEFAULT_DESCRIPTION",
"nameDecorated": "ACCOUNT_NAME_1FJBQ",
"tagId": {
"id": 0,
"isActive": false
}
}],
"equityAccountOptions": [{
"id": 66,
"name": "Equity Account",
"glCode": "EQUITY1",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 3,
"code": "accountType.equity",
"value": "EQUITY"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"nameDecorated": "Equity Account",
"tagId": {
"id": 0,
"isActive": false
}
}]
}
}
</code>
</div>
</div>
<a id="shareproducts_update" name="shareproducts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Share Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/products/share/{productId}</code>
<code class="method-request">POST shareproducts/1
Content-Type: application/json
Request Body:
{
"description": "Share Product Description.",
"locale": "en",
"unitPrice": "5.0"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"description": "Share Product Description.",
"unitPrice": 5.0,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="shareproducts_list" name="shareproducts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Share Products</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>limit, offset</td>
</tr>
</table>
<p>Example Requests:</p>
<div class=apiClick>shareproducts</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/products/share?limit=10&offset=0</code>
<code class="method-response">
{
"totalFilteredRecords": 1,
"pageItems": [{
"id": 1,
"name": "Share Product",
"shortName": "Share Product Description",
"totalShares": 100
}]
}
</code>
</div>
</div>
<a id="savingsproducts_create" name="savingsproducts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Savings Product</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>name, shortName, description, currencyCode, digitsAfterDecimal,inMultiplesOf, nominalAnnualInterestRate,
interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType,accountingRule</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields for Cash based accounting (accountingRule = 2)</div></td></tr>
<tr class=alt>
<td>savingsReferenceAccountId, savingsControlAccountId, interestOnSavingsAccountId, incomeFromFeeAccountId, transfersInSuspenseAccountId, incomeFromPenaltyAccountId</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>minRequiredOpeningBalance, lockinPeriodFrequency, lockinPeriodFrequencyType, withdrawalFeeForTransfers, paymentChannelToFundSourceMappings, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, charges, allowOverdraft, overdraftLimit, minBalanceForInterestCalculation,withHoldTax,taxGroupId</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsproducts</code>
<code class="method-request">POST savingsproducts
Content-Type: application/json
Request Body:
{
"name": "Passbook Savings",
"shortName": "PBSV",
"description": "Daily compounding using Daily Balance, 5% per year, 365 days in year",
"currencyCode": "USD",
"digitsAfterDecimal": 2,
"inMultiplesOf": 0,
"locale": "en",
"nominalAnnualInterestRate": "5.0",
"interestCompoundingPeriodType": 1,
"interestPostingPeriodType":4,
"interestCalculationType": 1,
"interestCalculationDaysInYearType": "365",
"accountingRule":"1",
"charges":[{"id":"1"}]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
<code class="method-request">POST savingsproducts
Content-Type: application/json
Request Body:
{
"locale": "en",
"name": "New Passbook Savings ",
"shortName": "NPBS",
"description": "A savings product",
"currencyCode": "USD",
"digitsAfterDecimal": "2",
"inMultiplesOf": 0,
"nominalAnnualInterestRate": "15",
"interestCompoundingPeriodType": "1",
"interestPostingPeriodType": "4",
"interestCalculationType": "1",
"interestCalculationDaysInYearType": "365",
"minRequiredOpeningBalance": "50",
"allowOverdraft":true,
"overdraftLimit":5000,
"minBalanceForInterestCalculation":5000,
"minRequiredBalance":20,
"enforceMinRequiredBalance":true,
"lockinPeriodFrequency": "4",
"lockinPeriodFrequencyType": "1",
"withdrawalFeeForTransfers":false,
"accountingRule": "2",
"charges":[{"id":"1"},{"id":3}]
"savingsReferenceAccountId": "16",
"transfersInSuspenseAccountId": "16",
"savingsControlAccountId": "15",
"interestOnSavingsAccountId": "18",
"incomeFromFeeAccountId": "4",
"incomeFromPenaltyAccountId": "4",
"feeToIncomeAccountMappings":[
{
"chargeId":"6",
"incomeAccountId":"16"
}
],
"penaltyToIncomeAccountMappings":[
{
"chargeId":"4",
"incomeAccountId":"15"
}
],
"paymentChannelToFundSourceMappings": [
{
"paymentTypeId": "14",
"fundSourceAccountId": "2"
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsproducts_retrieve" name="savingsproducts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Savings Product</h4>
<p>Example Requests: </p>
<div class=apiClick>savingsproducts/1</div>
<br><br>
<div class=apiClick>savingsproducts/1?template=true</div>
<br><br>
<div class=apiClick>savingsproducts/1?fields=name,description</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsproducts/1</code>
<code class="method-response">
{
"id": 1,
"name": "savings product",
"shortName": "sa1",
"description": "gtasga",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5.000000,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"withdrawalFeeForTransfers": false,
"accountingRule": {
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
},
"accountingMappings": {
"savingsReferenceAccount": {
"id": 12,
"name": "savings ref",
"glCode": "20"
},
"incomeFromFeeAccount": {
"id": 16,
"name": "income from savings fee",
"glCode": "24"
},
"incomeFromPenaltyAccount": {
"id": 17,
"name": "income from sav penalites",
"glCode": "25"
},
"interestOnSavingsAccount": {
"id": 15,
"name": "interest on savings",
"glCode": "23"
},
"savingsControlAccount": {
"id": 13,
"name": "savings ref tool kit",
"glCode": "21"
},
"transfersInSuspenseAccount": {
"id": 14,
"name": "saving transfers",
"glCode": "22"
}
},
"paymentChannelToFundSourceMappings": [
{
"paymentType": {
"id": 10,
"name": "check"
},
"fundSourceAccount": {
"id": 12,
"name": "savings ref",
"glCode": "20"
}
}
],
"feeToIncomeAccountMappings": [
{
"charge": {
"id": 11,
"name": "sav charge",
"active": false,
"penalty": false
},
"incomeAccount": {
"id": 16,
"name": "income from savings fee",
"glCode": "24"
}
}
],
"penaltyToIncomeAccountMappings": [
{
"charge": {
"id": 12,
"name": "sav 2",
"active": false,
"penalty": true
},
"incomeAccount": {
"id": 17,
"name": "income from sav penalites",
"glCode": "25"
}
}
],
"charges": []
}
</code>
</div>
</div>
<a id="savingsproducts_update" name="savingsproducts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Savings Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/savingsproducts/{productId}</code>
<code class="method-request">POST savingsproducts/1
Content-Type: application/json
Request Body:
{
"description": "Passbook Savings Lite.",
"locale": "en",
"interestRate": "5.73"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"description": "Passbook Savings Lite.",
"interestRate": 5.73,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="savingsproducts_delete" name="savingsproducts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Savings Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://Domain Name/api/v1/savingsproducts/{productId}
</code>
<code class="method-request">
DELETE savingsproducts/1
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsproducts_list" name="savingsproducts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Savings Products</h4>
<p>Example Requests:</p>
<div class=apiClick>savingsproducts</div>
<br><br>
<div class=apiClick>savingsproducts?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsproducts</code>
<code class="method-response">
[
{
"id": 1,
"name": "Savings product",
"shortName": "sa1",
"description": "gtasga",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5.000000,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"withdrawalFeeForTransfers": false,
"accountingRule": {
"id": 2,
"code": "accountingRuleType.cash",
"value": "CASH BASED"
}
}
] </code>
</div>
</div>
<!-- end of saving products api docs -->
<!-- start of fixed deposit products api docs -->
<a id="fdproducts" name="fdproducts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Fixed Deposit Product:</h3>
<p>This is one of the advanced term deposit product offered by MFI's. The Fixed Deposit Products (aka FD) product offerings are modeled using this API.</p>
<p>The FD products are deposit accounts which are held for a fixed term – like 1 year, 2 years etc.</p>
<p>When creating fixed deposit accounts, the details from the fixed deposit product are used to auto fill details of the fixed deposit account application process.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>name</td></tr>
<tr><td class=fielddesc>The name of the product offering.</td></tr>
<tr class=alt><td>shortName</td></tr>
<tr><td class=fielddesc>Shortname associated with a fixed deposit product. <br>
An abbreviated version of the name, used in reports or menus where space is limited.
</td></tr>
<tr class=alt><td>description</td></tr>
<tr><td class=fielddesc>A description of the product offering.</td></tr>
<tr class=alt><td>currencyCode</td></tr>
<tr><td class=fielddesc>Three letter ISO code representing currency.</td></tr>
<tr class=alt><td>digitsAfterDecimal</td></tr>
<tr><td class=fielddesc>Override the currency default value for digitsAfterDecimal.</td></tr>
<tr class=alt><td>inMultiplesOf</td></tr>
<tr><td class=fielddesc>Override the default value for rounding currency to multiples of provided value.</td></tr>
<tr class=alt><td>interestCompoundingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is compounded. 1=Daily, 4=Monthly (at end of month)</td></tr>
<tr class=alt><td>interestPostingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is posted or credited to fixed deposit account. 4=Monthly (at end of month), 5=Quarterly (at end of quarter, 31st Mar, 30th Jun, 30th Sep, 31st Dec)</td></tr>
<tr class=alt><td>interestCalculationType</td></tr>
<tr><td class=fielddesc>The interest calculation method used: 1=Daily Balance or 2=Average Daily Balance</td></tr>
<tr class=alt><td>interestCalculationDaysInYearType</td></tr>
<tr><td class=fielddesc>The setting for number of days in year to use: 360=360 Days, 365=365 Days</td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the fixed deposit account is 'locked in' and premature closure is not allowed. e.g. <b>2</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequency</i> to indicate the length of time that the fixed deposit account is 'locked in' and premature closure is not allowed. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 2 <b>Months</b></td></tr>
<tr class=alt><td>minDepositTerm</td></tr>
<tr><td class=fielddesc>This is used along with <i>minDepositTermTypeId</i> to define allowed minimum deposit term for creating a fixed deposit account using this product. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>minDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>minDepositTerm</i> to define allowed minimum deposit term for creating a fixed deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>maxDepositTerm</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTermTypeId</i> to define allowed maximum deposit term for creating a fixed deposit account using this product. e.g. <b>3</b> Years</td></tr>
<tr class=alt><td>maxDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTerm</i> to define allowed maximum deposit term for creating a fixed deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 3 <b>Years</b>
</td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTerm</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTermTypeId</i> to indicate the allowed deposit periods after minimum deposit period. e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months. </td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTerm</i> to indicate the allowed deposit periods after minimum deposit period. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months.
</td>
</tr>
<tr class=alt><td>preClosurePenalApplicable</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: expects boolean value true/false, If provided as true then must provide <i>preClosurePenalInterest</i> and <i>preClosurePenalInterestOnTypeId</i>. </td>
</tr>
<tr class=alt><td>preClosurePenalInterest</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterestOnTypeId</i> to apply a penalalty on top of applicable interest rate for Pre-mature closure of accounts. e.g. “1%” means 1% less than the interest rate applicable.</td>
</tr>
<tr class=alt><td>preClosurePenalInterestOnTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterest</i> to decide what should be the applicable interest rate to which penalalty can be applied on Pre-mature closure of accounts. 1=Whole Term, 2=Till Premature withdrawal e.g. “1%” means 1% less than the interest rate applicable till premature withdrawal.</td>
</tr>
<tr class=alt><td>accountingRule</td></tr>
<tr>
<td class=fielddesc>Specifies if accounting is enabled for the particular
product and the type of the accounting rule to be used
<span>Example Values:</span>1=NONE,2=CASH_BASED</td>
</tr>
<tr class=alt><td>withHoldTax</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets an indicator for applying withhold tax on interest posting for savings account </td></tr>
<tr class=alt><td>taxGroupId</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If withhold tax set as true, with hold tax will be applied as per the tax group provided </td></tr>
</table>
</div>
</div>
<a id="fdproducts_create" name="fdproducts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Fixed Deposit Product</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>name, shortName, description, currencyCode, digitsAfterDecimal,inMultiplesOf,
interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, minDepositTerm, minDepositTermTypeId, accountingRule</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields for Cash based accounting (accountingRule = 2)</div></td></tr>
<tr class=alt>
<td>savingsReferenceAccountId, savingsControlAccountId, interestOnSavingsAccountId, incomeFromFeeAccountId, transfersInSuspenseAccountId, incomeFromPenaltyAccountId </td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>lockinPeriodFrequency, lockinPeriodFrequencyType, maxDepositTerm, maxDepositTermTypeId, inMultiplesOfDepositTerm, inMultiplesOfDepositTermTypeId, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnTypeId, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, charges, charts, , withHoldTax, taxGroupId</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositproducts</code>
<code class="method-request">POST fixeddepositproducts
Content-Type: application/json
Request Body:
{
"name": "Fixed deposit product",
"shortName": "FD01",
"description": "Daily compounding using Daily Balance, 5% per year, 365 days in year",
"currencyCode": "USD",
"digitsAfterDecimal": 2,
"inMultiplesOf": 0,
"locale": "en",
"interestCompoundingPeriodType": 1,
"interestPostingPeriodType":4,
"interestCalculationType": 1,
"interestCalculationDaysInYearType": "365",
"accountingRule":"1",
"preClosurePenalApplicable":"true",
"preClosurePenalInterest":"1.75",
"preClosurePenalInterestOnTypeId":1,
"minDepositTerm":1,
"minDepositTermTypeId":1,
"maxDepositTerm":5,
"maxDepositTermTypeId":3,
"charts":[
{
"fromDate": "01 Jan 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"dateFormat":"dd MMMM yyyy",
"chartSlabs":[
{
"description":"from 0 to 90 days",
"periodType":"1",
"fromPeriod":"0",
"toPeriod":"90",
"annualInterestRate":"4.5"
}
]
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="fdproducts_retrieve" name="fdproducts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Fixed Deposit Product</h4>
<p>Example Requests: </p>
<div class=apiClick>fixeddepositproducts/1</div>
<br><br>
<div class=apiClick>fixeddepositproducts/1?template=true</div>
<br><br>
<div class=apiClick>fixeddepositproducts/1?fields=name,description</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositproducts/1</code>
<code class="method-response">
{
"id": 1,
"name": "Fixed deposit product",
"shortName": "FD01",
"description": "Daily compounding using Daily Balance, 5% per year, 365 days in year",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"accountingMappings": {
"savingsReferenceAccount": {
"id": 12,
"name": "savings ref",
"glCode": "20"
},
"incomeFromFeeAccount": {
"id": 16,
"name": "income from savings fee",
"glCode": "24"
},
"incomeFromPenaltyAccount": {
"id": 17,
"name": "income from sav penalites",
"glCode": "25"
},
"interestOnSavingsAccount": {
"id": 15,
"name": "interest on savings",
"glCode": "23"
},
"savingsControlAccount": {
"id": 13,
"name": "savings ref tool kit",
"glCode": "21"
},
"transfersInSuspenseAccount": {
"id": 14,
"name": "saving transfers",
"glCode": "22"
}
},
"feeToIncomeAccountMappings": [
{
"charge": {
"id": 11,
"name": "sav charge",
"active": false,
"penalty": false
},
"incomeAccount": {
"id": 16,
"name": "income from savings fee",
"glCode": "24"
}
}
],
"penaltyToIncomeAccountMappings": [
{
"charge": {
"id": 12,
"name": "sav 2",
"active": false,
"penalty": true
},
"incomeAccount": {
"id": 17,
"name": "income from sav penalites",
"glCode": "25"
}
}
],
"preClosurePenalApplicable":"true",
"preClosurePenalInterest":"1.75",
"preClosurePenalInterestOnType": {
"id": 1,
"code": "preClosurePenalInterestOnType.wholeTerm",
"value": "Whole term"
},
"minDepositTerm":1,
"minDepositTermType": {
"id": 1,
"code": "deposit.term.savingsPeriodFrequencyType.weeks",
"value": "Weeks"
},
"maxDepositTerm":5,
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"activeChart": {
"id": 8,
"fromDate": [
2014,
1,
1
],
"savingsProductId": 8,
"savingsProductName": "Fixed deposit product",
"chartSlabs": [
{
"id": 18,
"description": "from 0 to 90 days",
"periodType": {
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
"fromPeriod": 0,
"toPeriod": 90,
"annualInterestRate": 4.5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
],
"periodTypes": [
{
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
{
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "interestChartPeriodType.months",
"value": "Months"
},
{
"id": 3,
"code": "interestChartPeriodType.years",
"value": "Years"
}
]
}
}
</code>
</div>
</div>
<a id="fdproducts_update" name="fdproducts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Fixed Deposit Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/fixeddepositproducts/{productId}</code>
<code class="method-request">POST fixeddepositproducts/1
Content-Type: application/json
Request Body:
{
"description": "Fixed deposit product new offerings",
"locale": "en",
"minDepositTerm":5,
"minDepositTermTypeId":1,
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"description": "Fixed deposit product new offerings",
"minDepositTerm": 5
}
}
</code>
</div>
</div>
<a id="fdproducts_delete" name="fdproducts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Fixed Deposit Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://Domain Name/api/v1/fixeddepositdproducts/{productId}
</code>
<code class="method-request">
DELETE fixeddepositdproducts/1
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="fdproducts_list" name="fdproducts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Fixed Deposit Products</h4>
<p>Example Requests:</p>
<div class=apiClick>fixeddepositproducts</div>
<br><br>
<div class=apiClick>fixeddepositproducts?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositproducts</code>
<code class="method-response">
[
{
"id": 3,
"name": "FD01",
"shortName": "FD01",
"description": "FD01",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"preClosurePenalApplicable": false,
"minDepositTerm": 3,
"maxDepositTerm": 4,
"minDepositTermType": {
"id": 2,
"code": "deposit.term.savingsPeriodFrequencyType.months",
"value": "Months"
},
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"nominalAnnualInterestRate": 0,
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"accountingRule": {
"id": 1,
"code": "accountingRuleType.none",
"value": "NONE"
}
}
] </code>
</div>
</div>
<!-- end of fixed deposit products api docs -->
<!-- start of recurring deposit products api docs -->
<a id="rdproducts" name="rdproducts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Recurring Deposit Product:</h3>
<p>Recurring Deposits are a special kind of Term Deposits offered by MFI's. The Recurring Deposit Products (aka RD) product offerings are modeled using this API.</p>
<p>Recurring Deposits help people with regular incomes to deposit a fixed amount every month (specified recurring frequency) into their Recurring Deposit account.</p>
<p>When creating recurring deposit accounts, the details from the recurring deposit product are used to auto fill details of the recurring deposit account application process.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>name</td></tr>
<tr><td class=fielddesc>The name of the product offering.</td></tr>
<tr class=alt><td>shortName</td></tr>
<tr><td class=fielddesc>Shortname associated with a recurring deposit product. <br>
An abbreviated version of the name, used in reports or menus where space is limited.
</td></tr>
<tr class=alt><td>description</td></tr>
<tr><td class=fielddesc>A description of the product offering.</td></tr>
<tr class=alt><td>currencyCode</td></tr>
<tr><td class=fielddesc>Three letter ISO code representing currency.</td></tr>
<tr class=alt><td>digitsAfterDecimal</td></tr>
<tr><td class=fielddesc>Override the currency default value for digitsAfterDecimal.</td></tr>
<tr class=alt><td>inMultiplesOf</td></tr>
<tr><td class=fielddesc>Override the default value for rounding currency to multiples of provided value.</td></tr>
<tr class=alt><td>interestCompoundingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is compounded. 1=Daily, 4=Monthly (at end of month)</td></tr>
<tr class=alt><td>interestPostingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is posted or credited to recurring deposit account. 4=Monthly (at end of month), 5=Quarterly (at end of quarter, 31st Mar, 30th Jun, 30th Sep, 31st Dec)</td></tr>
<tr class=alt><td>interestCalculationType</td></tr>
<tr><td class=fielddesc>The interest calculation method used: 1=Daily Balance or 2=Average Daily Balance</td></tr>
<tr class=alt><td>interestCalculationDaysInYearType</td></tr>
<tr><td class=fielddesc>The setting for number of days in year to use: 360=360 Days, 365=365 Days</td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the recurring deposit account is 'locked in' and premature closure is not allowed. e.g. <b>2</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
e.g. 2 <b>Months</b></td></tr>
<tr class=alt><td>recurringDepositFrequency</td></tr>
<tr><td class=fielddesc>The frequency for depositing a fixed amount to recurring deposit account.</td></tr>
<tr class=alt><td>recurringDepositFrequencyTypeId</td></tr>
<tr>
<td class=fielddesc>Used along with <i>recurringDepositFrequency</i> to define frequency for depositing a fixed amount to recurring deposit account. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. deposit every 1 <b>Months</b>
</td>
</tr>
<tr class=alt><td>minDepositTerm</td></tr>
<tr><td class=fielddesc>This is used along with <i>minDepositTermTypeId</i> to define allowed minimum deposit term for creating a recurring deposit account using this product. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>minDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>minDepositTerm</i> to define allowed minimum deposit term for creating a recurring deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>maxDepositTerm</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTermTypeId</i> to define allowed maximum deposit term for creating a recurring deposit account using this product. e.g. <b>3</b> Years</td></tr>
<tr class=alt><td>maxDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTerm</i> to define allowed maximum deposit term for creating a recurring deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 3 <b>Years</b>
</td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTerm</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTermTypeId</i> to indicate the allowed deposit periods after minimum deposit period. e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months. </td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTerm</i> to indicate the allowed deposit periods after minimum deposit period. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months.
</td>
</tr>
<tr class=alt><td>preClosurePenalApplicable</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: expects boolean value true/false, If provided as true then must provide <i>preClosurePenalInterest</i> and <i>preClosurePenalInterestOnTypeId</i>. </td>
</tr>
<tr class=alt><td>preClosurePenalInterest</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterestOnTypeId</i> to apply a penalalty on top of applicable interest rate for Pre-mature closure of accounts. e.g. “1%” means 1% less than the interest rate applicable.</td>
</tr>
<tr class=alt><td>preClosurePenalInterestOnTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterest</i> to decide what should be the applicable interest rate to which penalalty can be applied on Pre-mature closure of accounts. 1=Whole Term, 2=Till Premature withdrawal e.g. “1%” means 1% less than the interest rate applicable till premature withdrawal.</td>
</tr>
<tr class=alt><td>accountingRule</td></tr>
<tr>
<td class=fielddesc>Specifies if accounting is enabled for the particular
product and the type of the accounting rule to be used
<span>Example Values:</span>1=NONE,2=CASH_BASED</td>
</tr>
<tr class=alt><td>withHoldTax</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets an indicator for applying withhold tax on interest posting for savings account </td></tr>
<tr class=alt><td>taxGroupId</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If withhold tax set as true, with hold tax will be applied as per the tax group provided </td></tr>
</table>
</div>
</div>
<a id="rdproducts_create" name="rdproducts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Recurring Deposit Product</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt>
<td>name, shortName, description, currencyCode, digitsAfterDecimal,inMultiplesOf,
interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, minDepositTerm, minDepositTermTypeId, recurringDepositFrequency, recurringDepositFrequencyTypeId, accountingRule, depositAmount </td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields for Cash based accounting (accountingRule = 2)</div></td></tr>
<tr class=alt>
<td>savingsReferenceAccountId, savingsControlAccountId, interestOnSavingsAccountId, incomeFromFeeAccountId, transfersInSuspenseAccountId, incomeFromPenaltyAccountId</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>lockinPeriodFrequency, lockinPeriodFrequencyType, maxDepositTerm, maxDepositTermTypeId, inMultiplesOfDepositTerm, inMultiplesOfDepositTermTypeId, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnTypeId, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, charges, charts, minDepositAmount, maxDepositAmount, withHoldTax, taxGroupId</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositproducts</code>
<code class="method-request">POST recurringdepositproducts
Content-Type: application/json
Request Body:
{
"name": "Recurring deposit product",
"shortName": "RD01",
"description": "Daily compounding using Daily Balance, 5% per year, 365 days in year",
"currencyCode": "USD",
"digitsAfterDecimal": 2,
"inMultiplesOf": 0,
"locale": "en",
"interestCompoundingPeriodType": 1,
"interestPostingPeriodType":4,
"interestCalculationType": 1,
"interestCalculationDaysInYearType": "365",
"accountingRule":"1",
"recurringDepositFrequency":1,
"recurringDepositFrequencyTypeId":2,
"preClosurePenalApplicable":"true",
"preClosurePenalInterest":"1.75",
"preClosurePenalInterestOnTypeId":1,
"minDepositTerm":1,
"minDepositTermTypeId":1,
"maxDepositTerm":5,
"maxDepositTermTypeId":3,
depositAmount: "10000",
minDepositAmount: "100",
maxDepositAmount: "1000000",
"charts":[
{
"fromDate": "01 Jan 2014",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"dateFormat":"dd MMMM yyyy",
"chartSlabs":[
{
"description":"from 0 to 90 days",
"periodType":"1",
"fromPeriod":"0",
"toPeriod":"90",
"annualInterestRate":"4.5"
}
]
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="rdproducts_retrieve" name="rdproducts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Recurring Deposit Product</h4>
<p>Example Requests: </p>
<div class=apiClick>recurringdepositproducts/1</div>
<br><br>
<div class=apiClick>recurringdepositproducts/1?template=true</div>
<br><br>
<div class=apiClick>recurringdepositproducts/1?fields=name,description</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/recurringdepositproducts/1</code>
<code class="method-response">
{
"id": 1,
"name": "Recurring deposit product",
"shortName": "RD01",
"description": "Daily compounding using Daily Balance, 5% per year, 365 days in year",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"accountingMappings": {
"savingsReferenceAccount": {
"id": 12,
"name": "savings ref",
"glCode": "20"
},
"incomeFromFeeAccount": {
"id": 16,
"name": "income from savings fee",
"glCode": "24"
},
"incomeFromPenaltyAccount": {
"id": 17,
"name": "income from sav penalites",
"glCode": "25"
},
"interestOnSavingsAccount": {
"id": 15,
"name": "interest on savings",
"glCode": "23"
},
"savingsControlAccount": {
"id": 13,
"name": "savings ref tool kit",
"glCode": "21"
},
"transfersInSuspenseAccount": {
"id": 14,
"name": "saving transfers",
"glCode": "22"
}
},
"feeToIncomeAccountMappings": [
{
"charge": {
"id": 11,
"name": "sav charge",
"active": false,
"penalty": false
},
"incomeAccount": {
"id": 16,
"name": "income from savings fee",
"glCode": "24"
}
}
],
"penaltyToIncomeAccountMappings": [
{
"charge": {
"id": 12,
"name": "sav 2",
"active": false,
"penalty": true
},
"incomeAccount": {
"id": 17,
"name": "income from sav penalites",
"glCode": "25"
}
}
],
"recurringDepositFrequency":1,
"recurringDepositFrequencyType": {
"id": 2,
"code": "recurring.deposit.savingsPeriodFrequencyType.months",
"value": "Months"
},
"minDepositAmount":100.00,
"depositAmount":10000.00,
"maxDepositAmount":1000000.00,
"preClosurePenalApplicable":"true",
"preClosurePenalInterest":"1.75",
"preClosurePenalInterestOnType": {
"id": 1,
"code": "preClosurePenalInterestOnType.wholeTerm",
"value": "Whole term"
},
"minDepositTerm":1,
"minDepositTermType": {
"id": 1,
"code": "deposit.term.savingsPeriodFrequencyType.weeks",
"value": "Weeks"
},
"maxDepositTerm":5,
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"activeChart": {
"id": 8,
"fromDate": [
2014,
1,
1
],
"savingsProductId": 8,
"savingsProductName": "Fixed deposit product",
"chartSlabs": [
{
"id": 18,
"description": "from 0 to 90 days",
"periodType": {
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
"fromPeriod": 0,
"toPeriod": 90,
"annualInterestRate": 4.5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
],
"periodTypes": [
{
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
{
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "interestChartPeriodType.months",
"value": "Months"
},
{
"id": 3,
"code": "interestChartPeriodType.years",
"value": "Years"
}
]
}
}
</code>
</div>
</div>
<a id="rdproducts_update" name="rdproducts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Recurring Deposit Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/recurringdepositproducts/{productId}</code>
<code class="method-request">POST recurringdepositproducts/1
Content-Type: application/json
Request Body:
{
"description": "Recurring deposit product new offerings",
"locale": "en",
"minDepositTerm":5,
"minDepositTermTypeId":1,
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"description": "Recurring deposit product new offerings",
"minDepositTerm": 5
}
}
</code>
</div>
</div>
<a id="rdproducts_delete" name="rdproducts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Recurring Deposit Product</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://Domain Name/api/v1/recurringdepositdproducts/{productId}
</code>
<code class="method-request">
DELETE recurringdepositdproducts/1
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="rdproducts_list" name="rdproducts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Recuring Deposit Products</h4>
<p>Example Requests:</p>
<div class=apiClick>recurringdepositproducts</div>
<br><br>
<div class=apiClick>recurringdepositproducts?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/recurringdepositproducts</code>
<code class="method-response">
[
{
"id": 3,
"name": "RD01",
"shortName": "RD01",
"description": "RD01",
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"recurringDepositFrequency":1,
"recurringDepositFrequencyType": {
"id": 2,
"code": "recurring.deposit.savingsPeriodFrequencyType.months",
"value": "Months"
},
"preClosurePenalApplicable": false,
"minDepositTerm": 3,
"maxDepositTerm": 4,
"minDepositTermType": {
"id": 2,
"code": "deposit.term.savingsPeriodFrequencyType.months",
"value": "Months"
},
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"accountingRule": {
"id": 1,
"code": "accountingRuleType.none",
"value": "NONE"
}
}
] </code>
</div>
</div>
<!-- end of fixed deposit products api docs -->
<!-- start of share accounts api doc-->
<a id="shareaccounts" name="shareaccounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Share Account:</h2>
<p>Share accounts are instances of a praticular share product created for an individual.
An application process around the creation of accounts is also supported.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Starting State</td>
<td class="fineractHeading2">Action</td>
<td class="fineractHeading2">Resultant State</td>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td>Submit</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Reject</td>
<td>Closed - Rejected</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Approve</td>
<td>Approved</td>
</tr>
<tr>
<td>Approved</td>
<td>Undo Approval</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Approved</td>
<td>Activate</td>
<td>Active</td>
</tr>
</tbody>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>clientId</td></tr>
<tr><td class=fielddesc>The client you are creating the share account for. <i>clientId</i> must be provided.</td></tr>
<tr class=alt><td>productId</td></tr>
<tr><td class=fielddesc>The id of the product used for this share account. The share account <b>inherits the selected currency</b> of the product and <b>possibly other details if not overridden</b> in the share account creation request.</td></tr>
<tr class=alt><td>accountNo</td></tr>
<tr><td class=fielddesc>The account no. associated with this account. Is auto generated if not provided at creation time.</td></tr>
<tr class=alt><td>externalId</td></tr>
<tr><td class=fielddesc>A place to put an external reference for this share account useful in migrations e.g. The ID another system uses. If provided, it must be unique.</td></tr>
<tr class=alt><td>submittedOnDate</td></tr>
<tr><td class=fielddesc><i>submittedOnDate</i> must be provided when initially creating share account application. <i>locale</i> and <i>dateFormat</i> parameters must be provided with this.</td></tr>
<tr class=alt><td>savingsAccountId</td></tr>
<tr><td class=fielddesc>The saving account id in which dividend amount should be posted. </td></tr>
<tr class=alt><td>minimumActivePeriod</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>minimumActivePeriodFrequencyType</i> to indicate the length of time that the share account for considering dividends. e.g. <b>60</b> Days</td></tr>
<tr class=alt><td>minimumActivePeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>minimumActivePeriod</i> to indicate the length of time that the share account for considering dividends. 0=Days
e.g. 60 <b>Days</b></td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the shares is 'locked in' and redeems are not allowed. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequency</i> to indicate the length of time that the shares is 'locked in' and redeems are not allowed. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b></td></tr>
<tr class=alt><td>applicationDate</td></tr>
<tr><td class=fielddesc>Application date on which the first shares purchase should be considerd.</td></tr>
<tr class=alt><td>requestedShares</td></tr>
</table>
</div>
</div>
<a id="shareaccount_template" name="shareaccount_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Share Account Template:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>clientId</dt>
<dd>Integer <span>mandatory</span></dd>
<dt>productId</dt>
<dd>Integer <span>optional</span></dd>
<dd>If entered, productId, productName and selectedProduct fields are returned.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>accounts/share/template?clientId=1</div>
<br><br>
<div class=apiClick>accounts/share/template?clientId=1&productId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounts/share/template?clientId={clientId}</code>
<code class="method-response">
{
"clientId": 7,
"clientName": "Client Name",
"productOptions": [{
"id": 1,
"name": "Share Product",
"shortName": "SP",
"totalShares": 100
}]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounts/share/template?clientId={clientId}&productId={productId}</code>
<code class="method-response">
{
"clientId": 7,
"clientName": "Client Name",
"defaultShares": 100,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 100,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"currentMarketPrice": 5.00,
"charges": [{
"chargeId": 20,
"name": "Share Account Activation Flat",
"chargeTimeType": {
"id": 13,
"code": "chargeTimeType.activation",
"value": "Share Account Activate"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"amount": 1.000000,
}],
"lockinPeriodFrequencyTypeOptions": [{
"id": 0,
"code": "savings.lockin.sharePeriodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "savings.lockin.sharePeriodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "savings.lockin.sharePeriodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "savings.lockin.sharePeriodFrequencyType.years",
"value": "Years"
}],
"minimumActivePeriodFrequencyTypeOptions": [{
"id": 0,
"code": "savings.lockin.sharePeriodFrequencyType.days",
"value": "Days"
}],
"clientSavingsAccounts": [{
"id": 13,
"accountNo": "000000013",
"depositType": {
"id": 100,
"code": "depositAccountType.savingsDeposit",
"value": "Savings"
}
}]
}
</code>
</div>
</div>
<a id="shareaccount_create" name="shareaccount_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Submit new share application</h2>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>clientId, productId, submittedDate, savingsAccountId, requestedShares, applicationDate</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>accountNo, externalId</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Inherited from Product (if not provided)</div></td></tr>
<tr class=alt><td> minimumActivePeriod, minimumActivePeriodFrequencyType, lockinPeriodFrequency, lockinPeriodFrequencyType</td>
</tr>
</table>
</div>
<div class="method-example">
<p>Minimal request: accountNo auto generated, remaining details inherited from savings product.</p>
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share</code>
<code class="method-request">POST savingsaccount
Content-Type: application/json
Request Body:
{
"clientId": "7",
"productId": 1,
"requestedShares": 100,
"externalId": "1",
"submittedDate": "01 May 2016",
"minimumActivePeriod": "1",
"minimumActivePeriodFrequencyType": 0,
"lockinPeriodFrequency": "1",
"lockinPeriodFrequencyType": 0,
"applicationDate": "01 May 2016",
"allowDividendCalculationForInactiveClients": true,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"charges": [{
"chargeId": 20,
"amount": 1
},
{
"chargeId": 21,
"amount": 0.5
},
{
"chargeId": 23,
"amount": 2
}],
"savingsAccountId": 13
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="shareaccount_approve" name="shareaccount_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Approve share application</h2>
<p>Approves share application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=approve</code>
<code class="method-request">POST shareaccount/1?command=approve
Content-Type: application/json
Request Body:
{
"note":"notes",
"approvedDate":"01 May 2016",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 200,
"code": "shareAccountStatusType.approved",
"value": "Approved",
"submittedAndPendingApproval": false,
"approved": true,
"rejected": false,
"active": false,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedDate": "01 May 2016"
}
}
</code>
</div>
</div>
<a id="shareaccount_undoapproval" name="shareaccount_undoapproval" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Undo approval share application</h2>
<p>Will move 'approved' share application back to 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=undoApproval</code>
<code class="method-request">POST shareaccount/1?command=undoApproval
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 100,
"code": "shareAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"active": false,
"closed": false
},
"approvedOnDate": ""
}
}
</code>
</div>
</div>
<a id="shareaccount_reject" name="shareaccount_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Reject share application</h2>
<p>Rejects share application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=reject</code>
<code class="method-request">POST shareaccount/1?command=reject
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedDate": "03 March 2013"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 500,
"code": "shareAccountStatusType.rejected",
"value": "Rejected",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": true,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedDate": "03 March 2013",
"closedDate": "03 March 2013"
}
}
</code>
</div>
</div>
<a id="shareaccount_activate" name="shareaccount_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Activate a share account</h2>
<p>Results in an approved share application being converted into an 'active' share account.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=activate</code>
<code class="method-request">POST shareaccount/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedDate": "01 March 2013"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "shareAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"active": true,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedDate": "01 March 2013"
}
}
</code>
</div>
</div>
<a id="shareaccount_close" name="shareaccount_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Close a share account</h2>
<p>Results in an Activated share application being converted into an 'closed' share account.</p>
<p><i>closedDate</i> is closure date of share account</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>dateFormat,locale,closedDate</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=close</code>
<code class="method-request">POST shareaccount/5?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedDate":"26 August 2013",
"note":"close note"
}
</code>
<code class="method-response">
{
"resourceId":5,
"changes":{
"status":{
"id":600,
"code":"shareAccountStatusType.closed",
"value":"Closed",
"submittedAndPendingApproval":false,
"approved":false,
"rejected":false,
"active":false,
"closed":true
},
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"closedOnDate":"26 August 2013",
"note":"close note"
}
}
</code>
</div>
</div>
<a id="shareaccount_applyadditionalshares" name="shareaccount_applyadditionalshares" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Apply additional shares on a share account</h2>
<p><i>requestedDate</i> is requsted date of share purchase</p>
<p><i>requestedShares</i> is number of shares to be purchase</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>dateFormat,locale,requestedDate, requestedShares</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=applyadditionalshares</code>
<code class="method-request">POST shareaccount/5?command=applyadditionalshares
Content-Type: application/json
Request Body:
{
"requestedDate": "04 May 2016",
"requestedShares": "10",
"locale": "en",
"dateFormat": "dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId":5,
}
</code>
</div>
</div>
<a id="shareaccount_approveadditionalshares" name="shareaccount_approveadditionalshares" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Approve additional shares request on a share account</h2>
<p><i>requestedShares</i> is Share purchase transaction ids</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>requestedShares</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=approveadditionalshares</code>
<code class="method-request">POST shareaccount/5?command=approveadditionalshares
Content-Type: application/json
Request Body:
{
"requestedShares": [{
"id": 34
}]
}
</code>
<code class="method-response">
{
"resourceId":5,
}
</code>
</div>
</div>
<a id="shareaccount_rejectadditionalshares" name="shareaccount_rejectadditionalshares" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Reject additional shares request on a share account</h2>
<p><i>requestedShares</i> is Share purchase transaction ids</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>requestedShares</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=rejectadditionalshares</code>
<code class="method-request">POST shareaccount/5?command=rejectadditionalshares
Content-Type: application/json
Request Body:
{
"requestedShares":[{"id":35}]
}
</code>
<code class="method-response">
{
"resourceId":5,
}
</code>
</div>
</div>
<a id="shareaccount_redeem" name="shareaccount_redeem" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Redeem shares on a share account</h2>
<p>Results redeem some/all shares from share account.</p>
<p><i>requestedDate</i> is requsted date of shares redeem</p>
<p><i>requestedShares</i> is number of shares to be redeemed</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>dateFormat,locale,requestedDate,requestedShares</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounts/share/{shareAccountId}?command=redeemshares</code>
<code class="method-request">POST shareaccount/5?command=redeemshares
Content-Type: application/json
Request Body:
{
"requestedDate": "04 May 2016",
"requestedShares": "4",
"locale": "en",
"dateFormat": "dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId":5,
}
</code>
</div>
</div>
<a id="shareaccount_list" name="shareaccount_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>List share applications/accounts</h2>
<p>Example Requests:</p>
<div class=apiClick>shareaccount</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounts/share</code>
<code class="method-response">
{
"totalFilteredRecords": 1,
"pageItems": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Client Name",
"productId": 1,
"productName": "Share Product Name",
"status": {
"id": 100,
"code": "shareAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"active": false,
"closed": false
},
"timeline": {
"submittedOnDate": [
2013,
3,
1
]
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"purchasedShares" : [
{"id":1,
"purchasedDate":"01 May 2013",
"numberOfShares": 10,
"purchasedPrice": 5
}
],
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
}
}
]
}
</code>
</div>
</div>
<a id="shareaccount_retrieve" name="shareaccount_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve a share application/account:</h2>
<p>Example Requests : </p>
<div class=apiClick>shareaccount/1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/accounts/share/{accountId}</code>
<code class="method-response">
{
"id": 2,
"accountNo": "000000002",
"savingsAccountNumber": "000000013",
"clientId": 7,
"clientName": "Client_FirstName_2KX8C Client_LastName_NWNG",
"productId": 1,
"productName": "Share Product",
"status": {
"id": 300,
"code": "shareAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"active": true,
"closed": false
},
"timeline": {
"submittedOnDate": [2016,
4,
1],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"approvedDate": [2016,
4,
1],
"approvedByUsername": "mifos",
"approvedByFirstname": "App",
"approvedByLastname": "Administrator",
"activatedDate": [2016,
4,
1]
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 100,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"summary": {
"id": 2,
"accountNo": "000000002",
"totalApprovedShares": 1,
"totalPendingForApprovalShares": 0,
"productId": 1,
"productName": "Conflux Share Product",
"status": {
"id": 300,
"code": "shareAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"active": true,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 100,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"timeline": {
"submittedOnDate": [2016,
4,
1],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"approvedDate": [2016,
4,
1],
"approvedByUsername": "mifos",
"approvedByFirstname": "App",
"approvedByLastname": "Administrator",
"activatedDate": [2016,
4,
1]
}
},
"purchasedShares": [{
"id": 6,
"accountId": 2,
"purchasedDate": [2016,
4,
1],
"numberOfShares": 10,
"purchasedPrice": 0.50,
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 500,
"code": "purchasedSharesType.purchased",
"value": "Purchase"
},
"amount": 5.05,
"chargeAmount": 0.05,
"amountPaid": 5.05
},
{
"id": 7,
"accountId": 2,
"purchasedDate": [2016,
4,
21],
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 700,
"code": "charge.payment",
"value": "Charge Payment"
},
"amount": 1.00,
"chargeAmount": 0,
"amountPaid": 1.00
},
{
"id": 8,
"accountId": 2,
"purchasedDate": [2016,
4,
2],
"numberOfShares": 5,
"purchasedPrice": 0.50,
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 600,
"code": "purchasedSharesType.redeemed",
"value": "Redeem"
},
"amount": 2.45,
"chargeAmount": 0.05,
"amountPaid": 2.45
},
{
"id": 9,
"accountId": 2,
"purchasedDate": [2016,
4,
3],
"numberOfShares": 10,
"purchasedPrice": 0.50,
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 500,
"code": "purchasedSharesType.purchased",
"value": "Purchase"
},
"amount": 5.05,
"chargeAmount": 0.05,
"amountPaid": 5.05
},
{
"id": 10,
"accountId": 2,
"purchasedDate": [2016,
4,
4],
"numberOfShares": 5,
"purchasedPrice": 0.50,
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 500,
"code": "purchasedSharesType.purchased",
"value": "Purchase"
},
"amount": 2.52,
"chargeAmount": 0.02,
"amountPaid": 2.52
},
{
"id": 11,
"accountId": 2,
"purchasedDate": [2016,
4,
5],
"numberOfShares": 15,
"purchasedPrice": 0.50,
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 600,
"code": "purchasedSharesType.redeemed",
"value": "Redeem"
},
"amount": 7.35,
"chargeAmount": 0.15,
"amountPaid": 7.35
},
{
"id": 31,
"accountId": 2,
"purchasedDate": [2016,
5,
4],
"numberOfShares": 4,
"purchasedPrice": 5.00,
"status": {
"id": 300,
"code": "purchasedSharesStatusType.approved",
"value": "Approved"
},
"type": {
"id": 600,
"code": "purchasedSharesType.redeemed",
"value": "Redeem"
},
"amount": 19.60,
"chargeAmount": 0.40,
"amountPaid": 19.60
}],
"savingsAccountId": 13,
"currentMarketPrice": 5.00,
"lockinPeriod": 1,
"lockPeriodTypeEnum": {
"id": 0,
"code": "savings.lockin.sharePeriodFrequencyType.days",
"value": "Days"
},
"minimumActivePeriod": 1,
"minimumActivePeriodTypeEnum": {
"id": 0,
"code": "savings.lockin.sharePeriodFrequencyType.days",
"value": "Days"
},
"allowDividendCalculationForInactiveClients": true,
"charges": [{
"id": 9,
"chargeId": 20,
"accountId": 2,
"name": "Share Account Activation Flat",
"chargeTimeType": {
"id": 13,
"code": "chargeTimeType.activation",
"value": "Share Account Activate"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 1.000000,
"amountPaid": 1.000000,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"amountOrPercentage": 1.000000,
"isActive": true
},
{
"id": 7,
"chargeId": 21,
"accountId": 2,
"name": "Share Purchase %",
"chargeTimeType": {
"id": 14,
"code": "chargeTimeType.sharespurchase",
"value": "Share Purchase"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"percentage": 1.000000,
"amountPercentageAppliedTo": 12.500000,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 0.120000,
"amountPaid": 0.120000,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"amountOrPercentage": 1.000000,
"isActive": true
},
{
"id": 8,
"chargeId": 23,
"accountId": 2,
"name": "Share Redeem %",
"chargeTimeType": {
"id": 15,
"code": "chargeTimeType.sharesredeem",
"value": "Share Redeem"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"percentage": 2.000000,
"amountPercentageAppliedTo": 30.000000,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 0.600000,
"amountPaid": 0.600000,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"amountOrPercentage": 2.000000,
"isActive": true
}],
"dividends": []
}
</code>
</div>
</div>
<a id="shareaccount_update" name="shareaccount_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Modify a share application</h2>
<p>Share application can only be modified when in 'Submitted and pending approval' state. Once the application is approved, the details cannot be changed using this method. Specific api endpoints will be created to allow change of interest detail such as rate, compounding period, posting period etc</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/accounts/share/{accountsId}</code>
<code class="method-request">PUT shareaccount/1
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"applicationDate": "01 April 2016",
"requestedShares": "20",
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"dateFormat": "dd MMMM yyyy",
"applicationDate": "01 April 2016",
"requestedShares": "20",
"locale": "en"
}
}
</code>
</div>
</div>
<!-- end of share accounts api doc
<!-- start of savings accounts api -->
<a id="savingsaccounts" name="savingsaccounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Savings Account:</h2>
<p>Savings accounts are instances of a praticular savings product created for an individual or group. An application process around the creation of accounts is also supported.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Starting State</td>
<td class="fineractHeading2">Action</td>
<td class="fineractHeading2">Resultant State</td>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td>Submit</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Reject</td>
<td>Closed - Rejected</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Withdrawn by Applicant</td>
<td>Closed - Withdrawn by Applicant</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Approve</td>
<td>Approved</td>
</tr>
<tr>
<td>Approved</td>
<td>Undo Approval</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Approved</td>
<td>Activate</td>
<td>Active</td>
</tr>
</tbody>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>clientId</td></tr>
<tr><td class=fielddesc>The client you are creating the savings account for. Either <i>clientId</i> or <i>groupId</i> must be provided.</td></tr>
<tr class=alt><td>groupId</td></tr>
<tr><td class=fielddesc>The group you are creating the savings account for. Either <i>clientId</i> or <i>groupId</i> must be provided.</td></tr>
<tr class=alt><td>productId</td></tr>
<tr><td class=fielddesc>The id of the product used for this savings account. The savings account <b>inherits the selected currency</b> of the product and <b>possibly other details if not overridden</b> in the savings account creation request.</td></tr>
<tr class=alt><td>accountNo</td></tr>
<tr><td class=fielddesc>The account no. associated with this loan. Is auto generated if not provided at creation time.</td></tr>
<tr class=alt><td>externalId</td></tr>
<tr><td class=fielddesc>A place to put an external reference for this savings account useful in migrations e.g. The ID another system uses. If provided, it must be unique.</td></tr>
<tr class=alt><td>submittedOnDate</td></tr>
<tr><td class=fielddesc><i>submittedOnDate</i> must be provided when initially creating savings account application. <i>locale</i> and <i>dateFormat</i> parameters must be provided with this.</td></tr>
<tr class=alt><td>nominalAnnualInterestRate</td></tr>
<tr><td class=fielddesc>The interest rate set for savings account e.g. <b>5</b>% Per year - It is always expressed as the Nominal APR.</td></tr>
<tr class=alt><td>interestCompoundingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is compounded. 1=Daily, 4=Monthly (at end of month)</td></tr>
<tr class=alt><td>interestPostingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is posted or credited to savings account. The actual crediting or posting transaction is date as occurring on the day after the end of the period. 4=Monthly (at end of month), 5=Quarterly (at end of quarter, 31st Mar, 30th Jun, 30th Sep, 31st Dec), 7=Annually (at end of calendar year 31st Dec)</td></tr>
<tr class=alt><td>interestCalculationType</td></tr>
<tr><td class=fielddesc>The interest calculation method used: 1=Daily Balance or 2=Average Daily Balance</td></tr>
<tr class=alt><td>interestCalculationDaysInYearType</td></tr>
<tr><td class=fielddesc>The setting for number of days in year to use: 360=360 Days, 365=365 Days</td></tr>
<tr class=alt><td>minRequiredOpeningBalance</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets the minimum deposit amount required to open a savings account e.g. <b>2,000</b></td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the savings account is 'locked in' and withdrawals are not allowed. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequency</i> to indicate the length of time that the savings account is 'locked in' and withdrawals are not allowed. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b></td></tr>
<tr class=alt><td>withdrawalFeeForTransfers</td></tr>
<tr><td class=fielddesc><b>Optional</b>: Used along with <i>withdrawalFeeAmount</i> to indicate whether the withdrawal fee should be applied on the account for account transfers .</td></tr>
<tr class=alt><td>allowOverdraft</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, depending on the value mark the savings account as overdraft account </td></tr>
<tr class=alt><td>overdraftLimit</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, sets the maximum allowed overdraft amount for a savings account e.g. <b>5,000</b> else set the limit as zero</td></tr>
<tr class=alt><td>withHoldTax</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If tax group provided at product level, will allow to Enable or disable withhold tax on interest posting for savings account </td></tr>
<tr class=alt><td>datatables</td></tr>
<tr><td class=fielddesc> Additional Mandatory Field if Entity-Datatable Check is enabled for the entity of type Savings. </td></tr>
</table>
</div>
</div>
<a id="savingsaccounts_template" name="savingsaccounts_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Savings Account Template:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>clientId</dt>
<dd>Integer <span>mandatory</span></dd>
<dt>productId</dt>
<dd>Integer <span>optional</span></dd>
<dd>If entered, productId, productName and selectedProduct fields are returned.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>savingsaccounts/template?clientId=1</div>
<br><br>
<div class=apiClick>savingsaccounts/template?clientId=1&productId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsaccounts/template?clientId={clientId}</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "small business",
"productOptions": [
{
"id": 1,
"name": "Passbook Savings"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsaccounts/template?clientId={clientId}&productId={productId}</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "small business",
"savingsProductId": 1,
"savingsProductName": "Passbook Savings",
"timeline": {},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"productOptions": [
{
"id": 1,
"name": "Passbook Savings"
}
],
"fieldOfficerOptions": [
{
"id": 3,
"firstname": "Mrs.",
"lastname": "loanofficerB1",
"displayName": "loanofficerB1, Mrs.",
"officeId": 2,
"officeName": "branch 1",
"isLoanOfficer": true
},
{
"id": 1,
"firstname": "Mr.",
"lastname": "loanofficerHO",
"displayName": "loanofficerHO, Mr.",
"officeId": 1,
"officeName": "branch 1",
"isLoanOfficer": true
}
],
"interestCompoundingPeriodTypeOptions": [
{
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
{
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
}
],
"interestPostingPeriodTypeOptions": [
{
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
{
"id": 5,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.quarterly",
"value": "Quarterly"
},
{
"id": 7,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.annual",
"value": "Annually"
}
],
"interestCalculationTypeOptions": [
{
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
{
"id": 2,
"code": "savingsInterestCalculationType.averagedailybalance",
"value": "Average Daily Balance"
}
],
"interestCalculationDaysInYearTypeOptions": [
{
"id": 360,
"code": "savingsInterestCalculationDaysInYearType.days360",
"value": "360 Days"
},
{
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
}
],
"lockinPeriodFrequencyTypeOptions": [
{
"id": 0,
"code": "savings.lockin.savingsPeriodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "savings.lockin.savingsPeriodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "savings.lockin.savingsPeriodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "savings.lockin.savingsPeriodFrequencyType.years",
"value": "Years"
}
],
"withdrawalFeeTypeOptions": [
{
"id": 1,
"code": "savingsWithdrawalFeesType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "savingsWithdrawalFeesType.percent.of.amount",
"value": "% of Amount"
}
],
"chargeOptions": [
{
"id": 4,
"name": "Savings charge 1",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 200,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "chargepaymentmode.regular"
}
},
{
"id": 5,
"name": "Savings charge 2",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 300,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "chargepaymentmode.regular"
}
},
{
"id": 6,
"name": "Annual fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50,
"chargeTimeType": {
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 7,
"name": "Quarterly fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5,
"chargeTimeType": {
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
},
"feeOnMonthDay": [
10,
5
],
"feeInterval": 4
}
],
"datatables": [{
"applicationTableName": "m_savings_account",
"registeredTableName": "Savings Address Enrichment",
"columnHeaderData": [{
"columnName": "savings_account_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Name",
"columnType": "varchar",
"columnLength": 25,
"columnDisplayType": "STRING",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "COUNTRY_cd_country details",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [{
"id": 17,
"value": "India",
"score": 0
}],
"columnCode": "COUNTRY"
}]
}]
}
</code>
</div>
</div>
<a id="savingsaccounts_create" name="savingsaccounts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Submit new savings application</h2>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>clientId or groupId, productId, submittedOnDate</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>accountNo, externalId, fieldOfficerId</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Inherited from Product (if not provided)</div></td></tr>
<tr class=alt><td>nominalAnnualInterestRate, interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, minRequiredOpeningBalance, lockinPeriodFrequency, lockinPeriodFrequencyType, withdrawalFeeForTransfers, allowOverdraft, overdraftLimit, withHoldTax</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Field if Entity-Datatable Check is enabled for the entity of type Savings.</div></td>
</tr>
<tr class=alt>
<td>datatables</td>
</tr>
</table>
</div>
<div class="method-example">
<p>Minimal request: accountNo auto generated, remaining details inherited from savings product.</p>
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts</code>
<code class="method-request">POST savingsaccount
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "01 March 2011"
}
</code>
<p>Minimal request: accountNo provided (must be unique), remaining details inherited from savings product.</p>
<code class="method-request">POST savingsaccount
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "01 March 2011",
"accountNo": "SA000023",
"externalId": "SYS-23"
}
</code>
<p>Full request: accountNo provided (must be unique), remaining details override details from savings product (except currency).</p>
<code class="method-request">POST savingsaccount
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"fieldOfficerId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "01 March 2013",
"accountNo": "SA000023",
"externalId": "SYS-23",
"nominalAnnualInterestRate": "5.65",
"interestCompoundingPeriodType": 1,
"interestPostingPeriodType": 4,
"interestCalculationType": 1,
"interestCalculationDaysInYearType": 365,
"minRequiredOpeningBalance": "1,000",
"lockinPeriodFrequency": 6,
"lockinPeriodFrequencyType": 2,
"allowOverdraft":true,
"overdraftLimit":5000,
"charges":[{"id":"1"}],
"datatables": [{
"registeredTableName": "Savings Enrichment",
"data": {
"locale": "en",
"Name": "Raj",
"COUNTRY_cd_country details": 17
}
},
{
"registeredTableName": "SavingsDataTableCreate",
"data": {
"locale": "en",
"Volume": "25",
"CurrentTimestamp": "01 December 2016 12:44",
"dateFormat": "dd MMMM yyyy HH:mm",
"DateData": "01 December 2016 00:00"
}
}]
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsaccounts_approve" name="savingsaccounts_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Approve savings application</h2>
<p>Approves savings application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=approve</code>
<code class="method-request">POST savingsaccount/1?command=approve
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "01 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 200,
"code": "savingsAccountStatusType.approved",
"value": "Approved",
"submittedAndPendingApproval": false,
"approved": true,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "02 March 2013"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_undoapproval" name="savingsaccounts_undoapproval" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Undo approval savings application</h2>
<p>Will move 'approved' savings application back to 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=undoApproval</code>
<code class="method-request">POST savingsaccount/1?command=undoApproval
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"approvedOnDate": ""
}
}
</code>
</div>
</div>
<a id="savingsaccounts_assignSavingsOfficer" name="savingsaccounts_assignSavingsOfficer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Assign Savings Officer</h4>
<p>Allows you to assign <i>Savings Officer</i> for existing Savings Account.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=assignSavingsOfficer</code>
<code class="method-request">POST savingsaccounts/1?command=assignSavingsOfficer
Content-Type: application/json
Request Body:
{
assignmentDate : "04 September 2014",
dateFormat : "dd MMMM yyyy",
fromSavingsOfficerId : "",
locale : "en",
toSavingsOfficerId : 2
}
</code>
<code class="method-response">
{
"officeId":2,
"savingsId":8,
"resourceId":8,
"changes":{"savingsOfficerId":2}
}
</code>
</div>
</div>
<a id="savingsaccounts_unassignSavingsOfficer" name="savingsaccounts_unassignSavingsOfficer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Unassign Savings Officer</h4>
<p>Allows you to unassign the <i>Savings Officer</i>.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=unassignSavingsOfficer</code>
<code class="method-request">POST savingsaccounts/1?command=unassignSavingsOfficer
Content-Type: application/json
Request Body:
{
dateFormat : "dd MMMM yyyy",
locale : "en",
unassignedDate : "05 September 2014"
}
</code>
<code class="method-response">
{
"officeId":2,
"clientId":8,
"resourceId":8,
"changes":{}
}
</code>
</div>
</div>
<a id="savingsaccounts_reject" name="savingsaccounts_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Reject savings application</h2>
<p>Rejects savings application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=reject</code>
<code class="method-request">POST savingsaccount/1?command=reject
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "03 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 500,
"code": "savingsAccountStatusType.rejected",
"value": "Rejected",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": true,
"withdrawnByApplicant": false,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "03 March 2013",
"closedOnDate": "03 March 2013"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_withdrawbyapplicant" name="savingsaccounts_withdrawbyapplicant" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Withdraw savings application</h2>
<p>Used when an applicant withdraws from the savings application. It must be in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=withdrawnByApplicant</code>
<code class="method-request">POST savingsaccount/1?command=withdrawnByApplicant
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "03 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 400,
"code": "savingsAccountStatusType.withdrawn.by.applicant",
"value": "Withdrawn by applicant",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": true,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "03 March 2013",
"closedOnDate": "03 March 2013"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_activate" name="savingsaccounts_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Activate a savings account</h2>
<p>Results in an approved savings application being converted into an 'active' savings account.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=activate</code>
<code class="method-request">POST savingsaccount/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedOnDate": "01 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedOnDate": "01 March 2013"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_close" name="savingsaccounts_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Close a savings account</h2>
<p>Results in an Activated savings application being converted into an 'closed' savings account.</p>
<p><i>closedOnDate</i> is closure date of savings account</p>
<p><i>withdrawBalance</i> is a boolean value, true value of this field performs a withdrawal transaction with account's running balance.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>dateFormat,locale,closedOnDate</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>note, <i>withdrawBalance</i>, paymentTypeId, accountNumber, checkNumber, routingCode, receiptNumber, bankNumber</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=close</code>
<code class="method-request">POST savingsaccount/5?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"26 August 2013",
"note":"close note"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":5,
"resourceId":5,
"changes":{
"status":{
"id":600,
"code":"savingsAccountStatusType.closed",
"value":"Closed",
"submittedAndPendingApproval":false,
"approved":false,
"rejected":false,
"withdrawnByApplicant":false,
"active":false,
"closed":true
},
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"closedOnDate":"26 August 2013",
"note":"close note"
}
}
</code>
<code class="method-request">POST savingsaccount/5?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"26 August 2013",
"note":"close note",
"withdrawBalance":true,
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":5,
"resourceId":5,
"changes":{
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123",
"status":{
"id":600,
"code":"savingsAccountStatusType.closed",
"value":"Closed",
"submittedAndPendingApproval":false,
"approved":false,
"rejected":false,
"withdrawnByApplicant":false,
"active":false,
"closed":true
},
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"closedOnDate":"26 August 2013",
"note":"close note"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_calculate_interest" name="savingsaccounts_calculate_interest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Calculate Interest on Savings Account</h2>
<p>
Calculates interest earned on a savings account based on todays date. It does not attempt to <b>post or credit</b> the interest on the account. That is responsibility of the <a href="#savingsaccounts_post_interest" >Post Interest API</a> that will likely be called by overnight process.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=calculateInterest</code>
<code class="method-request">POST savingsaccount/1?command=calculateInterest
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsaccounts_post_interest" name="savingsaccounts_post_interest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Post Interest on Savings Account</h2>
<p>
Calculates and Posts interest earned on a savings account based on todays date and whether an interest posting or crediting event is due.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=postInterest</code>
<code class="method-request">POST savingsaccount/1?command=postInterest
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsaccounts_block" name="savingsaccounts_block" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Block Savings Account</h2>
<p>
Blocks Savings account from all types of credit and debit transactions
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=block</code>
<code class="method-request">POST savingsaccount/1?command=block
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":1,
"resourceId":1,
"changes":{
"subStatus":{
"id":400,
"code":"SavingsAccountSubStatusEnum.block",
"value":"Block",
"none":false,
"inactive":false,
"dormant":false,
"escheat":false,
"block":true,
"blockCredit":false,
"blockDebit":false
}
}
}
</code>
</div>
</div>
<a id="savingsaccounts_unblock" name="savingsaccounts_unblock" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Unblock Savings Account</h2>
<p>
Unblock a blocked account. On unblocking account, user can perform debit and credit transactions
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=unblock</code>
<code class="method-request">POST savingsaccount/1?command=unblock
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":1,
"resourceId":1,
"changes":{
"subStatus":{
"id":0,
"code":"SavingsAccountSubStatusEnum.none",
"value":"None",
"none":true,
"inactive":false,
"dormant":false,
"escheat":false,
"block":false,
"blockCredit":false,
"blockDebit":false
}
}
}
</code>
</div>
</div>
<a id="savingsaccounts_block_credit" name="savingsaccounts_block_credit" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Block Savings Account Credit transactions</h2>
<p>
Savings account will be blocked from all types of credit transactions.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=blockCredit</code>
<code class="method-request">POST savingsaccount/1?command=blockCredit
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":1,
"resourceId":1,
"changes":{
"subStatus":{
"id":500,
"code":"SavingsAccountSubStatusEnum.blockcredit",
"value":"BlockCredit",
"none":false,
"inactive":false,
"dormant":false,
"escheat":false,
"block":false,
"blockCredit":true,
"blockDebit":false
}
}
}
</code>
</div>
</div>
<a id="savingsaccounts_unblock_credit" name="savingsaccounts_unblock_credit" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Unblock Savings Account Credit transactions</h2>
<p>It unblocks the Saving account's credit operations. Now all types of credits can be transacted to Savings account
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=unblockCredit</code>
<code class="method-request">POST savingsaccount/1?command=unblockCredit
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":1,
"resourceId":1,
"changes":{
"subStatus":{
"id":0,
"code":"SavingsAccountSubStatusEnum.none",
"value":"None",
"none":true,
"inactive":false,
"dormant":false,
"escheat":false,
"block":false,
"blockCredit":false,
"blockDebit":false
}
}
}
</code>
</div>
</div>
<a id="savingsaccounts_block_debit" name="savingsaccounts_block_debit" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Block Savings Account Debit transactions</h2>
<p> All types of debit operations from Savings account wil be blocked</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=blockDebit</code>
<code class="method-request">POST savingsaccount/1?command=blockDebit
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":1,
"resourceId":1,
"changes":{
"subStatus":{
"id":600,
"code":"SavingsAccountSubStatusEnum.blockdebit",
"value":"BlockDebit",
"none":false,
"inactive":false,
"dormant":false,
"escheat":false,
"block":false,
"blockCredit":false,
"blockDebit":true
}
}
}
</code>
</div>
</div>
<a id="savingsaccounts_unblock_debit" name="savingsaccounts_unblock_debit" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Unblock Savings Account debit transactions</h2>
<p>It unblocks the Saving account's debit operations. Now all types of debits can be transacted from Savings account
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{savingsId}?command=unblockDebit</code>
<code class="method-request">POST savingsaccount/1?command=unblockDebit
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":1,
"resourceId":1,
"changes":{
"subStatus":{
"id":0,
"code":"SavingsAccountSubStatusEnum.none",
"value":"None",
"none":true,
"inactive":false,
"dormant":false,
"escheat":false,
"block":false,
"blockCredit":false,
"blockDebit":false
}
}
}
</code>
</div>
</div>
<a id="savingsaccounts_list" name="savingsaccounts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>List savings applications/accounts</h2>
<p>Example Requests:</p>
<div class=apiClick>savingsaccounts</div>
<br><br>
<div class=apiClick>savingsaccounts?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsaccounts</code>
<code class="method-response">
{
"totalFilteredRecords": 1,
"pageItems": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "small business",
"savingsProductId": 1,
"savingsProductName": "Passbook Savings",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"timeline": {
"submittedOnDate": [
2013,
3,
1
]
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0
}
}
]
}
</code>
</div>
</div>
<a id="savingsaccounts_retrieve" name="savingsaccounts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve a savings application/account:</h2>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>associations</dt>
<dd>optional, <span>Either 'all' or a comma separated list of savings 'associations' (itemized below).</span></dd>
<dd><br>Associations are just extra pieces of data that you might or might not want to retrieve.<br><br></dd>
<dd><b>'all':</b> Gets data related to all associations e.g. ?associations=all.</dd>
<dd><b>'transactions':</b> Gets data related to transactions on the account e.g. ?associations=transactions</dd>
<dd><b>'charges':</b>Savings Account charges data.</dd>
</dl>
<p>Example Requests : </p>
<div class=apiClick>savingsaccounts/1</div>
<br><br>
<div class=apiClick>savingsaccounts/1?associations=all</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/savingsaccounts/{accountId}</code>
<code class="method-response">
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "small business",
"savingsProductId": 1,
"savingsProductName": "Passbook Savings",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"timeline": {
"submittedOnDate": [
2013,
3,
1
]
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0,
"availableBalance": 0
}
}
</code>
</div>
</div>
<a id="savingsaccounts_update" name="savingsaccounts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Modify a savings application</h2>
<p>Savings application can only be modified when in 'Submitted and pending approval' state. Once the application is approved, the details cannot be changed using this method. Specific api endpoints will be created to allow change of interest detail such as rate, compounding period, posting period etc</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/savingsaccounts/{accountsId}</code>
<code class="method-request">PUT savingsaccounts/1
Content-Type: application/json
No Request Body:
{
"locale": "en",
"nominalAnnualInterestRate": "5.9999999999"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"nominalAnnualInterestRate": 5.9999999999,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_withholdtaxupdate" name="savingsaccounts_withholdtaxupdate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Modify savings account withhold tax applicability</h2>
<p>Savings application's withhold tax can be modified when in 'Active' state. Once the application is activated, can modify the account withhold tax to post tax or vice-versa</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/savingsaccounts/{accountsId}?command=updateWithHoldTax</code>
<code class="method-request">PUT savingsaccounts/1?command=updateWithHoldTax
Content-Type: application/json
No Request Body:
{
"withHoldTax": false
}
</code>
<code class="method-response">
{
"savingsId": 138,
"resourceId": 138,
"changes": {
"withHoldTax": false
}
}
</code>
</div>
</div>
<a id="savingsaccounts_delete" name="savingsaccounts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Delete a savings application</h2>
<p>At present we support <b>hard</b> delete of savings application so long as its in 'Submitted and pending approval' state. One the application is moves past this state, it is not possible to do a 'hard' delete of the application or the account. An API endpoint will be added to close/de-activate the savings account.</p>
</div>
<div class="method-example">
<code class="method-declaration">DELETE https://Domain Name/api/v1/savingsaccounts/{accountsId}</code>
<code class="method-request">DELETE savingsaccounts/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsaccounts_transactions" name="savingsaccounts_transactions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Savings Account Transactions:</h2>
<p>Transactions possible on a savings account.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>transactionDate</td></tr>
<tr><td class=fielddesc>The date of the transaction.</td></tr>
<tr class=alt><td>transactionAmount</td></tr>
<tr><td class=fielddesc>The amount of the transaction.</td></tr>
</table>
</div>
</div>
<a id="savingsaccounts_transactions_template" name="savingsaccounts_transactions_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Savings Account Transaction Template:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Requests: </p>
<div class=apiClick>savingsaccounts/1/transactions/template</div>
<br/>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsaccounts/{accountId}/transactions/template
</code>
<code class="method-response">
{
"accountId": 1,
"accountNo": "000000001",
"date": [
2013,
5,
27
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"paymentTypeOptions": [
{
"id": 14,
"name": "Wire Transfer",
"position": 0
},
{
"id": 13,
"name": "Cash",
"position": 1
}
]
}
</code>
</div>
</div>
<a id="savingsaccounts_transaction" name="savingsaccounts_transaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Savings Account Transaction:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Requests: </p>
<div class=apiClick>savingsaccounts/1/transactions/1</div>
<br/>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/savingsaccounts/{accountId}/transactions/{transactionId}
</code>
<code class="method-response">
{
"id": 1,
"transactionType": {
"id": 2,
"code": "savingsAccountTransactionType.withdrawal",
"value": "Withdrawal",
"deposit": false,
"withdrawal": true,
"interestPosting": false,
"feeDeduction": false
},
"accountId": 1,
"accountNo": "000000001",
"date": [
2013,
8,
7
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"paymentDetailData": {
"id": 62,
"paymentType": {
"id": 11,
"name": "cash"
},
"accountNumber": "",
"checkNumber": "",
"routingCode": "",
"receiptNumber": "",
"bankNumber": ""
},
"amount": 5000,
"runningBalance": 0,
"reversed": true
}
</code>
</div>
</div>
<a id="savingsaccounts_deposit" name="savingsaccounts_deposit" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Deposit Transaction</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{accountsId}/transactions?command=deposit</code>
<code class="method-request">POST savingsaccounts/1/transactions?command=deposit
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "27 May 2013",
"transactionAmount": "500",
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 47,
"changes": {
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_withdrawal" name="savingsaccounts_withdrawal" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Withdrawal Transaction</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{accountsId}/transactions?command=withdrawal</code>
<code class="method-request">POST savingsaccounts/1/transactions?command=withdrawal
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "27 May 2013",
"transactionAmount": "500",
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 48,
"changes": {
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_adjusttransaction" name="savingsaccounts_adjusttransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Adjust Transaction</h2>
<p>This command modifies the given transaction.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{accountsId}/transactions/{transactionId}?command=modify</code>
<code class="method-request">POST savingsaccounts/1/transactions/1?command=modify
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "27 May 2013",
"transactionAmount": "500",
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 48,
"changes": {
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="savingsaccounts_undotransaction" name="savingsaccounts_undotransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Undo transaction</h2>
<p>This command reverses the given transaction.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/{accountsId}/transactions/{transactionId}?command=undo</code>
<code class="method-request">POST savingsaccounts/1/transactions/1?command=undo
Content-Type: application/json
No Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="savingsaccounts_hold_amount" name="savingsaccounts_hold_amount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Hold Amount</h2>
<p>Hold amount enables the user to hold/block/lien the specified amount from the account</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/4/transactions?command=holdAmount</code>
<code class="method-request">POST savingsaccounts/4/transactions?command=holdAmount
Content-Type: application/json
Request Body:
{
transactionDate:"15 June 2017",
transactionAmount:"200",
locale:"en",
dateFormat:"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":2,
"savingsId":4,
"resourceId":35
}
</code>
</div>
</div>
<a id="savingsaccounts_release_amount" name="savingsaccounts_release_amount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Release Amount</h2>
<p>Release amount removes the hold/block/lien already placed on an amount in the account. </p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/savingsaccounts/4/transactions/35?command=releaseAmount</code>
<code class="method-request">POST savingsaccounts/4/transactions/35?command=releaseAmount
Content-Type: application/json
No Request Body:
{
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":2,
"savingsId":4,
"resourceId":36
}
</code>
</div>
</div>
<!-- end of savings accounts api -->
<!-- start of Savings charges content-->
<a id="savings_charges" name="savings_charges" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Savings Charges</h3>
<p>Its typical for MFIs to add maintenance and operating charges. They can be either Fees or Penalties.
</p>
<p>Savings Charges are instances of <a href="#charges">Charges</a> and
represent either fees and penalties for savings products. Refer <a href="#charges">Charges</a>
for documentation of the various properties of a charge, Only additional properties (
specific to the context of a Charge being associated with a Savings account) are
described here</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>amountPaid</td>
</tr>
<tr>
<td class=fielddesc>The Total amount which has been paid for this Charge
</td>
</tr>
<tr class=alt>
<td>amountWaived</td>
</tr>
<tr>
<td class=fielddesc>The Total amount that has been waived for this Charge
</td>
</tr>
<tr class=alt>
<td>amountWrittenOff</td>
</tr>
<tr>
<td class=fielddesc>Total amount written off from this Charge
</td>
</tr>
<tr class=alt>
<td>amountOutstanding</td>
</tr>
<tr>
<td class=fielddesc>The Total outstanding amount for this Charge
</td>
</tr>
</table>
</div>
</div>
<a id="savings_charges_list" name="savings_charges_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Savings Charges</h4>
<p>Example Requests:</p>
<div class=apiClick>savingsaccounts/1/charges</div>
<br>
<div class=apiClick>savingsaccounts/1/charges?chargeStatus=all</div>
<br>
<div class=apiClick>savingsaccounts/1/charges?chargeStatus=inactive</div>
<br>
<div class=apiClick>savingsaccounts/1/charges?chargeStatus=active</div>
<br>
<div class=apiClick>savingsaccounts/1/charges?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/savingsaccounts/{accountId}/charges
</code>
<code class="method-response">
[
{
"id": 1,
"chargeId": 3,
"accountId": 57,
"name": "Savings account maintenance fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
},
{
"id": 2,
"chargeId": 4,
"accountId": 57,
"name": "Pass book Fee",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2013,
3,
29
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
},
{
"id": 9,
"chargeId": 4,
"accountId": 57,
"name": "Withdrawal fee percentage",
"chargeTimeType": {
"id": 5,
"code": "chargeTimeType.withdrawalFee",
"value": "Withdrawal Fee"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"percentage": 0.25,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 0,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 0,
"amountOrPercentage": 0.25,
"penalty": false
},
{
"id": 10,
"chargeId": 6,
"accountId": 57,
"name": "Annual fee - INR",
"chargeTimeType": {
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
"feeOnMonthDay": [
10,
9
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 50,
"amountOrPercentage": 50,
"penalty": false
}
]
</code>
</div>
</div>
<a id="savings_charges_template" name="savings_charges_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Savings Charges Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>savingsaccounts/1/charges/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/savingsaccounts/{accountId}/charges/template
</code>
<code class="method-response">
{
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"chargeOptions": [
{
"id": 2,
"name": "Passbook Fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
},
{
"id": 3,
"name": "Chequebook fee",
"active": true,
"penalty": true,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 1,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
},
{
"id": 6,
"name": "Annual fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50,
"chargeTimeType": {
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
}
],
"penalty": false
}
</code>
</div>
</div>
<a id="savings_charges_retrieve" name="savings_charges_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Savings account Charge</h4>
<p>Example Requests:</p>
<div class=apiClick>/savingsaccounts/1/charges/5</div>
<br>
<br>
<div class=apiClick>/savingsaccounts/1/charges/5?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}
</code>
<code class="method-response">
{
"id": 1,
"chargeId": 1,
"name": "Passbook fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
} </code>
</div>
</div>
<a id="savings_charges_create" name="savings_charges_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Savings account Charge</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for Savings account Charges</div></td>
</tr>
<tr class=alt>
<td>chargeId, amount</td>
</tr>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for Savings account Charges of Specified due date type</div></td>
</tr>
<tr class=alt>
<td>chargeId, amount, dueDate, dateFormat, locale</td>
</tr>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields
for Savings account Charges of Annual fee type</div></td>
</tr>
<tr class=alt>
<td>chargeId, amount, feeOnMonthDay, monthDayFormat, locale</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/savingsaccounts/{accountId}/charges
</code>
<code class="method-request">
POST /savingsaccounts/1/charges
Content-Type: application/json
Request Body:
{
"chargeId": "2",
"locale": "en",
"amount": "100",
"dateFormat": "dd MMMM yyyy",
"dueDate": "29 April 2013"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 6
}
</code>
<code class="method-request">
POST /savingsaccounts/1/charges
Content-Type: application/json
Request Body:
{
"chargeId": "2",
"locale": "en",
"amount": "25",
"monthDayFormat": "dd MMMM",
"feeOnMonthDay": "09 October"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 7
}
</code>
</div>
</div>
<a id="savings_charges_update" name="savings_charges_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Savings account Charge</h4>
<p>Currently Savings account Charges may be updated only if the Savings account
is not yet approved.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}
</code>
<code class="method-request">
PUT savingsaccounts/1/charges/6
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"amount": "60",
"dueDate": "27 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 6,
"changes": {
"dueDate": "27 March 2013",
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"amount": 60.0
}
}
</code>
</div>
</div>
<a id="savings_charges_delete" name="savings_charges_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Savings account Charge</h4>
<p>
<b>Note:</b>Currently, A Savings account Charge may only be removed from Savings that are not
yet approved.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}
</code>
<code class="method-request">
DELETE savingsaccounts/1/charges/2
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 2
}
</code>
</div>
</div>
<a id="savings_charges_pay" name="savings_charges_pay" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Pay a Savings account Charge</h4>
<p>
An active charge will be paid when savings account is active and having sufficient balance.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=paycharge
</code>
<code class="method-request">
POST savingsaccounts/1/charges/2?command=paycharge
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"amount": "60",
"dueDate": "12 September 2013"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 2
}
</code>
</div>
</div>
<a id="savings_charges_waive" name="savings_charges_waive" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Waive off a Savings account Charge</h4>
<p>
Outstanding charge amount will be waived off.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=waive
</code>
<code class="method-request">
POST savingsaccounts/1/charges/2?command=waive
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 2
}
</code>
</div>
</div>
<a id="savings_charges_inactivate" name="savings_charges_inactivate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Inactivate a Savings account Charge</h4>
<p>
A charge will be allowed to inactivate when savings account is active and not having any dues as of today. If charge is overpaid, corresponding charge payment transactions will be reversed.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=inactivate
</code>
<code class="method-request">
POST savingsaccounts/1/charges/2?command=inactivate
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 2
}
</code>
</div>
</div>
<!-- End of Savings account charges -->
<!-- start of fixed deposit accounts api -->
<a id="fdaccounts" name="fdaccounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Fixed Deposit Account:</h2>
<p>Fixed Deposit accounts are instances of a praticular fixed deposit product created. An application process around the creation of accounts is also supported.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Starting State</td>
<td class="fineractHeading2">Action</td>
<td class="fineractHeading2">Resultant State</td>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td>Submit</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Reject</td>
<td>Closed - Rejected</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Withdrawn by Applicant</td>
<td>Closed - Withdrawn by Applicant</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Approve</td>
<td>Approved</td>
</tr>
<tr>
<td>Approved</td>
<td>Undo Approval</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Approved</td>
<td>Activate</td>
<td>Active</td>
</tr>
</tbody>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>clientId</td></tr>
<tr><td class=fielddesc>The client you are creating the fixed deposit account for. Either <i>clientId</i> or <i>groupId</i> must be provided.</td></tr>
<tr class=alt><td>groupId</td></tr>
<tr><td class=fielddesc>The group you are creating the fixed deposit account for. Either <i>clientId</i> or <i>groupId</i> must be provided.</td></tr>
<tr class=alt><td>productId</td></tr>
<tr><td class=fielddesc>The id of the product used for this fixed deposit account. The fixed deposit account <b>inherits the selected currency</b> of the product and <b>possibly other details if not overridden</b> in the fixed deposit account creation request.</td></tr>
<tr class=alt><td>accountNo</td></tr>
<tr><td class=fielddesc>The account no. associated with this fixed deposit. Is auto generated if not provided at creation time.</td></tr>
<tr class=alt><td>externalId</td></tr>
<tr><td class=fielddesc>A place to put an external reference for this fixed deposit account useful in migrations e.g. The ID another system uses. If provided, it must be unique.</td></tr>
<tr class=alt><td>submittedOnDate</td></tr>
<tr><td class=fielddesc><i>submittedOnDate</i> must be provided when initially creating fixed deposit account application. <i>locale</i> and <i>dateFormat</i> parameters must be provided with this.</td></tr>
<tr class=alt><td>interestCompoundingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is compounded. 1=Daily, 4=Monthly (at end of month)</td></tr>
<tr class=alt><td>interestPostingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is posted or credited to fixed deposit account. The actual crediting or posting transaction is date as occurring on the day after the end of the period. 4=Monthly (at end of month), 5=Quarterly (at end of quarter, 31st Mar, 30th Jun, 30th Sep, 31st Dec), 7=Annually (at end of calendar year 31st Dec)</td></tr>
<tr class=alt><td>interestCalculationType</td></tr>
<tr><td class=fielddesc>The interest calculation method used: 1=Daily Balance or 2=Average Daily Balance</td></tr>
<tr class=alt><td>interestCalculationDaysInYearType</td></tr>
<tr><td class=fielddesc>The setting for number of days in year to use: 360=360 Days, 365=365 Days</td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the fixed deposit account is 'locked in' and withdrawals are not allowed. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequency</i> to indicate the length of time that the fixed deposit account is 'locked in' and withdrawals are not allowed. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b></td></tr>
<tr class=alt><td>depositAmount</td></tr>
<tr><td class=fielddesc>The fixed deposit amount for which interest is provided on maturity.</td></tr>
<tr class=alt><td>depositPeriod</td></tr>
<tr><td class=fielddesc>Used along with <i>depositPeriodFrequencyId</i> to define term for which amount is deposited in fixed deposit. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>depositPeriodFrequencyId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>depositPeriod</i> to define term for which amount is deposited in fixed deposit. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>minDepositTerm</td></tr>
<tr><td class=fielddesc>This is used along with <i>minDepositTermTypeId</i> to define allowed minimum deposit term for creating a fixed deposit account using this product. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>minDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>minDepositTerm</i> to define allowed minimum deposit term for creating a fixed deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>maxDepositTerm</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTermTypeId</i> to define allowed maximum deposit term for creating a fixed deposit account using this product. e.g. <b>3</b> Years</td></tr>
<tr class=alt><td>maxDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTerm</i> to define allowed maximum deposit term for creating a fixed deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 3 <b>Years</b>
</td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTerm</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTermTypeId</i> to indicate the allowed deposit periods after minimum deposit period. e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months. </td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTerm</i> to indicate the allowed deposit periods after minimum deposit period. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months.
</td>
</tr>
<tr class=alt><td>preClosurePenalApplicable</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: expects boolean value true/false, If provided as true then must provide <i>preClosurePenalInterest</i> and <i>preClosurePenalInterestOnTypeId</i>. </td>
</tr>
<tr class=alt><td>preClosurePenalInterest</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterestOnTypeId</i> to apply a penalalty on top of applicable interest rate for Pre-mature closure of accounts. e.g. “1%” means 1% less than the interest rate applicable.</td>
</tr>
<tr class=alt><td>preClosurePenalInterestOnTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterest</i> to decide what should be the applicable interest rate to which penalalty can be applied on Pre-mature closure of accounts. 1=Whole Term, 2=Till Premature withdrawal e.g. “1%” means 1% less than the interest rate applicable till premature withdrawal.</td>
</tr>
<tr class=alt><td>withHoldTax</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If tax group provided at product level, will allow to Enable or disable withhold tax on interest posting for savings account </td></tr>
</table>
</div>
</div>
<a id="fdaccounts_template" name="fdaccounts_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Fixed Deposit Account Template:</h2>
<p>This is a convenience resource. It can be useful when building maintenance user interface screens for fixed deposit applications. The template data returned consists of any or all of:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>clientId</dt>
<dd>Integer <span>mandatory</span></dd>
<dt>productId</dt>
<dd>Integer <span>optional</span></dd>
<dd>If entered, productId, productName and selectedProduct fields are returned.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>fixeddepositaccounts/template?clientId=1</div>
<br><br>
<div class=apiClick>fixeddepositaccounts/template?clientId=1&productId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositaccounts/template?clientId={clientId}</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "small business",
"productOptions": [
{
"id": 1,
"name": "Passbook Savings"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositaccounts/template?clientId={clientId}&productId={productId}</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "small business",
"savingsProductId": 1,
"savingsProductName": "Passbook Savings",
"timeline": {},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"productOptions": [
{
"id": 1,
"name": "Passbook Savings"
}
],
"fieldOfficerOptions": [
{
"id": 3,
"firstname": "Mrs.",
"lastname": "loanofficerB1",
"displayName": "loanofficerB1, Mrs.",
"officeId": 2,
"officeName": "branch 1",
"isLoanOfficer": true
},
{
"id": 1,
"firstname": "Mr.",
"lastname": "loanofficerHO",
"displayName": "loanofficerHO, Mr.",
"officeId": 1,
"officeName": "branch 1",
"isLoanOfficer": true
}
],
"interestCompoundingPeriodTypeOptions": [
{
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
{
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
}
],
"interestPostingPeriodTypeOptions": [
{
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
{
"id": 5,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.quarterly",
"value": "Quarterly"
},
{
"id": 7,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.annual",
"value": "Annually"
}
],
"interestCalculationTypeOptions": [
{
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
{
"id": 2,
"code": "savingsInterestCalculationType.averagedailybalance",
"value": "Average Daily Balance"
}
],
"interestCalculationDaysInYearTypeOptions": [
{
"id": 360,
"code": "savingsInterestCalculationDaysInYearType.days360",
"value": "360 Days"
},
{
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
}
],
"lockinPeriodFrequencyTypeOptions": [
{
"id": 0,
"code": "savings.lockin.savingsPeriodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "savings.lockin.savingsPeriodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "savings.lockin.savingsPeriodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "savings.lockin.savingsPeriodFrequencyType.years",
"value": "Years"
}
],
"withdrawalFeeTypeOptions": [
{
"id": 1,
"code": "savingsWithdrawalFeesType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "savingsWithdrawalFeesType.percent.of.amount",
"value": "% of Amount"
}
],
"chargeOptions": [
{
"id": 4,
"name": "Savings charge 1",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 200,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "chargepaymentmode.regular"
}
},
{
"id": 5,
"name": "Savings charge 2",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 300,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "chargepaymentmode.regular"
}
},
{
"id": 6,
"name": "Annual fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50,
"chargeTimeType": {
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 7,
"name": "Quarterly fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5,
"chargeTimeType": {
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
},
"feeOnMonthDay": [
10,
5
],
"feeInterval": 4
}
]
}
</code>
</div>
</div>
<a id="fdaccounts_create" name="fdaccounts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Submit new fixed deposit application</h2>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>clientId or groupId, productId, submittedOnDate, depositAmount, depositPeriod, depositPeriodFrequencyId</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>accountNo, externalId, fieldOfficerId,linkAccountId(if provided initial deposit amount will be collected from this account),transferInterestToSavings(By enabling this flag all interest postings will be transferred to linked saving account )</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Inherited from Product (if not provided)</div></td></tr>
<tr class=alt><td>interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, lockinPeriodFrequency, lockinPeriodFrequencyType, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnTypeId, charts, withHoldTax</td>
</tr>
</table>
</div>
<div class="method-example">
<p>Minimal request: accountNo auto generated, remaining details inherited from fixed deposit product.</p>
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts</code>
<code class="method-request">POST fixeddepositaccount
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "01 March 2014",
"depositAmount":"5000",
"depositPeriod":"6",
"depositPeriodFrequencyId":"2"
}
</code>
<p>Minimal request: accountNo provided (must be unique), remaining details inherited from fixed deposit product.</p>
<code class="method-request">POST fixeddepositaccount
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "01 March 2014",
"depositAmount":"5000",
"depositPeriod":"6",
"depositPeriodFrequencyId":"2",
"accountNo": "FD000023",
"externalId": "FD-23"
}
</code>
<p>Full request: accountNo provided (must be unique), remaining details override details from fixed deposit product (except currency).</p>
<code class="method-request">POST savingsaccount
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"fieldOfficerId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "01 March 2014",
"accountNo": "FD000024",
"externalId": "FD-24",
"interestCompoundingPeriodType": 1,
"interestPostingPeriodType": 4,
"interestCalculationType": 1,
"interestCalculationDaysInYearType": 365,
"depositAmount":"5000",
"depositPeriod":"6",
"depositPeriodFrequencyId":"2",
"lockinPeriodFrequency": 6,
"lockinPeriodFrequencyType": 2,
"charges":[{"id":"1"}]
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="fdaccounts_approve" name="fdaccounts_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Approve fixed deposit application</h2>
<p>Approves fixed deposit application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=approve</code>
<code class="method-request">POST fixeddepositaccounts/1?command=approve
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "01 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 200,
"code": "savingsAccountStatusType.approved",
"value": "Approved",
"submittedAndPendingApproval": false,
"approved": true,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "01 March 2013"
}
}
</code>
</div>
</div>
<a id="fdaccounts_undoapproval" name="fdaccounts_undoapproval" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Undo approval fixed deposit application</h2>
<p>Will move 'approved' fixed deposit application back to 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=undoApproval</code>
<code class="method-request">POST fixeddepositaccounts/1?command=undoApproval
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"approvedOnDate": ""
}
}
</code>
</div>
</div>
<a id="fdaccounts_reject" name="fdaccounts_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Reject fixed deposit application</h2>
<p>Rejects fixed deposit application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=reject</code>
<code class="method-request">POST fixeddepositaccounts/1?command=reject
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "03 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 500,
"code": "savingsAccountStatusType.rejected",
"value": "Rejected",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": true,
"withdrawnByApplicant": false,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "03 March 2013",
"closedOnDate": "03 March 2013"
}
}
</code>
</div>
</div>
<a id="fdaccounts_withdrawbyapplicant" name="fdaccounts_withdrawbyapplicant" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Withdraw fixed deposit application</h2>
<p>Used when an applicant withdraws from the fixed deposit application. It must be in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{savingsId}?command=withdrawnByApplicant</code>
<code class="method-request">POST savingsaccount/1?command=withdrawnByApplicant
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "03 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 400,
"code": "savingsAccountStatusType.withdrawn.by.applicant",
"value": "Withdrawn by applicant",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": true,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "03 March 2013",
"closedOnDate": "03 March 2013"
}
}
</code>
</div>
</div>
<a id="fdaccounts_activate" name="fdaccounts_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Activate a fixed deposit account</h2>
<p>Results in an approved fixed deposit application being converted into an 'active' fixed deposit account.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=activate</code>
<code class="method-request">POST savingsaccount/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedOnDate": "01 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedOnDate": "01 March 2013"
}
}
</code>
</div>
</div>
<a id="fdaccounts_close" name="fdaccounts_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Close a fixed deposit account</h2>
<p>Results in a Matured fixed deposit account being converted into a 'closed' fixed deposit account.</p> <p>On account close allowed actions are.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Action on Close</td>
<td class="fineractHeading2">Result</td>
</tr>
</thead>
<tbody>
<tr>
<td>Withdraw Deposit &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>Matured amount withdrawn and paid to client</td>
</tr>
<tr>
<td>Transfer to Savings</td>
<td>Matured amount transfered to specified savings account.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Re-Invest</td>
<td>Create new Fixed deposit application with matured amount as deposit amount.</td>
</tr>
</tbody>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=close</code>
<code class="method-request">POST fixeddepositaccounts/1?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"19 April 2014",
"note":"Closing and transfering amount to savings",
"onAccountClosureId":"200",
"toSavingsAccountId":1,
"transferDescription":"Transfered matured amount to savings account"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":5,
"resourceId":5,
"changes":{
"status":{
"id":600,
"code":"savingsAccountStatusType.closed",
"value":"Closed",
"submittedAndPendingApproval":false,
"approved":false,
"rejected":false,
"withdrawnByApplicant":false,
"active":false,
"closed":true
},
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"closedOnDate":"19 April 2014",
"note":"Closing and transfering amount to savings"
}
}
</code>
</div>
</div>
<a id="fdaccounts_prematureclose" name="fdaccounts_prematureclose" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Premature Close a fixed deposit account</h2>
<p>Results in an Active fixed deposit account being converted into a 'Premature Closed' fixed deposit account with options to withdraw prematured amount. (premature amount is calculated using interest rate chart applicable along with penal interest if any.)</p> <p>On account premature closure allowed actions are.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Action on Premature Close</td>
<td class="fineractHeading2">Result</td>
</tr>
</thead>
<tbody>
<tr>
<td>Withdraw Deposit &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>Matured amount withdrawn and paid to client</td>
</tr>
<tr>
<td>Transfer to Savings</td>
<td>Matured amount transfered to specified savings account.</td>
</tr>
</tbody>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=prematureClose</code>
<code class="method-request">POST fixeddepositaccounts/1?command=prematureClose
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"19 April 2014",
"note":"Close and transfer amount to savings",
"onAccountClosureId":"200",
"toSavingsAccountId":1,
"transferDescription":"Transfered matured amount to savings account"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 700,
"code": "savingsAccountStatusType.pre.mature.closure",
"value": "Premature Closed",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": true,
"transferInProgress": false,
"transferOnHold": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"closedOnDate": "19 April 2014",
"note": "Close and transfer amount to savings"
}
}
</code>
</div>
</div>
<a id="fdaccounts_calculate_premature_amount" name="fdaccounts_calculate_premature_amount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Calculate Premature amount on Fixed deposit account</h2>
<p>Calculate premature amount on fixed deposit account till premature close date. Premature amount is calculated based on interest chart and penal interest applicable.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=calculatePrematureAmount</code>
<code class="method-request">POST fixeddepositaccounts/1?command=calculatePrematureAmount
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"19 April 2014"
}
</code>
<code class="method-response">
{
"maturityAmount": 100.65,
"savingsAccounts": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Sangamesh N",
"savingsProductId": 1,
"savingsProductName": "FD-0001"
}
],
"onAccountClosureOptions": [
{
"id": 100,
"code": "depositAccountClosureType.withdrawDeposit",
"value": "Withdra Deposit"
},
{
"id": 200,
"code": "depositAccountClosureType.transferToSavings",
"value": "Transfer to Savings"
},
{
"id": 300,
"code": "depositAccountClosureType.reinvest",
"value": "Re-Invest"
}
],
"paymentTypeOptions": [],
"id": 12,
"depositType": {
"id": 300,
"code": "depositAccountType.recurringDeposit",
"value": "Recurring Deposit"
}
}
</code>
</div>
</div>
<a id="fdaccounts_calculate_interest" name="fdaccounts_calculate_interest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Calculate Interest on Fixed Deposit Account</h2>
<p>
Calculates interest earned on a fixed deposit account based on todays date. It does not attempt to <b>post or credit</b> the interest on the account. That is responsibility of the <a href="#fdaccounts_post_interest" >Post Interest API</a> that will likely be called by overnight process.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=calculateInterest</code>
<code class="method-request">POST fixeddepositaccount/1?command=calculateInterest
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="fdaccounts_post_interest" name="fdaccounts_post_interest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Post Interest on Fixed Deposit Account</h2>
<p>
Calculates and Posts interest earned on a fixed deposit account based on todays date and whether an interest posting or crediting event is due.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/fixeddepositaccounts/{accountId}?command=postInterest</code>
<code class="method-request">POST fixeddepositaccount/1?command=postInterest
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="fdaccounts_list" name="fdaccounts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>List Fixed deposit applications/accounts</h2>
<p>Example Requests:</p>
<div class=apiClick>fixeddepositaccounts</div>
<br><br>
<div class=apiClick>fixeddepositaccounts?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositaccounts</code>
<code class="method-response">
[
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Sangamesh N",
"savingsProductId": 3,
"savingsProductName": "FD01",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": false,
"transferInProgress": false,
"transferOnHold": false
},
"timeline": {
"submittedOnDate": [
2014,
3,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0
},
"interestFreePeriodApplicable": false,
"preClosurePenalApplicable": false,
"minDepositTerm": 3,
"maxDepositTerm": 4,
"minDepositTermType": {
"id": 2,
"code": "deposit.term.savingsPeriodFrequencyType.months",
"value": "Months"
},
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"depositAmount": 5000,
"maturityAmount": 5140.25,
"maturityDate": [
2014,
9,
1
],
"depositPeriod": 6,
"depositPeriodFrequency": {
"id": 2,
"code": "deposit.period.savingsPeriodFrequencyType.months",
"value": "Months"
}
}
]
</code>
</div>
</div>
<a id="fdaccounts_retrieve" name="fdaccounts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve a fixed deposit application/account:</h2>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>associations</dt>
<dd>optional, <span>Either 'all' or a comma separated list of fixed deposit 'associations' (itemized below).</span></dd>
<dd><br>Associations are just extra pieces of data that you might or might not want to retrieve.<br><br></dd>
<dd><b>'all':</b> Gets data related to all associations e.g. ?associations=all.</dd>
<dd><b>'transactions':</b> Gets data related to transactions on the account e.g. ?associations=transactions</dd>
<dd><b>'charges':</b>fixed deposit Account charges data.</dd>
</dl>
<p>Example Requests : </p>
<div class=apiClick>fixeddepositaccounts/1</div>
<br><br>
<div class=apiClick>fixeddepositaccounts/1?associations=all</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/fixeddepositaccounts/{accountId}</code>
<code class="method-response">
{
"id": 1,
"accountNo": "FD000023",
"externalId": "FD-23",
"clientId": 1,
"clientName": "Sangamesh N",
"savingsProductId": 3,
"savingsProductName": "FD01",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": false,
"transferInProgress": false,
"transferOnHold": false
},
"timeline": {
"submittedOnDate": [
2014,
3,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"interestFreePeriodApplicable": false,
"preClosurePenalApplicable": false,
"minDepositTerm": 3,
"maxDepositTerm": 4,
"minDepositTermType": {
"id": 2,
"code": "deposit.term.savingsPeriodFrequencyType.months",
"value": "Months"
},
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"depositAmount": 5000,
"maturityAmount": 5140.25,
"maturityDate": [
2014,
9,
1
],
"depositPeriod": 6,
"depositPeriodFrequency": {
"id": 2,
"code": "deposit.period.savingsPeriodFrequencyType.months",
"value": "Months"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0
},
"accountChart": {
"id": 4,
"fromDate": [
2013,
10,
2
],
"accountId": 5,
"accountNumber": "FD000023",
"chartSlabs": [
{
"id": 13,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 181,
"toPeriod": 365,
"annualInterestRate": 5.5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 12,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 1,
"toPeriod": 180,
"annualInterestRate": 5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 11,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 366,
"annualInterestRate": 6,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
],
"periodTypes": [
{
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
{
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "interestChartPeriodType.months",
"value": "Months"
},
{
"id": 3,
"code": "interestChartPeriodType.years",
"value": "Years"
}
]
}
}
</code>
</div>
</div>
<a id="fdaccounts_update" name="fdaccounts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Modify a fixed deposit application</h2>
<p>Fixed deposit application can only be modified when in 'Submitted and pending approval' state. Once the application is approved, the details cannot be changed using this method. Specific api endpoints will be created to allow change of interest detail such as rate, compounding period, posting period etc</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/fixeddepositaccounts/{accountId}</code>
<code class="method-request">PUT fixeddepositaccounts/1
Content-Type: application/json
No Request Body:
{
"locale": "en",
"depositAmount": 6000
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"depositAmount": 6000,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="fdaccounts_delete" name="fdaccounts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Delete a fixed deposit application</h2>
<p>At present we support <b>hard</b> delete of fixed deposit application so long as its in 'Submitted and pending approval' state. One the application is moves past this state, it is not possible to do a 'hard' delete of the application or the account. An API endpoint will be added to close/de-activate the fixed deposit account.</p>
</div>
<div class="method-example">
<code class="method-declaration">DELETE https://Domain Name/api/v1/fixeddepositaccounts/{accountsId}</code>
<code class="method-request">DELETE fixeddepositaccounts/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of fixed deposit accounts api -->
<!-- start of recurring deposit accounts api -->
<a id="rdaccounts" name="rdaccounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Recurring Deposit Account:</h2>
<p>Recurring Deposit accounts are instances of a praticular recurring deposit product created. An application process around the creation of accounts is also supported.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Starting State</td>
<td class="fineractHeading2">Action</td>
<td class="fineractHeading2">Resultant State</td>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td>Submit</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Reject</td>
<td>Closed - Rejected</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Withdrawn by Applicant</td>
<td>Closed - Withdrawn by Applicant</td>
</tr>
<tr>
<td>Submitted and pending approval</td>
<td>Approve</td>
<td>Approved</td>
</tr>
<tr>
<td>Approved</td>
<td>Undo Approval</td>
<td>Submitted and pending approval</td>
</tr>
<tr>
<td>Approved</td>
<td>Activate</td>
<td>Active</td>
</tr>
</tbody>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>clientId</td></tr>
<tr><td class=fielddesc>The client you are creating the recurring deposit account for. Either <i>clientId</i> or <i>groupId</i> must be provided.</td></tr>
<tr class=alt><td>groupId</td></tr>
<tr><td class=fielddesc>The group you are creating the recurring deposit account for. Either <i>clientId</i> or <i>groupId</i> must be provided.</td></tr>
<tr class=alt><td>productId</td></tr>
<tr><td class=fielddesc>The id of the product used for this recurring deposit account. The recurring deposit account <b>inherits the selected currency</b> of the product and <b>possibly other details if not overridden</b> in the recurring deposit account creation request.</td></tr>
<tr class=alt><td>accountNo</td></tr>
<tr><td class=fielddesc>The account no. associated with this recurring deposit. Is auto generated if not provided at creation time.</td></tr>
<tr class=alt><td>externalId</td></tr>
<tr><td class=fielddesc>A place to put an external reference for this recurring deposit account useful in migrations e.g. The ID another system uses. If provided, it must be unique.</td></tr>
<tr class=alt><td>submittedOnDate</td></tr>
<tr><td class=fielddesc><i>submittedOnDate</i> must be provided when initially creating recurring deposit account application. <i>locale</i> and <i>dateFormat</i> parameters must be provided with this.</td></tr>
<tr class=alt><td>interestCompoundingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is compounded. 1=Daily, 4=Monthly (at end of month)</td></tr>
<tr class=alt><td>interestPostingPeriodType</td></tr>
<tr><td class=fielddesc>The period at which interest rate is posted or credited to recurring deposit account. The actual crediting or posting transaction is date as occurring on the day after the end of the period. 4=Monthly (at end of month), 5=Quarterly (at end of quarter, 31st Mar, 30th Jun, 30th Sep, 31st Dec), 7=Annually (at end of calendar year 31st Dec)</td></tr>
<tr class=alt><td>interestCalculationType</td></tr>
<tr><td class=fielddesc>The interest calculation method used: 1=Daily Balance or 2=Average Daily Balance</td></tr>
<tr class=alt><td>interestCalculationDaysInYearType</td></tr>
<tr><td class=fielddesc>The setting for number of days in year to use: 360=360 Days, 365=365 Days</td></tr>
<tr class=alt><td>lockinPeriodFrequency</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequencyType</i> to indicate the length of time that the recurring deposit account is 'locked in' and withdrawals are not allowed. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>lockinPeriodFrequencyType</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>lockinPeriodFrequency</i> to indicate the length of time that the recurring deposit account is 'locked in' and withdrawals are not allowed. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b></td></tr>
<tr class=alt><td>recurringDepositAmount</td></tr>
<tr><td class=fielddesc>The recurring deposit amount to be deposited regularly on a specified by deposit frequency.</td></tr>
<tr class=alt><td>recurringDepositFrequency</td></tr>
<tr><td class=fielddesc>Used along with <i>recurringDepositFrequencyTypeId</i> to define the frequency at which <i>recurringDepositAmount</i> to be deposited into RD account. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>recurringDepositFrequencyTypeId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>recurringDepositFrequency</i> to define the frequency at which <i>recurringDepositAmount</i> to be deposited into RD account. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>depositPeriod</td></tr>
<tr><td class=fielddesc>Used along with <i>depositPeriodFrequencyId</i> to define term for which amount is deposited in recurring deposit. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>depositPeriodFrequencyId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>depositPeriod</i> to define term for which amount is deposited in recurring deposit. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>minDepositTerm</td></tr>
<tr><td class=fielddesc>This is used along with <i>minDepositTermTypeId</i> to define allowed minimum deposit term for creating a recurring deposit account using this product. e.g. <b>6</b> Months</td></tr>
<tr class=alt><td>minDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc> Used along with <i>minDepositTerm</i> to define allowed minimum deposit term for creating a recurring deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 6 <b>Months</b>
</td>
</tr>
<tr class=alt><td>maxDepositTerm</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTermTypeId</i> to define allowed maximum deposit term for creating a recurring deposit account using this product. e.g. <b>3</b> Years</td></tr>
<tr class=alt><td>maxDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>maxDepositTerm</i> to define allowed maximum deposit term for creating a recurring deposit account using this product. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. 3 <b>Years</b>
</td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTerm</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTermTypeId</i> to indicate the allowed deposit periods after minimum deposit period. e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months. </td>
</tr>
<tr class=alt><td>inMultiplesOfDepositTermTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: If provided, used along with <i>inMultiplesOfDepositTerm</i> to indicate the allowed deposit periods after minimum deposit period. 0=Days, 1=Weeks, 2=Months, 3=Years
e.g. If inMultiplesOfDepositTerm is <b>3</b> Months then the next allowed deposit period after minimum deposit of <b>6</b> Months should be <b>9</d> Months.
</td>
</tr>
<tr class=alt><td>preClosurePenalApplicable</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: expects boolean value true/false, If provided as true then must provide <i>preClosurePenalInterest</i> and <i>preClosurePenalInterestOnTypeId</i>. </td>
</tr>
<tr class=alt><td>preClosurePenalInterest</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterestOnTypeId</i> to apply a penalalty on top of applicable interest rate for Pre-mature closure of accounts. e.g. “1%” means 1% less than the interest rate applicable.</td>
</tr>
<tr class=alt><td>preClosurePenalInterestOnTypeId</td></tr>
<tr>
<td class=fielddesc><b>Optional</b>: Must provide when <i>preClosurePenalApplicable</i> is true. Used along with <i>preClosurePenalInterest</i> to decide what should be the applicable interest rate to which penalalty can be applied on Pre-mature closure of accounts. 1=Whole Term, 2=Till Premature withdrawal e.g. “1%” means 1% less than the interest rate applicable till premature withdrawal.</td>
</tr>
<tr class=alt><td>withHoldTax</td></tr>
<tr><td class=fielddesc><b>Optional</b>: If tax group provided at product level, will allow to Enable or disable withhold tax on interest posting for savings account </td></tr>
</table>
</div>
</div>
<a id="rdaccounts_template" name="rdaccounts_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve recurring Deposit Account Template:</h2>
<p>This is a convenience resource. It can be useful when building maintenance user interface screens for recurring deposit applications. The template data returned consists of any or all of:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>clientId</dt>
<dd>Integer <span>mandatory</span></dd>
<dt>productId</dt>
<dd>Integer <span>optional</span></dd>
<dd>If entered, productId, productName and selectedProduct fields are returned.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>fixeddepositaccounts/template?clientId=1</div>
<br><br>
<div class=apiClick>fixeddepositaccounts/template?clientId=1&productId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositaccounts/template?clientId={clientId}</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "small business",
"productOptions": [
{
"id": 1,
"name": "Passbook Savings"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/fixeddepositaccounts/template?clientId={clientId}&productId={productId}</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "small business",
"savingsProductId": 1,
"savingsProductName": "Passbook Savings",
"timeline": {},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"productOptions": [
{
"id": 1,
"name": "Passbook Savings"
}
],
"fieldOfficerOptions": [
{
"id": 3,
"firstname": "Mrs.",
"lastname": "loanofficerB1",
"displayName": "loanofficerB1, Mrs.",
"officeId": 2,
"officeName": "branch 1",
"isLoanOfficer": true
},
{
"id": 1,
"firstname": "Mr.",
"lastname": "loanofficerHO",
"displayName": "loanofficerHO, Mr.",
"officeId": 1,
"officeName": "branch 1",
"isLoanOfficer": true
}
],
"interestCompoundingPeriodTypeOptions": [
{
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
{
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
}
],
"interestPostingPeriodTypeOptions": [
{
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
{
"id": 5,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.quarterly",
"value": "Quarterly"
},
{
"id": 7,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.annual",
"value": "Annually"
}
],
"interestCalculationTypeOptions": [
{
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
{
"id": 2,
"code": "savingsInterestCalculationType.averagedailybalance",
"value": "Average Daily Balance"
}
],
"interestCalculationDaysInYearTypeOptions": [
{
"id": 360,
"code": "savingsInterestCalculationDaysInYearType.days360",
"value": "360 Days"
},
{
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
}
],
"lockinPeriodFrequencyTypeOptions": [
{
"id": 0,
"code": "savings.lockin.savingsPeriodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "savings.lockin.savingsPeriodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "savings.lockin.savingsPeriodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "savings.lockin.savingsPeriodFrequencyType.years",
"value": "Years"
}
],
"withdrawalFeeTypeOptions": [
{
"id": 1,
"code": "savingsWithdrawalFeesType.flat",
"value": "Flat"
},
{
"id": 2,
"code": "savingsWithdrawalFeesType.percent.of.amount",
"value": "% of Amount"
}
],
"chargeOptions": [
{
"id": 4,
"name": "Savings charge 1",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 200,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "chargepaymentmode.regular"
}
},
{
"id": 5,
"name": "Savings charge 2",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 300,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "chargepaymentmode.regular"
}
},
{
"id": 6,
"name": "Annual fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50,
"chargeTimeType": {
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
}
},
{
"id": 7,
"name": "Quarterly fee",
"active": true,
"penalty": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 5,
"chargeTimeType": {
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
"chargeAppliesTo": {
"id": 2,
"code": "chargeAppliesTo.savings",
"value": "Savings"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
},
"feeOnMonthDay": [
10,
5
],
"feeInterval": 4
}
]
}
</code>
</div>
</div>
<a id="rdaccounts_create" name="rdaccounts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Submit new recurring deposit application</h2>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>clientId or groupId, productId, submittedOnDate, depositPeriod, depositPeriodFrequencyId, recurringFrequency, recurringFrequencyType, depositAmount,isCalendarInherited, mandatoryRecommendedDepositAmount</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Fields</div></td></tr>
<tr class=alt><td>accountNo, externalId, fieldOfficerId, expectedFirstDepositOnDate, allowWithdrawal, adjustAdvanceTowardsFuturePayments, isMandatoryDeposit</td></tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Inherited from Product (if not provided)</div></td></tr>
<tr class=alt><td>interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, lockinPeriodFrequency, lockinPeriodFrequencyType, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnTypeId, charts, withHoldTax</td>
</tr>
</table>
</div>
<div class="method-example">
<p>Minimal request: accountNo auto generated, remaining details inherited from recurring deposit product.</p>
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts</code>
<code class="method-request">POST recurringdepositaccounts
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "02 June 2014",
"depositPeriod":"20",
"depositPeriodFrequencyId":"1",
"depositAmount":10000,
"isCalendarInherited":false,
"recurringFrequency":"2",
"recurringFrequencyType":1,
"mandatoryRecommendedDepositAmount":"2000"
}
</code>
<p>Minimal request: accountNo provided (must be unique), remaining details inherited from recurring deposit product.</p>
<code class="method-request">POST recurringdepositaccounts
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "02 June 2014",
"depositPeriod":"20",
"depositPeriodFrequencyId":"1",
"depositAmount":10000,
"isCalendarInherited":false,
"recurringFrequency":"2",
"recurringFrequencyType":1,
"mandatoryRecommendedDepositAmount":"2000",
"accountNo": "RD000023",
"externalId": "RD-23",
"expectedFirstDepositOnDate": "02 June 2014",
"allowWithdrawal":false,
"adjustAdvanceTowardsFuturePayments":false,
"isMandatoryDeposit":false
}
</code>
<p>Full request: accountNo provided (must be unique), remaining details override details from recurring deposit product (except currency).</p>
<code class="method-request">POST recurringdepositaccounts
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"fieldOfficerId": 1,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"submittedOnDate": "02 June 2014",
"depositPeriod":"20",
"depositPeriodFrequencyId":"1",
"depositAmount":10000,
"isCalendarInherited":false,
"recurringFrequency":"2",
"recurringFrequencyType":1,
"mandatoryRecommendedDepositAmount":"2000",
"accountNo": "RD000023",
"externalId": "RD-23",
"expectedFirstDepositOnDate": "02 June 2014",
"allowWithdrawal":false,
"adjustAdvanceTowardsFuturePayments":false,
"isMandatoryDeposit":false,
"interestCompoundingPeriodType": 1,
"interestPostingPeriodType": 4,
"interestCalculationType": 1,
"interestCalculationDaysInYearType": 365,
"lockinPeriodFrequency": 6,
"lockinPeriodFrequencyType": 2,
"charges":[{"id":"1"}]
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="rdaccounts_approve" name="rdaccounts_approve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Approve recurring deposit application</h2>
<p>Approves recurring deposit application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=approve</code>
<code class="method-request">POST recurringdepositaccounts/1?command=approve
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "01 March 2014"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 200,
"code": "savingsAccountStatusType.approved",
"value": "Approved",
"submittedAndPendingApproval": false,
"approved": true,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"approvedOnDate": "01 March 2014"
}
}
</code>
</div>
</div>
<a id="rdaccounts_undoapproval" name="rdaccounts_undoapproval" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Undo approval recurring deposit application</h2>
<p>Will move 'approved' recurring deposit application back to 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=undoApproval</code>
<code class="method-request">POST recurringdepositaccounts/1?command=undoApproval
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"approvedOnDate": ""
}
}
</code>
</div>
</div>
<a id="rdaccounts_reject" name="rdaccounts_reject" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Reject recurring deposit application</h2>
<p>Rejects recurring deposit application so long as its in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=reject</code>
<code class="method-request">POST recurringdepositaccounts/1?command=reject
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "03 March 2014"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 500,
"code": "savingsAccountStatusType.rejected",
"value": "Rejected",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": true,
"withdrawnByApplicant": false,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"rejectedOnDate": "03 March 2014",
"closedOnDate": "03 March 2014"
}
}
</code>
</div>
</div>
<a id="rdaccounts_withdrawbyapplicant" name="rdaccounts_withdrawbyapplicant" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Withdraw recurring deposit application</h2>
<p>Used when an applicant withdraws from the recurring deposit application. It must be in 'Submitted and pending approval' state.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{savingsId}?command=withdrawnByApplicant</code>
<code class="method-request">POST recurringdepositaccounts/1?command=withdrawnByApplicant
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "03 March 2014"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 400,
"code": "savingsAccountStatusType.withdrawn.by.applicant",
"value": "Withdrawn by applicant",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": true,
"active": false,
"closed": true
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "03 March 2014",
"closedOnDate": "03 March 2014"
}
}
</code>
</div>
</div>
<a id="rdaccounts_activate" name="rdaccounts_activate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Activate a recurring deposit account</h2>
<p>Results in an approved recurring deposit application being converted into an 'active' recurring deposit account.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=activate</code>
<code class="method-request">POST recurringdepositaccounts/1?command=activate
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedOnDate": "01 March 2013"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"activatedOnDate": "01 March 2013"
}
}
</code>
</div>
</div>
<a id="rdaccounts_update_deposit_amount" name="rdaccounts_update_deposit_amount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Update the recommended deposit amount for a recurring deposit account</h2>
<p>Updates the recommended deposit amount for a RD account as on the effective date.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=updateDepositAmount</code>
<code class="method-request">POST recurringdepositaccounts/4?command=updateDepositAmount
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"effectiveDate": "01 Dec 2014"
"mandatoryRecommendedDepositAmount": 398
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 6,
"savingsId": 4,
"resourceId": 4,
"changes":
{
"mandatoryRecommendedDepositAmount": 398
}
}
</code>
</div>
</div>
<a id="rdaccounts_close" name="rdaccounts_close" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Close a recurring deposit account</h2>
<p>Results in a Matured recurring deposit account being converted into a 'closed' recurring deposit account.</p> <p>On account close allowed actions are.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Action on Close</td>
<td class="fineractHeading2">Result</td>
</tr>
</thead>
<tbody>
<tr>
<td>Withdraw Deposit &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>Matured amount withdrawn and paid to client</td>
</tr>
<tr>
<td>Transfer to Savings</td>
<td>Matured amount transfered to specified savings account.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Re-Invest</td>
<td>Create new Fixed deposit application with matured amount as deposit amount.</td>
</tr>
</tbody>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=close</code>
<code class="method-request">POST recurringdepositaccounts/1?command=close
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"19 April 2014",
"note":"Closing and transfering amount to savings",
"onAccountClosureId":"100",
"transferDescription":"Transfered matured amount to savings account"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":1,
"savingsId":5,
"resourceId":5,
"changes":{
"status":{
"id":600,
"code":"savingsAccountStatusType.closed",
"value":"Closed",
"submittedAndPendingApproval":false,
"approved":false,
"rejected":false,
"withdrawnByApplicant":false,
"active":false,
"closed":true
},
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"closedOnDate":"19 April 2014",
"note":"Closing and transfering amount to savings"
}
}
</code>
</div>
</div>
<a id="rdaccounts_prematureclose" name="rdaccounts_prematureclose" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Premature Close a recurring deposit account</h2>
<p>Results in an Active recurring deposit account being converted into a 'Premature Closed' recurring deposit account with options to withdraw prematured amount. (premature amount is calculated using interest rate chart applicable along with penal interest if any.)</p> <p>On account premature closure allowed actions are.</p>
<table class=matrixHeading>
<thead>
<tr class="matrixHeadingBG">
<td class="fineractHeading2">Action on Premature Close</td>
<td class="fineractHeading2">Result</td>
</tr>
</thead>
<tbody>
<tr>
<td>Withdraw Deposit &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>Matured amount withdrawn and paid to client</td>
</tr>
<tr>
<td>Transfer to Savings</td>
<td>Matured amount transfered to a savings account.</td>
</tr>
</tbody>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=prematureClose</code>
<code class="method-request">POST recurringdepositaccounts/1?command=prematureClose
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"19 April 2014",
"note":"Close and transfer amount to savings",
"onAccountClosureId":"200",
"toSavingsAccountId":1,
"transferDescription":"Transfered matured amount to savings account"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"status": {
"id": 700,
"code": "savingsAccountStatusType.pre.mature.closure",
"value": "Premature Closed",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": true,
"transferInProgress": false,
"transferOnHold": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"closedOnDate": "19 April 2014",
"note": "Close and transfer amount to savings"
}
}
</code>
</div>
</div>
<a id="rdaccounts_calculate_premature_amount" name="rdaccounts_calculate_premature_amount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Calculate Premature amount on Recurring deposit account</h2>
<p>Calculate premature amount on recurring deposit till premature close date. Premature amount is calculated based on interest chart and penal interest applicable if any.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=calculatePrematureAmount</code>
<code class="method-request">POST recurringdepositaccounts/1?command=calculatePrematureAmount
Content-Type: application/json
Request Body:
{
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"closedOnDate":"19 April 2014"
}
</code>
<code class="method-response">
{
"maturityAmount": 100.65,
"savingsAccounts": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Sangamesh N",
"savingsProductId": 1,
"savingsProductName": "sa",
"fieldOfficerId": 0,
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false,
"prematureClosed": false,
"transferInProgress": false,
"transferOnHold": false
},
"timeline": {
"submittedOnDate": [
2014,
1,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"approvedOnDate": [
2014,
1,
1
],
"approvedByUsername": "mifos",
"approvedByFirstname": "App",
"approvedByLastname": "Administrator",
"activatedOnDate": [
2014,
1,
1
]
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"minRequiredOpeningBalance": 5000,
"withdrawalFeeForTransfers": false,
"allowOverdraft": false,
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"totalDeposits": 13353.41,
"totalInterestEarned": 107.79,
"totalInterestPosted": 76.74,
"accountBalance": 13430.15
}
}
],
"onAccountClosureOptions": [
{
"id": 100,
"code": "depositAccountClosureType.withdrawDeposit",
"value": "Withdra Deposit"
},
{
"id": 200,
"code": "depositAccountClosureType.transferToSavings",
"value": "Transfer to Savings"
},
{
"id": 300,
"code": "depositAccountClosureType.reinvest",
"value": "Re-Invest"
}
],
"paymentTypeOptions": [],
"id": 12,
"depositType": {
"id": 300,
"code": "depositAccountType.recurringDeposit",
"value": "Recurring Deposit"
}
}
</code>
</div>
</div>
<a id="rdaccounts_calculate_interest" name="rdaccounts_calculate_interest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Calculate Interest on recurring Deposit Account</h2>
<p>
Calculates interest earned on a recurring deposit account based on todays date. It does not attempt to <b>post or credit</b> the interest on the account. That is responsibility of the <a href="#rdaccounts_post_interest" >Post Interest API</a> that will likely be called by overnight process.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=calculateInterest</code>
<code class="method-request">POST recurringdepositaccounts/1?command=calculateInterest
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="rdaccounts_post_interest" name="rdaccounts_post_interest" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Post Interest on recurring Deposit Account</h2>
<p>
Calculates and Posts interest earned on a recurring deposit account based on todays date and whether an interest posting or crediting event is due.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountId}?command=postInterest</code>
<code class="method-request">POST recurringdepositaccounts/1?command=postInterest
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="rdaccounts_list" name="rdaccounts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>List Fixed deposit applications/accounts</h2>
<p>Example Requests:</p>
<div class=apiClick>recurringdepositaccounts</div>
<br><br>
<div class=apiClick>recurringdepositaccounts?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/recurringdepositaccounts</code>
<code class="method-response">
[
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Sangamesh N",
"savingsProductId": 3,
"savingsProductName": "RD01",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": false,
"transferInProgress": false,
"transferOnHold": false
},
"timeline": {
"submittedOnDate": [
2014,
3,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0
},
"depositAmount": 1150,
"maturityAmount": 252.59,
"maturityDate": [
2014,
4,
3
],
"recurringDepositAmount": 100,
"recurringDepositFrequency": 1,
"recurringDepositFrequencyType": {
"id": 2,
"code": "recurring.deposit.savingsPeriodFrequencyType.months",
"value": "Months"
},
"preClosurePenalApplicable": false,
"minDepositTerm": 3,
"maxDepositTerm": 4,
"minDepositTermType": {
"id": 2,
"code": "deposit.term.savingsPeriodFrequencyType.months",
"value": "Months"
},
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"depositAmount": 5000,
"maturityAmount": 5140.25,
"maturityDate": [
2014,
9,
1
],
"depositPeriod": 6,
"depositPeriodFrequency": {
"id": 2,
"code": "deposit.period.savingsPeriodFrequencyType.months",
"value": "Months"
}
}
]
</code>
</div>
</div>
<a id="rdaccounts_retrieve" name="rdaccounts_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve a recurring deposit application/account:</h2>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>associations</dt>
<dd>optional, <span>Either 'all' or a comma separated list of recurring deposit 'associations' (itemized below).</span></dd>
<dd><br>Associations are just extra pieces of data that you might or might not want to retrieve.<br><br></dd>
<dd><b>'all':</b> Gets data related to all associations e.g. ?associations=all.</dd>
<dd><b>'transactions':</b> Gets data related to transactions on the account e.g. ?associations=transactions</dd>
<dd><b>'charges':</b>recurring deposit Account charges data.</dd>
</dl>
<p>Example Requests : </p>
<div class=apiClick>recurringdepositaccounts/1</div>
<br><br>
<div class=apiClick>recurringdepositaccounts/1?associations=all</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/recurringdepositaccounts/{accountId}</code>
<code class="method-response">
{
"id": 1,
"accountNo": "RD000023",
"externalId": "RD-23",
"clientId": 1,
"clientName": "Sangamesh N",
"savingsProductId": 3,
"savingsProductName": "RD01",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false,
"prematureClosed": false,
"transferInProgress": false,
"transferOnHold": false
},
"timeline": {
"submittedOnDate": [
2014,
3,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"interestCompoundingPeriodType": {
"id": 4,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"preClosurePenalApplicable": false,
"minDepositTerm": 3,
"maxDepositTerm": 4,
"minDepositTermType": {
"id": 2,
"code": "deposit.term.savingsPeriodFrequencyType.months",
"value": "Months"
},
"maxDepositTermType": {
"id": 3,
"code": "deposit.term.savingsPeriodFrequencyType.years",
"value": "Years"
},
"recurringDepositAmount": 100,
"recurringDepositFrequency": 1,
"expectedFirstDepositOnDate": [
2014,
4,
2
],
"recurringDepositFrequencyType": {
"id": 2,
"code": "recurring.deposit.savingsPeriodFrequencyType.months",
"value": "Months"
},
"depositPeriod": 6,
"depositPeriodFrequency": {
"id": 2,
"code": "deposit.period.savingsPeriodFrequencyType.months",
"value": "Months"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 1,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0
},
"accountChart": {
"id": 4,
"fromDate": [
2013,
10,
2
],
"accountId": 5,
"accountNumber": "RD000023",
"chartSlabs": [
{
"id": 13,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 181,
"toPeriod": 365,
"annualInterestRate": 5.5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 12,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 1,
"toPeriod": 180,
"annualInterestRate": 5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 11,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 366,
"annualInterestRate": 6,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
],
"periodTypes": [
{
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
{
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "interestChartPeriodType.months",
"value": "Months"
},
{
"id": 3,
"code": "interestChartPeriodType.years",
"value": "Years"
}
]
}
}
</code>
</div>
</div>
<a id="rdaccounts_update" name="rdaccounts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Modify a recurring deposit application</h2>
<p>Recurring deposit application can only be modified when in 'Submitted and pending approval' state. Once the application is approved, the details cannot be changed using this method. Specific api endpoints will be created to allow change of interest detail such as rate, compounding period, posting period etc</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/recurringdepositaccounts/{accountId}</code>
<code class="method-request">PUT recurringdepositaccounts/1
Content-Type: application/json
No Request Body:
{
"locale": "en",
"depositAmount": 6000
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"savingsId": 1,
"resourceId": 1,
"changes": {
"depositAmount": 6000,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="rdaccounts_delete" name="rdaccounts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Delete a recurring deposit application</h2>
<p>At present we support <b>hard</b> delete of recurring deposit application so long as its in 'Submitted and pending approval' state. One the application is moves past this state, it is not possible to do a 'hard' delete of the application or the account. An API endpoint will be added to close/de-activate the recurring deposit account.</p>
</div>
<div class="method-example">
<code class="method-declaration">DELETE https://Domain Name/api/v1/recurringdepositaccounts/{accountsId}</code>
<code class="method-request">DELETE recurringdepositaccounts/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="recurringdepositaccounts_transactions" name="recurringdepositaccounts_transactions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Recurring Deposit Account Transactions:</h2>
<p>Transactions possible on a recurring deposit account.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>transactionDate</td></tr>
<tr><td class=fielddesc>The date of the transaction.</td></tr>
<tr class=alt><td>transactionAmount</td></tr>
<tr><td class=fielddesc>The amount of the transaction.</td></tr>
</table>
</div>
</div>
<a id="recurringdepositaccounts_transactions_template" name="recurringdepositaccounts_transactions_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Recurring Deposit Account Transaction Template:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Requests: </p>
<div class=apiClick>recurringdepositaccounts/1/transactions/template?command=deposit</div>
<br/>
<div class=apiClick>recurringdepositaccounts/1/transactions/template?command=withdrawal</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/recurringdepositaccounts/{accountId}/transactions/template?command=deposit
</code>
<code class="method-response">
{
"id": 1,
"transactionType": {
"id": 1,
"code": "savingsAccountTransactionType.deposit",
"value": "Deposit",
"deposit": true,
"withdrawal": false,
"interestPosting": false,
"feeDeduction": false,
"initiateTransfer": false,
"approveTransfer": false,
"withdrawTransfer": false,
"rejectTransfer": false,
"overdraftInterest": false,
"writtenoff": false,
"overdraftFee": true
},
"accountId": 1,
"accountNo": "000000001",
"date": [
2014,
6,
25
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 4,
"inMultiplesOf": 100,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100000.000000,
"reversed": false,
"paymentTypeOptions": []
}
</code>
</div>
</div>
<a id="recurringdepositaccounts_transaction" name="recurringdepositaccounts_transaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Recurring Deposit Account Transaction:</h2>
<p>Example Requests: </p>
<div class=apiClick>recurringdepositaccounts/1/transactions/1</div>
<br/>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/recurringdepositaccounts/{accountId}/transactions/{transactionId}
</code>
<code class="method-response">
{
"id": 1,
"transactionType": {
"id": 2,
"code": "savingsAccountTransactionType.withdrawal",
"value": "Withdrawal",
"deposit": false,
"withdrawal": true,
"interestPosting": false,
"feeDeduction": false
},
"accountId": 1,
"accountNo": "000000001",
"date": [
2013,
8,
7
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"paymentDetailData": {
"id": 62,
"paymentType": {
"id": 11,
"name": "cash"
},
"accountNumber": "",
"checkNumber": "",
"routingCode": "",
"receiptNumber": "",
"bankNumber": ""
},
"amount": 5000,
"runningBalance": 0,
"reversed": true
}
</code>
</div>
</div>
<a id="recurringdepositaccounts_deposit" name="recurringdepositaccounts_deposit" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Deposit Transaction</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountsId}/transactions?command=deposit</code>
<code class="method-request">POST recurringdepositaccounts/1/transactions?command=deposit
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "27 May 2013",
"transactionAmount": "500",
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 47,
"changes": {
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="recurringdepositaccounts_withdrawal" name="recurringdepositaccounts_withdrawal" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Withdrawal Transaction</h2>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountsId}/transactions?command=withdrawal</code>
<code class="method-request">POST recurringdepositaccounts/1/transactions?command=withdrawal
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "27 May 2013",
"transactionAmount": "500",
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 48,
"changes": {
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="recurringdepositaccounts_adjusttransaction" name="recurringdepositaccounts_adjusttransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Adjust Transaction</h2>
<p>This command modifies the given transaction.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountsId}/transactions/{transactionId}?command=modify</code>
<code class="method-request">POST recurringdepositaccounts/1/transactions/1?command=modify
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "27 May 2013",
"transactionAmount": "500",
"paymentTypeId": "14",
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 48,
"changes": {
"accountNumber": "acc123",
"checkNumber": "che123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
}
</code>
</div>
</div>
<a id="recurringdepositaccounts_undotransaction" name="recurringdepositaccounts_undotransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Undo transaction</h2>
<p>This command reverses the given transaction.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/recurringdepositaccounts/{accountsId}/transactions/{transactionId}?command=undo</code>
<code class="method-request">POST recurringdepositaccounts/1/transactions/1?command=undo
Content-Type: application/json
No Request Body:
{
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 2,
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of recurring deposit accounts api -->
<!-- account transfers -->
<a id="accounttransfers" name="accounttransfers" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Account Transfers:</h2>
<p>Ability to be able to transfer monetary funds from one account to another.</p>
<p>Note: At present only savings account to savings account transfers are supported.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Parameters</div></td></tr>
<tr class=alt><td>fromOfficeId</td></tr>
<tr><td class=fielddesc>The id of the office/branch from which the transfer is made.</td></tr>
<tr class=alt><td>fromClientId</td></tr>
<tr><td class=fielddesc>The id of the client from which the transfer is made.</td></tr>
<tr class=alt><td>fromAccountType</td></tr>
<tr><td class=fielddesc>The type of account from which the transfer is made. 1=Loan Account, 2=Savings Account</td></tr>
<tr class=alt><td>fromAccountId</td></tr>
<tr><td class=fielddesc>The id of the account from which the transfer is made.</td></tr>
<tr class=alt><td>toOfficeId</td></tr>
<tr><td class=fielddesc>The id of the office/branch to which the transfer is made.</td></tr>
<tr class=alt><td>toClientId</td></tr>
<tr><td class=fielddesc>The id of the client to which the transfer is made.</td></tr>
<tr class=alt><td>toAccountType</td></tr>
<tr><td class=fielddesc>The type of account to which the transfer is made. 1=Loan Account, 2=Savings Account</td></tr>
<tr class=alt><td>toAccountId</td></tr>
<tr><td class=fielddesc>The id of the account to which the transfer is made. The accouont must be <i>active</i> and must have the same currency as that of the selected <b>fromAccountId</b>.</td></tr>
<tr class=alt><td>transferDate</td></tr>
<tr><td class=fielddesc>The date of the transfer. Requires <i>dateFormat</i> and <i>locale</i> parameters.</td></tr>
<tr class=alt><td>transferAmount</td></tr>
<tr><td class=fielddesc>The amount of the transfer. Requires <i>locale</i> parameter.</td></tr>
<tr class=alt><td>transferDescription</td></tr>
<tr><td class=fielddesc>Description of the transfer itself.</td></tr>
</table>
</div>
</div>
<a id="accounttransfers_template" name="accounttransfers_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Account Transfer Template:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Requests:</p>
<div class=apiClick>accounttransfers/template?fromAccountType=2&fromOfficeId=1</div>
<br/>
<div class=apiClick>accounttransfers/template?fromAccountType=2&fromOfficeId=1&fromClientId=1</div>
<br/>
<div class=apiClick>accounttransfers/template?fromClientId=1&fromAccountType=2&fromAccountId=1</div>
<br/>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounttransfers/template?fromAccountType=2&fromOfficeId=1
</code>
<code class="method-response">
{
"transferAmount": 0,
"transferDate": [
2013,
8,
15
],
"fromOffice": {
"id": 1,
"name": "HO",
"nameDecorated": "HO",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromOfficeOptions": [
{
"id": 1,
"name": "HO",
"nameDecorated": "HO"
},
{
"id": 2,
"name": "Branch 1",
"nameDecorated": "....Branch 1"
}
],
"fromClientOptions": [
{
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
{
"id": 3,
"displayName": "Third client",
"officeId": 1,
"officeName": "HO"
}
],
"fromAccountTypeOptions": [
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
],
"toOfficeOptions": [
{
"id": 1,
"name": "HO",
"nameDecorated": "HO"
},
{
"id": 2,
"name": "Branch 1",
"nameDecorated": "....Branch 1"
}
],
"toAccountTypeOptions": [
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounttransfers/template?fromAccountType=2&fromOfficeId=1&fromClientId=1
</code>
<code class="method-response">
{
"transferAmount": 0,
"transferDate": [
2013,
8,
15
],
"fromOffice": {
"id": 1,
"name": "HO",
"nameDecorated": "HO",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
},
"fromClient": {
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2013,
3,
1
],
"fullname": "Small shop",
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO",
"groups": []
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromOfficeOptions": [
{
"id": 1,
"name": "HO",
"nameDecorated": "HO"
},
{
"id": 2,
"name": "Branch 1",
"nameDecorated": "....Branch 1"
}
],
"fromClientOptions": [
{
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
{
"id": 3,
"displayName": "Third client",
"officeId": 1,
"officeName": "HO"
}
],
"fromAccountTypeOptions": [
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
],
"fromAccountOptions": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Small shop",
"productId": 1,
"productName": "Passbook",
"fieldOfficerId": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 3,
"accountNo": "000000003",
"clientId": 1,
"clientName": "Small shop",
"productId": 2,
"productName": "Shilling product",
"fieldOfficerId": 0,
"currency": {
"code": "KES",
"name": "Kenyan Shilling",
"decimalPlaces": 0,
"inMultiplesOf": 0,
"displaySymbol": "KSh",
"nameCode": "currency.KES",
"displayLabel": "Kenyan Shilling (KSh)"
}
}
],
"toOfficeOptions": [
{
"id": 1,
"name": "HO",
"nameDecorated": "HO"
},
{
"id": 2,
"name": "Branch 1",
"nameDecorated": "....Branch 1"
}
],
"toAccountTypeOptions": [
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounttransfers/template?fromClientId=1&fromAccountType=2&fromAccountId=1
</code>
<code class="method-response">
{
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"transferAmount": 0,
"transferDate": [
2013,
8,
15
],
"fromOffice": {
"id": 1,
"name": "HO",
"nameDecorated": "HO",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
},
"fromClient": {
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2013,
3,
1
],
"fullname": "Small shop",
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO",
"groups": []
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Small shop",
"productId": 1,
"productName": "Passbook",
"fieldOfficerId": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
"fromOfficeOptions": [
{
"id": 1,
"name": "HO",
"nameDecorated": "HO"
},
{
"id": 2,
"name": "Branch 1",
"nameDecorated": "....Branch 1"
}
],
"fromClientOptions": [
{
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
{
"id": 3,
"displayName": "Third client",
"officeId": 1,
"officeName": "HO"
}
],
"fromAccountTypeOptions": [
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
],
"fromAccountOptions": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "Small shop",
"productId": 1,
"productName": "Passbook",
"fieldOfficerId": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 3,
"accountNo": "000000003",
"clientId": 1,
"clientName": "Small shop",
"productId": 2,
"productName": "Shilling product",
"fieldOfficerId": 0,
"currency": {
"code": "KES",
"name": "Kenyan Shilling",
"decimalPlaces": 0,
"inMultiplesOf": 0,
"displaySymbol": "KSh",
"nameCode": "currency.KES",
"displayLabel": "Kenyan Shilling (KSh)"
}
}
],
"toOfficeOptions": [
{
"id": 1,
"name": "HO",
"nameDecorated": "HO"
},
{
"id": 2,
"name": "Branch 1",
"nameDecorated": "....Branch 1"
}
],
"toAccountTypeOptions": [
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
]
}
</code>
</div>
</div>
<a id="accounttransfers_create" name="accounttransfers_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Create new Transfer</h2>
<p>Ability to create new transfer of monetary funds from one account to another.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounttransfers</code>
<code class="method-request">POST accounttransfers/
Content-Type: application/json
No Request Body:
{
"fromOfficeId": 1,
"fromClientId": 1,
"fromAccountType": 2,
"fromAccountId": 1,
"toOfficeId": 1,
"toClientId": 1,
"toAccountType": 2,
"toAccountId": 2,
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transferDate": "01 August 2011",
"transferAmount": "112.45",
"transferDescription": "A description of the transfer"
}
</code>
<code class="method-response">
{
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="accounttransfers_list" name="accounttransfers_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>List account transfers</h2>
<p>Example Requests:</p>
<div class=apiClick>accounttransfers</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/accounttransfers</code>
<code class="method-response">
{
"totalFilteredRecords": 4,
"pageItems": [
{
"id": 1,
"reversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"transferAmount": 200,
"transferDate": [
2013,
4,
1
],
"transferDescription": "pay off loan from savings.",
"fromOffice": {
"id": 1,
"name": "HO"
},
"fromClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001"
},
"toOffice": {
"id": 1,
"name": "HO"
},
"toClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"toAccountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"toAccount": {
"id": 1,
"accountNo": "000000001"
}
},
{
"id": 2,
"reversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"transferAmount": 112.45,
"transferDate": [
2013,
6,
1
],
"transferDescription": "A description of the transfer",
"fromOffice": {
"id": 1,
"name": "HO"
},
"fromClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001"
},
"toOffice": {
"id": 1,
"name": "HO"
},
"toClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 3,
"accountNo": "000000003"
}
},
{
"id": 3,
"reversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"transferAmount": 112.45,
"transferDate": [
2013,
6,
1
],
"transferDescription": "A description of the transfer",
"fromOffice": {
"id": 1,
"name": "HO"
},
"fromClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001"
},
"toOffice": {
"id": 1,
"name": "HO"
},
"toClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 3,
"accountNo": "000000003"
}
},
{
"id": 4,
"reversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"transferAmount": 112.45,
"transferDate": [
2013,
6,
1
],
"transferDescription": "A description of the transfer",
"fromOffice": {
"id": 1,
"name": "HO"
},
"fromClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001"
},
"toOffice": {
"id": 1,
"name": "HO"
},
"toClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 3,
"accountNo": "000000003"
}
}
]
}
</code>
</div>
</div>
<a id="accounttransfers_retrieve" name="accounttransfers_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve account transfer:</h2>
<p>Example Requests : </p>
<div class=apiClick>accounttransfers/1</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/accounttransfers/{transferId}</code>
<code class="method-response">
{
"id": 1,
"reversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"transferAmount": 200,
"transferDate": [
2013,
4,
1
],
"transferDescription": "pay off loan from savings.",
"fromOffice": {
"id": 1,
"name": "HO"
},
"fromClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001"
},
"toOffice": {
"id": 1,
"name": "HO"
},
"toClient": {
"id": 1,
"displayName": "Small shop",
"officeId": 1,
"officeName": "HO"
},
"toAccountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"toAccount": {
"id": 1,
"accountNo": "000000001"
}
}
</code>
</div>
</div>
<a id="accounttransfers_retrieve_template_refund_by_transfer" name="accounttransfers_retrieve_template_refund_by_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Refund of an Active Loan by Transfer Template:</h2>
<p>Example Requests : </p>
<div class=apiClick>accounttransfers/templateRefundByTransfer?fromAccountId=2&fromAccountType=1&
toAccountId=1&toAccountType=2&toClientId=1&toOfficeId=1</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/accounttransfers/templateRefundByTransfer</code>
<code class="method-response">
{
   "currency": {
      "code": "USD",
      "name": "US Dollar",
      "decimalPlaces": 0,
      "inMultiplesOf": 0,
      "displaySymbol": "$",
      "nameCode": "currency.USD",
      "displayLabel": "US Dollar ($)"
   },
   "transferAmount": 130,
   "transferDate": [
      2014,
      11,
      1
   ],
   "fromOffice": {
      "id": 1,
      "name": "Head Office",
      "nameDecorated": "Head Office",
      "externalId": "1",
      "openingDate": [
         2009,
         1,
         1
      ],
      "hierarchy": "."
   },
   "fromClient": {
      "id": 1,
      "accountNo": "000000001",
      "status": {
         "id": 300,
         "code": "clientStatusType.active",
         "value": "Active"
      },
      "active": true,
      "activationDate": [
         2012,
         2,
         1
      ],
      "firstname": "Daniel",
      "lastname": "Owusu",
      "displayName": "Daniel Owusu",
      "gender": {},
      "clientType": {},
      "clientClassification": {},
      "officeId": 1,
      "officeName": "Head Office",
      "timeline": {
         "submittedOnDate": [
            2012,
            2,
            1
         ],
         "submittedByUsername": "mifos",
         "submittedByFirstname": "App",
         "submittedByLastname": "Administrator",
         "activatedOnDate": [
            2012,
            2,
            1
         ],
         "activatedByUsername": "mifos",
         "activatedByFirstname": "App",
         "activatedByLastname": "Administrator"
      },
      "groups": []
   },
   "fromAccountType": {
      "id": 1,
      "code": "accountType.loan",
      "value": "Loan Account"
   },
   "fromAccount": {
      "id": 2,
      "accountNo": "000000002",
      "clientId": 1,
      "clientName": "Daniel Owusu",
      "productId": 1,
      "productName": "CTRL",
      "fieldOfficerId": 0,
      "currency": {
         "code": "USD",
         "name": "US Dollar",
         "decimalPlaces": 0,
         "inMultiplesOf": 0,
         "displaySymbol": "$",
         "nameCode": "currency.USD",
         "displayLabel": "US Dollar ($)"
      },
      "amtForTransfer": 130
   },
   "toOffice": {
      "id": 1,
      "name": "Head Office",
      "nameDecorated": "Head Office",
      "externalId": "1",
      "openingDate": [
         2009,
         1,
         1
      ],
      "hierarchy": "."
   },
   "toClient": {
      "id": 1,
      "displayName": "Daniel Owusu",
      "officeId": 1,
      "officeName": "Head Office"
   },
   "toAccountType": {
      "id": 2,
      "code": "accountType.savings",
      "value": "Savings Account"
   },
   "toAccount": {
      "id": 1,
      "accountNo": "000000001",
      "clientId": 1,
      "clientName": "Daniel Owusu",
      "productId": 1,
      "productName": "TEST",
      "fieldOfficerId": 0,
      "currency": {
         "code": "USD",
         "name": "US Dollar",
         "decimalPlaces": 0,
         "inMultiplesOf": 0,
         "displaySymbol": "$",
         "nameCode": "currency.USD",
         "displayLabel": "US Dollar ($)"
      }
   },
   "fromOfficeOptions": [
      {
         "id": 1,
         "name": "Head Office",
         "nameDecorated": "Head Office"
      }
   ],
   "fromClientOptions": [
      {
         "id": 1,
         "displayName": "Daniel Owusu",
         "officeId": 1,
         "officeName": "Head Office"
      }
   ],
   "fromAccountTypeOptions": [
      {
         "id": 2,
         "code": "accountType.savings",
         "value": "Savings Account"
      },
      {
         "id": 1,
         "code": "accountType.loan",
         "value": "Loan Account"
      }
   ],
   "fromAccountOptions": [
      {
         "id": 2,
         "accountNo": "000000002",
         "clientId": 1,
         "clientName": "Daniel Owusu",
         "productId": 1,
         "productName": "CTRL",
         "fieldOfficerId": 0,
         "currency": {
            "code": "USD",
            "name": "US Dollar",
            "decimalPlaces": 0,
            "inMultiplesOf": 0,
            "displaySymbol": "$",
            "nameCode": "currency.USD",
            "displayLabel": "US Dollar ($)"
         }
      }
   ],
   "toOfficeOptions": [
      {
         "id": 1,
         "name": "Head Office",
         "nameDecorated": "Head Office"
      }
   ],
   "toClientOptions": [
      {
         "id": 1,
         "displayName": "Daniel Owusu",
         "officeId": 1,
         "officeName": "Head Office"
      }
   ],
   "toAccountTypeOptions": [
      {
         "id": 2,
         "code": "accountType.savings",
         "value": "Savings Account"
      }
   ],
   "toAccountOptions": [
      {
         "id": 1,
         "accountNo": "000000001",
         "clientId": 1,
         "clientName": "Daniel Owusu",
         "productId": 1,
         "productName": "TEST",
         "fieldOfficerId": 0,
         "currency": {
            "code": "USD",
            "name": "US Dollar",
            "decimalPlaces": 0,
            "inMultiplesOf": 0,
            "displaySymbol": "$",
            "nameCode": "currency.USD",
            "displayLabel": "US Dollar ($)"
         }
      }
   ]
}
</code>
</div>
</div>
<a id="accounttransfers_refund_by_transfer" name="accounttransfers_refund_by_transfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Refund of an Active Loan by Transfer</h2>
<p>Ability to refund an active loan by transferring to a savings account.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/accounttransfers</code>
<code class="method-request">POST refundByTransfer/
Content-Type: application/json
No Request Body:
{
"fromAccountId": "2",
"fromAccountType": 1,
"toOfficeId": 1,
"toClientId": 1,
"toAccountType": 2,
"toAccountId": 1,
"transferAmount": 130,
"transferDate": "31 October 2014",
"transferDescription": "Transfer refund to my savings account",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"fromClientId": 1,
"fromOfficeId": 1
}
</code>
<code class="method-response">
{
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of acount transfers api -->
<!-- Start Account Trasfer Standing Instrution-->
<a id="standinginstruction" name="standinginstruction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Standing Instructions</h2>
<p>Standing instructions (or standing orders) refer to instructions a bank account holder ("the payer") gives to his or her bank to pay a set amount at regular intervals to another's ("the payee's") account.</p>
<p>Note: At present only savings account to savings account and savings account to Loan account transfers are permitted.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Mandatory Parameters</div></td></tr>
<tr class=alt><td>name</td></tr>
<tr><td class=fielddesc>A name for this Standing Instruction</td></tr>
<tr class=alt><td>fromOfficeId</td></tr>
<tr><td class=fielddesc>The id of the office/branch from which the transfer is made.</td></tr>
<tr class=alt><td>fromClientId</td></tr>
<tr><td class=fielddesc>The id of the client (payer) who makes the transfer</td></tr>
<tr class=alt><td>fromAccountType</td></tr>
<tr><td class=fielddesc>The type of account from which the transfer is made. 1=Loan Account, 2=Savings Account</td></tr>
<tr class=alt><td>fromAccountId</td></tr>
<tr><td class=fielddesc>The id of the account from which the transfer is made.</td></tr>
<tr class=alt><td>toOfficeId</td></tr>
<tr><td class=fielddesc>The id of the office/branch to which the transfer is made.</td></tr>
<tr class=alt><td>toClientId</td></tr>
<tr><td class=fielddesc>The id of the client (payee), to whose account the transfer is made.</td></tr>
<tr class=alt><td>toAccountType</td></tr>
<tr><td class=fielddesc>The type of account to which the transfer is made. 1=Loan Account, 2=Savings Account</td></tr>
<tr class=alt><td>toAccountId</td></tr>
<tr><td class=fielddesc>The id of the account to which the transfer is made. The account must be <i>active</i> and must be in the same currency as that of the selected <b>fromAccountId</b>.</td></tr>
<tr class=alt><td>priority</td></tr>
<tr><td class=fielddesc>The priority of instruction while executing instructions. 1= URGENT,2 = HIGH, 3 = MEDIUM, 4 = LOW </td></tr>
<tr class=alt><td>transferType</td></tr>
<tr><td class=fielddesc>Identifies the source and destination account types. 1=Account Transfer(savings to savings), 2=Loan Repayment</td></tr>
<tr class=alt><td>instructionType</td></tr>
<tr><td class=fielddesc>Determines the amount to be transferred while executing a standing instruction. 1. FIXED, 2.DUES</td></tr>
<tr class=alt><td>status</td></tr>
<tr><td class=fielddesc>The Standing instruction state. 1. Active, 2.Disabled, 3.Deleted</td></tr>
<tr class=alt><td>recurrenceType</td></tr>
<tr><td class=fielddesc>Determines the recurrence of this standing instruction, can be either 1. Periodic or 2.As per dues</td></tr>
<tr class=alt><td>validFrom</td></tr>
<tr><td class=fielddesc>The Standing instruction's Start date.</td></tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="fineractHeading2">Optional Parameters</div></td></tr>
<tr class=alt><td>amount</td></tr>
<tr><td class=fielddesc>Transfer amount while running the instruction. must be provided if the selected <b>instructionType</b> is fixed</td></tr>
<tr class=alt><td>validTill</td></tr>
<tr><td class=fielddesc>The Standing instruction's end date.</td></tr>
<tr class=alt><td>recurrenceFrequency</td></tr>
<tr><td class=fielddesc>The recurrence frequency of a Standing instruction's execution. Must be provided if the <b>recurrenceType</b> is Periodic. 0 = days, 1 = weekly, 2 = monthly, 3 = yearly</td></tr>
<tr class=alt><td>recurrenceInterval</td></tr>
<tr><td class=fielddesc>The recurrence interval of a standing instruction execution, determines the recurrence schedule when combined with <b>recurrenceFrequency</b>. Must be provided if the <b>recurrenceType</b> is periodic</td></tr>
<tr class=alt><td>recurrenceOnMonthDay</td></tr>
<tr><td class=fielddesc>The Month and Day of recurrence. Must be provided if the <b>recurrenceFrequency</b> is monthly or yearly</td></tr>
</table>
</div>
</div>
<a id="standinginstruction_template" name="standinginstruction_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Standing Instruction Template:</h2>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Requests:</p>
<div class=apiClick>standinginstructions/template?fromAccountType=2&fromOfficeId=1</div>
<br/>
<div class=apiClick>standinginstructions/template?fromAccountType=2&fromOfficeId=1&fromClientId=1&transferType=1</div>
<br/>
<div class=apiClick>standinginstructions/template?fromClientId=1&fromAccountType=2&fromAccountId=1&transferType=1</div>
<br/>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/standinginstructions/template?fromAccountType=2&fromOfficeId=1
</code>
<code class="method-response">
{
"fromOffice": {
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromOfficeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"fromClientOptions": [
{
"id": 1,
"displayName": "Client_FirstName_2VRAG Client_LastName_9QCY",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 20,
"displayName": "Client_FirstName_9KYLE Client_LastName_I0GJ",
"officeId": 1,
"officeName": "Head Office"
}
],
"fromAccountTypeOptions": [
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
}
],
"toOfficeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"toAccountTypeOptions": [
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
],
"transferTypeOptions": [
{
"id": 1,
"code": "accountTransferType.account.transfer",
"value": "Account Transfer"
},
{
"id": 2,
"code": "accountTransferType.loan.repayment",
"value": "Loan Repayment"
}
],
"statusOptions": [
{
"id": 1,
"code": "standingInstructionStatus.active",
"value": "Active"
},
{
"id": 2,
"code": "standingInstructionStatus.disabled",
"value": "Disabled"
}
],
"instructionTypeOptions": [
{
"id": 1,
"code": "standingInstructionType.fixed",
"value": "Fixed"
},
{
"id": 2,
"code": "standingInstructionType.dues",
"value": "Dues"
}
],
"priorityOptions": [
{
"id": 1,
"code": "standingInstructionPriority.urgent",
"value": "Urgent Priority"
},
{
"id": 2,
"code": "standingInstructionPriority.high",
"value": "High Priority"
},
{
"id": 3,
"code": "standingInstructionPriority.medium",
"value": "Medium Priority"
},
{
"id": 4,
"code": "standingInstructionPriority.low",
"value": "Low Priority"
}
],
"recurrenceTypeOptions": [
{
"id": 1,
"code": "accountTransferRecurrenceType.periodic",
"value": "Periodic Recurrence"
},
{
"id": 2,
"code": "accountTransferRecurrenceType.as.per.dues",
"value": "As Per Dues Recurrence"
}
],
"recurrenceFrequencyOptions": [
{
"id": 0,
"code": "frequencyperiodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "frequencyperiodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "frequencyperiodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "frequencyperiodFrequencyType.years",
"value": "Years"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/standinginstructions/template?fromAccountType=2&fromOfficeId=1&fromClientId=1&transferType=1
</code>
<code class="method-response">
{
"fromOffice": {
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
},
"fromClient": {
"id": 1,
"accountNo": "000000001",
"externalId": "ID_UTMYOEQ",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2011,
1,
1
],
"firstname": "Client_FirstName_2VRAG",
"lastname": "Client_LastName_9QCY",
"displayName": "Client_FirstName_2VRAG Client_LastName_9QCY",
"officeId": 1,
"officeName": "Head Office",
"timeline": {
"submittedOnDate": [
2011,
1,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"activatedOnDate": [
2011,
1,
1
],
"activatedByUsername": "mifos",
"activatedByFirstname": "App",
"activatedByLastname": "Administrator"
},
"groups": []
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromOfficeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"fromClientOptions": [
{
"id": 1,
"displayName": "Client_FirstName_2VRAG Client_LastName_9QCY",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 2,
"displayName": "Client_FirstName_ZYDN2 Client_LastName_XVOP",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 3,
"displayName": "Client_FirstName_89LYT Client_LastName_4EY6",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 4,
"displayName": "Client_FirstName_PRCBG Client_LastName_JZU2",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 5,
"displayName": "Client_FirstName_J37GR Client_LastName_1T3X",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 6,
"displayName": "Client_FirstName_ZVHM2 Client_LastName_RUGS",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 7,
"displayName": "Client_FirstName_RBALP Client_LastName_437P",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 8,
"displayName": "Client_FirstName_R7M4V Client_LastName_Q5ED",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 9,
"displayName": "Client_FirstName_WIBDE Client_LastName_U91T",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 10,
"displayName": "Client_FirstName_26QJT Client_LastName_BEHD",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 11,
"displayName": "Client_FirstName_W071M Client_LastName_L7Z2",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 12,
"displayName": "Client_FirstName_QUHDJ Client_LastName_S4C5",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 13,
"displayName": "Client_FirstName_MNP4W Client_LastName_J8Y3",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 14,
"displayName": "Client_FirstName_TL6I8 Client_LastName_5YHG",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 15,
"displayName": "Client_FirstName_LUTBO Client_LastName_DITS",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 16,
"displayName": "Client_FirstName_UE39Z Client_LastName_PUWZ",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 17,
"displayName": "Client_FirstName_M8SD2 Client_LastName_J6QK",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 18,
"displayName": "Client_FirstName_SG8NF Client_LastName_BM1J",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 19,
"displayName": "Client_FirstName_BW0C8 Client_LastName_LGV9",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 20,
"displayName": "Client_FirstName_9KYLE Client_LastName_I0GJ",
"officeId": 1,
"officeName": "Head Office"
}
],
"fromAccountTypeOptions": [
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
],
"fromAccountOptions": [],
"toOfficeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"toAccountTypeOptions": [
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
}
],
"transferTypeOptions": [
{
"id": 1,
"code": "accountTransferType.account.transfer",
"value": "Account Transfer"
},
{
"id": 2,
"code": "accountTransferType.loan.repayment",
"value": "Loan Repayment"
}
],
"statusOptions": [
{
"id": 1,
"code": "standingInstructionStatus.active",
"value": "Active"
},
{
"id": 2,
"code": "standingInstructionStatus.disabled",
"value": "Disabled"
}
],
"instructionTypeOptions": [
{
"id": 1,
"code": "standingInstructionType.fixed",
"value": "Fixed"
},
{
"id": 2,
"code": "standingInstructionType.dues",
"value": "Dues"
}
],
"priorityOptions": [
{
"id": 1,
"code": "standingInstructionPriority.urgent",
"value": "Urgent Priority"
},
{
"id": 2,
"code": "standingInstructionPriority.high",
"value": "High Priority"
},
{
"id": 3,
"code": "standingInstructionPriority.medium",
"value": "Medium Priority"
},
{
"id": 4,
"code": "standingInstructionPriority.low",
"value": "Low Priority"
}
],
"recurrenceTypeOptions": [
{
"id": 1,
"code": "accountTransferRecurrenceType.periodic",
"value": "Periodic Recurrence"
},
{
"id": 2,
"code": "accountTransferRecurrenceType.as.per.dues",
"value": "As Per Dues Recurrence"
}
],
"recurrenceFrequencyOptions": [
{
"id": 0,
"code": "frequencyperiodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "frequencyperiodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "frequencyperiodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "frequencyperiodFrequencyType.years",
"value": "Years"
}
]
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/standinginstructions/template?fromAccountType=2&fromOfficeId=1&fromClientId=1&transferType=2&fromAccountId=1
</code>
<code class="method-response">
{
"fromOffice": {
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office",
"externalId": "1",
"openingDate": [
2009,
1,
1
],
"hierarchy": "."
},
"fromClient": {
"id": 3,
"accountNo": "000000003",
"externalId": "ID_ECEAKAP",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2011,
3,
4
],
"firstname": "Client_FirstName_89LYT",
"lastname": "Client_LastName_4EY6",
"displayName": "Client_FirstName_89LYT Client_LastName_4EY6",
"officeId": 1,
"officeName": "Head Office",
"timeline": {
"submittedOnDate": [
2011,
3,
4
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"activatedOnDate": [
2011,
3,
4
],
"activatedByUsername": "mifos",
"activatedByFirstname": "App",
"activatedByLastname": "Administrator"
},
"groups": []
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001",
"clientId": 3,
"clientName": "Client_FirstName_89LYT Client_LastName_4EY6",
"productId": 1,
"productName": "SAVINGS_PRODUCT_MVA619",
"fieldOfficerId": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 4,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
"fromOfficeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"fromClientOptions": [
{
"id": 1,
"displayName": "Client_FirstName_2VRAG Client_LastName_9QCY",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 2,
"displayName": "Client_FirstName_ZYDN2 Client_LastName_XVOP",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 3,
"displayName": "Client_FirstName_89LYT Client_LastName_4EY6",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 4,
"displayName": "Client_FirstName_PRCBG Client_LastName_JZU2",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 5,
"displayName": "Client_FirstName_J37GR Client_LastName_1T3X",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 6,
"displayName": "Client_FirstName_ZVHM2 Client_LastName_RUGS",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 7,
"displayName": "Client_FirstName_RBALP Client_LastName_437P",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 8,
"displayName": "Client_FirstName_R7M4V Client_LastName_Q5ED",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 9,
"displayName": "Client_FirstName_WIBDE Client_LastName_U91T",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 10,
"displayName": "Client_FirstName_26QJT Client_LastName_BEHD",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 11,
"displayName": "Client_FirstName_W071M Client_LastName_L7Z2",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 12,
"displayName": "Client_FirstName_QUHDJ Client_LastName_S4C5",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 13,
"displayName": "Client_FirstName_MNP4W Client_LastName_J8Y3",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 14,
"displayName": "Client_FirstName_TL6I8 Client_LastName_5YHG",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 15,
"displayName": "Client_FirstName_LUTBO Client_LastName_DITS",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 16,
"displayName": "Client_FirstName_UE39Z Client_LastName_PUWZ",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 17,
"displayName": "Client_FirstName_M8SD2 Client_LastName_J6QK",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 18,
"displayName": "Client_FirstName_SG8NF Client_LastName_BM1J",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 19,
"displayName": "Client_FirstName_BW0C8 Client_LastName_LGV9",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 20,
"displayName": "Client_FirstName_9KYLE Client_LastName_I0GJ",
"officeId": 1,
"officeName": "Head Office"
}
],
"fromAccountTypeOptions": [
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
}
],
"fromAccountOptions": [
{
"id": 1,
"accountNo": "000000001",
"clientId": 3,
"clientName": "Client_FirstName_89LYT Client_LastName_4EY6",
"productId": 1,
"productName": "SAVINGS_PRODUCT_MVA619",
"fieldOfficerId": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 4,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
],
"toOfficeOptions": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"toAccountTypeOptions": [
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
}
],
"transferTypeOptions": [
{
"id": 1,
"code": "accountTransferType.account.transfer",
"value": "Account Transfer"
},
{
"id": 2,
"code": "accountTransferType.loan.repayment",
"value": "Loan Repayment"
}
],
"statusOptions": [
{
"id": 1,
"code": "standingInstructionStatus.active",
"value": "Active"
},
{
"id": 2,
"code": "standingInstructionStatus.disabled",
"value": "Disabled"
}
],
"instructionTypeOptions": [
{
"id": 1,
"code": "standingInstructionType.fixed",
"value": "Fixed"
},
{
"id": 2,
"code": "standingInstructionType.dues",
"value": "Dues"
}
],
"priorityOptions": [
{
"id": 1,
"code": "standingInstructionPriority.urgent",
"value": "Urgent Priority"
},
{
"id": 2,
"code": "standingInstructionPriority.high",
"value": "High Priority"
},
{
"id": 3,
"code": "standingInstructionPriority.medium",
"value": "Medium Priority"
},
{
"id": 4,
"code": "standingInstructionPriority.low",
"value": "Low Priority"
}
],
"recurrenceTypeOptions": [
{
"id": 1,
"code": "accountTransferRecurrenceType.periodic",
"value": "Periodic Recurrence"
},
{
"id": 2,
"code": "accountTransferRecurrenceType.as.per.dues",
"value": "As Per Dues Recurrence"
}
],
"recurrenceFrequencyOptions": [
{
"id": 0,
"code": "frequencyperiodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "frequencyperiodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "frequencyperiodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "frequencyperiodFrequencyType.years",
"value": "Years"
}
]
}
</code>
</div>
</div>
<a id="standinginstruction_create" name="standinginstruction_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Create new Standing Instruction</h2>
<p>Ability to create new instruction for transfer of monetary funds from one account to another.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/standinginstructions</code>
<code class="method-request">POST standinginstructions/
Content-Type: application/json
No Request Body:
{
"fromOfficeId":1,
"fromClientId":1,
"fromAccountType":2,
"name":"standing instruction",
"transferType":1,
"priority":2,
"status":1,
"fromAccountId":1,
"toOfficeId":1,
"toClientId":1,
"toAccountType":2,
"toAccountId":3,
"instructionType":1,
"amount":"221",
"validFrom":"08 April 2014",
"recurrenceType":1,
"recurrenceInterval":"1",
"recurrenceFrequency":2,
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"recurrenceOnMonthDay":"02 April",
"monthDayFormat":"dd MMMM"
}
</code>
<code class="method-response">
{
"clientId":1,
"resourceId":65
}
</code>
</div>
</div>
<a id="standinginstruction_update" name="standinginstruction_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Update Standing Instruction</h2>
<p>Ability to modify existing instruction for transfer of monetary funds from one account to another. </p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/standinginstructions/1?command=update</code>
<code class="method-request">PUT standinginstructions/1?command=update
Content-Type: application/json
No Request Body:
{
"recurrenceInterval":"2"
}
</code>
<code class="method-response">
{
"resourceId":20,
"changes":{
"recurrenceInterval":2
}
}
</code>
</div>
</div>
<a id="standinginstruction_delete" name="standinginstruction_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Delete Standing Instruction</h2>
<p>Ability to modify existing instruction for transfer of monetary funds from one account to another. </p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/standinginstructions/1?command=delete</code>
<code class="method-request">PUT standinginstructions/1?command=delete
Content-Type: application/json
No Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId":20,
"changes":{
"status":3
}
}
</code>
</div>
</div>
<a id="standinginstructions_list" name="standinginstructions_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>List Standing Instructions</h2>
<p>Example Requests:</p>
<div class=apiClick>standinginstructions</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/standinginstructions</code>
<code class="method-response">
{
"totalFilteredRecords": 2,
"pageItems": [
{
"id": 1,
"accountDetailId": 6,
"name": "test standing",
"fromOffice": {
"id": 1,
"name": "Head Office"
},
"fromClient": {
"id": 1,
"displayName": "Test test",
"officeId": 1,
"officeName": "Head Office"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 14,
"accountNo": "000000014",
"productId": 1,
"productName": "savings old"
},
"toOffice": {
"id": 1,
"name": "Head Office"
},
"toClient": {
"id": 1,
"displayName": "Test test",
"officeId": 1,
"officeName": "Head Office"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 3,
"accountNo": "000000003",
"productId": 4,
"productName": "account overdraft"
},
"transferType": {
"id": 1,
"code": "accountTransferType.account.transfer",
"value": "Account Transfer"
},
"priority": {
"id": 3,
"code": "standingInstructionPriority.medium",
"value": "Medium Priority"
},
"instructionType": {
"id": 1,
"code": "standingInstructionType.fixed",
"value": "Fixed"
},
"status": {
"id": 3,
"code": "standingInstructionStatus.deleted",
"value": "Deleted"
},
"amount": 150.000000,
"validFrom": [
2014,
4,
3
],
"recurrenceType": {
"id": 1,
"code": "accountTransferRecurrenceType.periodic",
"value": "Periodic Recurrence"
},
"recurrenceFrequency": {
"id": 2,
"code": "recurrenceperiodFrequencyType.months",
"value": "Months"
},
"recurrenceInterval": 1,
"recurrenceOnMonthDay": [
4,
3
]
},
{
"id": 2,
"accountDetailId": 7,
"name": "test standing 2",
"fromOffice": {
"id": 1,
"name": "Head Office"
},
"fromClient": {
"id": 1,
"displayName": "Test test",
"officeId": 1,
"officeName": "Head Office"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 14,
"accountNo": "000000014",
"productId": 1,
"productName": "savings old"
},
"toOffice": {
"id": 1,
"name": "Head Office"
},
"toClient": {
"id": 1,
"displayName": "Test test",
"officeId": 1,
"officeName": "Head Office"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 3,
"accountNo": "000000003",
"productId": 4,
"productName": "account overdraft"
},
"transferType": {
"id": 1,
"code": "accountTransferType.account.transfer",
"value": "Account Transfer"
},
"priority": {
"id": 2,
"code": "standingInstructionPriority.high",
"value": "High Priority"
},
"instructionType": {
"id": 1,
"code": "standingInstructionType.fixed",
"value": "Fixed"
},
"status": {
"id": 3,
"code": "standingInstructionStatus.deleted",
"value": "Deleted"
},
"amount": 100.000000,
"validFrom": [
2014,
4,
3
],
"recurrenceType": {
"id": 1,
"code": "accountTransferRecurrenceType.periodic",
"value": "Periodic Recurrence"
},
"recurrenceFrequency": {
"id": 2,
"code": "recurrenceperiodFrequencyType.months",
"value": "Months"
},
"recurrenceInterval": 1,
"recurrenceOnMonthDay": [
2,
1
]
}
]
} </code>
</div>
</div>
<a id="standinginstructions_retrieve" name="standinginstructions_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Standing Instruction:</h2>
<p>Example Requests : </p>
<div class=apiClick>standinginstructions/1</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/standinginstructions/{standingInstructionId}</code>
<code class="method-response">
{
"id": 1,
"accountDetailId": 6,
"name": "test standing",
"fromOffice": {
"id": 1,
"name": "Head Office"
},
"fromClient": {
"id": 1,
"displayName": "Test test",
"officeId": 1,
"officeName": "Head Office"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 14,
"accountNo": "000000014",
"productId": 1,
"productName": "savings old"
},
"toOffice": {
"id": 1,
"name": "Head Office"
},
"toClient": {
"id": 1,
"displayName": "Test test",
"officeId": 1,
"officeName": "Head Office"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 3,
"accountNo": "000000003",
"productId": 4,
"productName": "account overdraft"
},
"transferType": {
"id": 1,
"code": "accountTransferType.account.transfer",
"value": "Account Transfer"
},
"priority": {
"id": 3,
"code": "standingInstructionPriority.medium",
"value": "Medium Priority"
},
"instructionType": {
"id": 1,
"code": "standingInstructionType.fixed",
"value": "Fixed"
},
"status": {
"id": 3,
"code": "standingInstructionStatus.deleted",
"value": "Deleted"
},
"amount": 150.000000,
"validFrom": [
2014,
4,
3
],
"recurrenceType": {
"id": 1,
"code": "accountTransferRecurrenceType.periodic",
"value": "Periodic Recurrence"
},
"recurrenceFrequency": {
"id": 2,
"code": "recurrenceperiodFrequencyType.months",
"value": "Months"
},
"recurrenceInterval": 1,
"recurrenceOnMonthDay": [
4,
3
]
}
</code>
</div>
</div>
<a id="standinginstructions_history" name="standinginstructions_history" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Standing Instructions Logged History:</h2>
<p>The <i>list</i> capability of history can support <b>pagination</b> and <b>sorting</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates from what result to start from.</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>name,standingInstructionId</span>
</dd>
<dd>Orders the results by the field indicated.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>clientId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Use clientId of clients to restrict results.</dd>
<dt>clientName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use displayName of clients to restrict results.</dd>
<dt>fromAccountId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Use fromAccountId of standing instruction transaction to restrict results. fromAccountId is id of <i>fromAccountType</i>.</dd>
<dt>fromAccountType</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Use fromAccountType of standing instruction transaction to restrict results. fromAccountType is enum value entity type Ex:Loan Account:1, Savings Account:2</dd>
<dt>transferType</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Use transferType of standing instruction transaction to restrict results. transferType is enum value transfer type Ex:Loan Repayment:2, Account Transfer:1</dd>
<dt>fromDate</dt>
<dd>
Date<span>optional</span>
</dd>
<dd>Filters for transactions whose entry Date is greater than or equal to the passed in Date
</dd>
<dt>toDate</dt>
<dd>
Date <span>optional</span>
</dd>
<dd>Filters for transactions whose entry Date is lesser than or equal to the passed in Date
</dd>
<dt>sqlSearch</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use an sql fragment valid for the underlying standing instruction schema to filter results. e.g. name like %K%</dd>
</dl>
<p>Example Requests : </p>
<div class=apiClick>standinginstructionrunhistory</div>
<br>
<div class=apiClick>standinginstructionrunhistory?orderBy=name&sortOrder=DESC</div>
<br>
<div class=apiClick>standinginstructionrunhistory?offset=10&limit=50</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/standinginstructionrunhistory</code>
<code class="method-response">
{
"totalFilteredRecords": 2,
"pageItems": [
{
"standingInstructionId": 1,
"name": "ACC Transfer",
"fromOffice": {
"id": 1,
"name": "Head Office"
},
"fromClient": {
"id": 1,
"displayName": "Test client",
"officeId": 1,
"officeName": "Head Office"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 2,
"accountNo": "000000002",
"productId": 1,
"productName": "General Savings"
},
"toAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"toAccount": {
"id": 1,
"accountNo": "000000001",
"productId": 1,
"productName": "General Savings"
},
"toOffice": {
"id": 1,
"name": "Head Office"
},
"toClient": {
"id": 1,
"displayName": "Test client",
"officeId": 1,
"officeName": "Head Office"
},
"amount": 10,
"status": "success",
"executionTime": [
2014,
6,
30
],
"errorLog": ""
},
{
"standingInstructionId": 2,
"name": "Pay overdues",
"fromOffice": {
"id": 1,
"name": "Head Office"
},
"fromClient": {
"id": 1,
"displayName": "Test client",
"officeId": 1,
"officeName": "Head Office"
},
"fromAccountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"fromAccount": {
"id": 1,
"accountNo": "000000001",
"productId": 1,
"productName": "General Savings"
},
"toAccountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"toAccount": {
"id": 1,
"accountNo": "000000001",
"productId": 1,
"productName": "Daily Loan"
},
"toOffice": {
"id": 1,
"name": "Head Office"
},
"toClient": {
"id": 1,
"displayName": "Test client",
"officeId": 1,
"officeName": "Head Office"
},
"amount": 7038.01,
"status": "success",
"executionTime": [
2014,
6,
30
],
"errorLog": ""
}
]
}
</code>
</div>
</div>
<!-- End Account Trasfer Standing Instrution-->
<!-- start of datatables api docs -->
<a id="datatables" name="datatables" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Data Tables</h3>
<p>The datatables API allows you to plug-in your own tables
(MySql) that have a relationship to a Apache Fineract core table. For
example, you might want to add some extra client fields and record
information about each of the clients' family members. Via the API
you can create, read, update and delete entries for each
'plugged-in' table. The API checks for permission and for 'data
scoping' (only data within the users' office hierarchy can be
managed by the user).</p>
<p>The Apache Fineract Reference App uses a JQuery plug-in called
stretchydatatables (which in turn uses this datatables resource)
to provide a pretty flexible CRUD (Create, Read, Update, Delete)
User Interface.</p>
<p>
<a
href="https://mifosforge.jira.com/wiki/display/MIFOSX/Mifos+X+-+Plugging+In+Non-Core+and+User+Defined+Data">More
Documentation</a>
</p>
</div>
</div>
<a id="datatables_createTable" name="datatables_createTable"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create Data Table</h4>
<p>Create a new data table and registers it with the Apache Fineract Core application
table.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong> datatableName</td>
</tr>
<tr>
<td class=fielddesc>The name of the Data Table.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong> apptableName</td>
</tr>
<tr>
<td class=fielddesc>
Application table name. Must be one of the following:
<ul class="field">
<li>m_client</li>
<li>m_group</li>
<li>m_loan</li>
<li>m_office</li>
<li>m_saving_account</li>
<li>m_product_loan</li>
<li>m_savings_product</li>
</ul>
</td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>columns</td>
</tr>
<tr>
<td class=fielddesc>An array of columns in the new Data Table.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>multiRow</td>
</tr>
<tr>
<td class=fielddesc>Allows to create multiple entries in the Data Table. Optional, defaults to <tt>false</tt>.
If this property is not provided Data Table will allow only one entry.
</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions - columns</div></td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the created column. Can contain only alphanumeric characters, underscores and spaces, but cannot start with a number. Cannot start or end with an underscore or space.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>type</td>
</tr>
<tr>
<td class=fielddesc>
Column type. Must be one of the following:
<ul class="field">
<li>Boolean</li>
<li>Date</li>
<li>DateTime</li>
<li>Decimal</li>
<li>Dropdown</li>
<li>Number</li>
<li>String</li>
<li>Text</li>
</ul>
</td>
</tr>
<tr class=alt>
<td><strong>Mandatory [type = Dropdown] - </strong>code</td>
</tr>
<tr>
<td class=fielddesc>Used in Code Value fields. Column name becomes: <tt>code_cd_name</tt>. Mandatory if using type Dropdown, otherwise an error is returned.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>mandatory</td>
</tr>
<tr>
<td class=fielddesc>Determines whether this column must have a value in every entry. Optional, defaults to <tt>false</tt>.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory [type = String] - </strong>length</td>
</tr>
<tr>
<td class=fielddesc>Length of the text field. Mandatory if type String is used, otherwise an error is returned.</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/datatables
</code>
<code class="method-request">
POST https://DomainName/api/v1/datatables
Content-Type: application/json
Request Body:
{
"datatableName": "extra_client_details",
"apptableName": "m_client",
"columns": [
{
"name": "Gender",
"type": "Dropdown",
"code": "Gender"
},
{
"name": "Some Decimal",
"type": "Decimal",
"mandatory": true
},
{
"name": "Birth Date",
"type": "Date"
},
{
"name": "Question 2",
"type": "String",
"length": 100,
"mandatory": false
}
]
}
</code>
<code class="method-response">
{
"resourceIdentifier": "extra_client_details"
}
</code>
<code class="method-request">
POST https://DomainName/api/v1/datatables
Content-Type: application/json
Request Body:
{
"datatableName": "client_address",
"apptableName": "m_client",
"multiRow":"true",
"columns": [
{
"name": "Address1",
"type": "String",
"length": 100,
"mandatory": true
},
{
"name": "Address2",
"length": 100,
"type": "String"
}
]
}
</code>
<code class="method-response">
{
"resourceIdentifier": "client_address"
}
</code>
</div>
</div>
<a id="datatables_list" name="datatables_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Data Tables</h4>
<p>Lists registered data tables and the Apache Fineract Core
application table they are registered to.</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>apptable</dt>
<dd>
<span>optional</span>
</dd>
<dd>The Apache Fineract core application table.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>datatables?apptable=m_client</div>
<br>
<br>
<div class=apiClick>datatables</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/datatables
</code>
<code class="method-response">
[
{
"applicationTableName": "m_client",
"registeredTableName": "extra_client_details",
"columnHeaderData": [
{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Gender_cd_Question",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Some Decimal",
"columnType": "decimal",
"columnLength": 0,
"columnDisplayType": "DECIMAL",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Birth Date",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}
]
}
]
</code>
</div>
</div>
<a id="datatables_getTable" name="datatables_getTable"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Data Table Details</h4>
<p>Lists a registered data table details and the Apache Fineract Core
application table they are registered to.</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/datatables/{datatable}
</code>
<code class="method-response">
{
"applicationTableName": "m_client",
"registeredTableName": "extra_client_details",
"columnHeaderData": [
{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Gender_cd_Question",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Some Decimal",
"columnType": "decimal",
"columnLength": 0,
"columnDisplayType": "DECIMAL",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Birth Date",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}
]
}
</code>
</div>
</div>
<a id="datatables_updateTable" name="datatables_updateTable"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Data Table</h4>
<p>Modifies fields of a data table. If the apptableName parameter is passed,
data table is deregistered and registered with the new application table.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td><em>Optional - </em> apptableName</td>
</tr>
<tr>
<td class=fielddesc>
Application table name. Only necessary if changing the application table this Data Table is registered to. Must be one of the following:
<ul class="field">
<li>m_client</li>
<li>m_group</li>
<li>m_loan</li>
<li>m_office</li>
<li>m_saving_account</li>
</ul>
</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>dropColumns</td>
</tr>
<tr>
<td class=fielddesc>An array of columns to be deleted from the Data Table.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>addColumns</td>
</tr>
<tr>
<td class=fielddesc>An array of columns to be added to the Data Table.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>changeColumns</td>
</tr>
<tr>
<td class=fielddesc>An array of columns to be changed in the Data Table.</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions - dropColumns</div></td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>name</td>
</tr>
<tr>
<td class=fielddesc>Requires a full name of the deleted column to be provided.</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions - addColumns</div></td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the created column. Can contain only alphanumeric characters, underscores and spaces, but cannot start with a number. Cannot start or end with an underscore or space.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>type</td>
</tr>
<tr>
<td class=fielddesc>
Column type. Must be one of the following:
<ul class="field">
<li>Boolean</li>
<li>Date</li>
<li>DateTime</li>
<li>Decimal</li>
<li>Dropdown</li>
<li>Number</li>
<li>String</li>
<li>Text</li>
</ul>
</td>
</tr>
<tr class=alt>
<td><strong>Mandatory [type = Dropdown] - </strong>code</td>
</tr>
<tr>
<td class=fielddesc>Used in Code Value fields. Column name becomes: <tt>code_cd_name</tt>. Mandatory if using type Dropdown, otherwise an error is returned.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>mandatory</td>
</tr>
<tr>
<td class=fielddesc>Determines whether this column must have a value in every entry. Optional, defaults to <tt>false</tt>.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory [type = String] - </strong>length</td>
</tr>
<tr>
<td class=fielddesc>Length of the text field. Mandatory if type String is used, otherwise an error is returned.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>after</td>
</tr>
<tr>
<td class=fielddesc>Only used when re-ordering Data Table columns. Requires a full column name to be provided.</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions - changeColumns</div></td>
</tr>
<tr class=alt>
<td><strong>Mandatory - </strong>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the created column. Can contain only alphanumeric characters, underscores and spaces, but cannot start with a number. Cannot start or end with an underscore or space.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>newName</td>
</tr>
<tr>
<td class=fielddesc>New name of the created column. Can contain only alphanumeric characters, underscores and spaces, but cannot start with a number. Cannot start or end with an underscore or space.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory [type = Dropdown] - </strong>code</td>
</tr>
<tr>
<td class=fielddesc>Used in Code Value fields. Column name becomes: <tt>code_cd_name</tt>. Mandatory if using type Dropdown, otherwise an error is returned.</td>
</tr>
<tr class=alt>
<td><em>Optional [type = Dropdown] - </em>newCode</td>
</tr>
<tr>
<td class=fielddesc>Used in Code Value fields. Column name becomes: <tt>code_cd_name</tt>. Optional if using type Dropdown, otherwise an error is returned.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>mandatory</td>
</tr>
<tr>
<td class=fielddesc>Determines whether this column must have a value in every entry. Optional, defaults to <tt>false</tt>.</td>
</tr>
<tr class=alt>
<td><strong>Mandatory [type = String] - </strong>length</td>
</tr>
<tr>
<td class=fielddesc>Length of the text field. Mandatory if type String is used, otherwise an error is returned.</td>
</tr>
<tr class=alt>
<td><em>Optional - </em>after</td>
</tr>
<tr>
<td class=fielddesc>Only used when re-ordering Data Table columns. Requires a full column name to be provided.</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/datatables/{datatables}
</code>
<code class="method-request">
PUT https://DomainName/api/v1/datatables/extra_client_details
Content-Type: application/json
Request Body:
{
"apptableName": "m_client",
"dropColumns": [
{
"name": "Gender_cd_Question"
}
],
"addColumns": [
{
"name": "Question",
"type": "Dropdown",
"code": "Gender",
"mandatory": true
},
{
"name": "Some Number",
"type": "Number",
"after": "Some Field"
}
],
"changeColumns": [
{
"name": "Question",
"newName": "Question 2",
"mandatory": true,
"code": "Gender",
"newCode": "Gender2"
}
]
}
</code>
<code class="method-response">
{
"resourceIdentifier": "extra_client_details"
}
</code>
</div>
</div>
<a id="datatables_deleteTable" name="datatables_deleteTable"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Data Table</h4>
<p>Deletes a data table and deregisters it from the Apache Fineract Core
application table.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/datatables/{datatables}
</code>
<code class="method-request">
DELETE https://DomainName/api/v1/datatables/extra_client_details
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"resourceIdentifier": "extra_client_details"
}
</code>
</div>
</div>
<a id="datatables_register" name="datatables_register"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Register Data Table</h4>
<p>Registers a data table with the Apache Fineract Core application
table. This allows the data table to be maintained through the
API.
In case the datatable is a PPI (survey table), a parameter category should be pass along with the request.
The API currently support one category (200)
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/datatables/register/{datatable}/{apptable}
</code>
<code class="method-request">
POST datatables/register/extra_client_details/m_client
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"resourceIdentifier": "extra_client_details"
}
</code>
</div>
</div>
<a id="datatables_deregister" name="datatables_deregister"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Deregister Data Table</h4>
<p>Deregisters a data table. It will no longer be available
through the API.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/datatables/deregister/{datatable}
</code>
<code class="method-request">
POST datatables/deregister/extra_client_details
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"resourceIdentifier": "extra_client_details"
}
</code>
</div>
</div>
<a id="datatables_create" name="datatables_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create Entry in Data Table</h4>
<p>Adds a row to the data table.</p>
<p>Note that the default datatable UI functionality converts
any field name containing spaces to underscores when using the
API. This means the field name "Business Description" is
considered the same as "Business_Description". So you shouldn't
have both "versions" in any data table.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/datatables/{datatable}/{apptableId}
</code>
<code class="method-request">
POST datatables/extra_client_details/1
Content-Type: application/json
Request Body:
{
"Business Description": "Livestock sales",
"Comment": "First comment made",
"Education_cv": "Primary",
"Gender_cd": "6",
"Highest Rate Paid": "8.5",
"Next Visit": "01 October 2012",
"Years in Business": "5",
"dateFormat": "dd MMMM yyyy",
"locale": "en"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="datatables_retrieve" name="datatables_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Entry(s) from Data Table</h4>
<p>
Gets the entry (if it exists) for data tables that are one to one
with the application table. <br> Gets the entries (if they
exist) for data tables that are one to many with the application
table.
</p>
<p>Note: The 'fields' parameter is not available for
datatables.</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>order</dt>
<dd>
<span>optional</span>
</dd>
<dd>Specifies the order in which data is returned.</dd>
<dt>genericResultSet</dt>
<dd>
<span>optional, defaults to false</span>
</dd>
<dd>If 'true' an optimised JSON format is returned suitable for tabular display of data.
This format is used by the default data tables UI functionality.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>datatables/extra_client_details/1</div>
<br>
<br>
<div class=apiClick>datatables/extra_family_details/1?order=`Date of Birth` desc</div>
<br>
<br>
<div class=apiClick>datatables/extra_client_details/1?genericResultSet=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/datatables/{datatable}/{apptableId}?genericResultSet=true
</code>
<code class="method-response">
{
"columnHeaders": [
{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Business Description",
"columnType": "varchar",
"columnLength": 100,
"columnDisplayType": "STRING",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Years in Business",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Gender_cd",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": [
{
"id": 5,
"value": "option.Male"
},
{
"id": 6,
"value": "option.Female"
}
]
},
{
"columnName": "Education_cv",
"columnType": "varchar",
"columnLength": 60,
"columnDisplayType": "CODEVALUE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": [
{
"id": 9,
"value": "Primary"
},
{
"id": 10,
"value": "Secondary"
},
{
"id": 11,
"value": "University"
}
]
},
{
"columnName": "Next Visit",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Highest Rate Paid",
"columnType": "decimal",
"columnLength": 0,
"columnDisplayType": "DECIMAL",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Comment",
"columnType": "text",
"columnLength": 65535,
"columnDisplayType": "TEXT",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}
],
"data": [
{
"row": [
"1",
"Livestock sales",
"5",
"6",
"Primary",
"2012-10-01",
"8.500000",
"First\tcomment made"
]
}
]
}
</code>
</div>
</div>
<a id="datatables_update" name="datatables_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Entry in Data Table (One to One)</h4>
<p>Updates the row (if it exists) of the data table.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/datatables/{datatable}/{apptableId}
</code>
<code class="method-request">
PUT datatables/extra_client_details/1
Content-Type: application/json
Request Body:
{
"Business Description": "Livestock sales updated",
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"Business Description": "Livestock sales updated"
}
}
</code>
</div>
</div>
<a id="datatables_update_1M" name="datatables_update_1M"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Entry in Data Table (One to Many)</h4>
<p>Updates the row (if it exists) of the data table.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/datatables/{datatable}/{apptableId}/{datatableId}
</code>
<code class="method-request">
PUT datatables/Extra Family Details Data/1/2
Content-Type: application/json
Request Body:
{
"Date of Birth": "01 June 1982",
Education_cdHighest: "5",
Name: "June",
"Other Notes": "More\nnotes",
"Points Score": "20",
dateFormat: "dd MMMM yyyy",
locale: "en"
}
</code>
<code class="method-response">{ "resourceId": 1 } </code>
</div>
</div>
<a id="datatables_delete" name="datatables_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Entry(s) in Data Table</h4>
<p>
Deletes the entry (if it exists) for data tables that are one-to-one with the application table. <br> Deletes the entries (if they exist) for data tables that are one-to-many with the application table.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/datatables/{datatable}/{apptableId}
</code>
<code class="method-request">
DELETE datatables/extra_client_details/1
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="datatables_delete_1M" name="datatables_delete_1M"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Entry in Datatable (One to Many)</h4>
<p>Deletes the entry (if it exists) for data tables that are
one to many with the application table.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/datatables/{datatable}/{apptableId}/{datatableId}
</code>
<code class="method-request">
DELETE datatables/extra_family_details/1/2
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of datatables api docs -->
<!-- start of survey api docs -->
<a id="survey_retrieve" name="survey_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve surveys</h4>
<p>Retrieve surveys. This allows to retrieve the list of survey tables registered .
</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/survey/
</code>
<code class="method-request">
GET survey/
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
[
{
"datatableData": {
"applicationTableName": "m_client",
"registeredTableName": "ppi_kenya_2005",
"columnHeaderData": [
{
"columnName": "id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "client_id",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "ppi_household_members_cd_q1_householdmembers",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [
{
"id": 167,
"value": "Nine or More",
"score": 0
},
{
"id": 168,
"value": "Seven or eight",
"score": 5
},
{
"id": 169,
"value": "Six",
"score": 8
},
],
"columnCode": "ppi_household_members"
},
{
"columnName": "date",
"columnType": "datetime",
"columnLength": 0,
"columnDisplayType": "DATETIME",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
}
]
},
"enabled": false
},
{
"datatableData": {
"applicationTableName": "m_client",
"registeredTableName": "ppi_tanzania_20012",
"columnHeaderData": [
{
"columnName": "id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "client_id",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "ppi_youngerthan17_cd_q1_youngerthan17",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "CODELOOKUP",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": [
{
"id": 204,
"value": "four or More",
"score": 0
},
],
"columnCode": "ppi_youngerthan17"
},
],
"columnCode": "ppi_how_many_tables"
},
]
},
"enabled": true
}
]
</code>
</div>
</div>
<a id="survey_details" name="survey_details"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve survey</h4>
<p>Lists a registered survey table details and the Apache Fineract Core application table they are registered to.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/survey/ppi_kenya_2005
</code>
<code class="method-request">
GET survey/{surveyName}
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"applicationTableName": "m_client",
"registeredTableName": "extra_client_details",
"columnHeaderData": [
{
"columnName": "client_id",
"columnType": "bigint",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": false,
"isColumnPrimaryKey": true,
"columnValues": []
},
{
"columnName": "Gender_cd_Question",
"columnType": "int",
"columnLength": 0,
"columnDisplayType": "INTEGER",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Some Decimal",
"columnType": "decimal",
"columnLength": 0,
"columnDisplayType": "DECIMAL",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Birth Date",
"columnType": "date",
"columnLength": 0,
"columnDisplayType": "DATE",
"isColumnNullable": true,
"isColumnPrimaryKey": false,
"columnValues": []
}
enabled:false
]
}
</code>
</div>
</div>
<a id="survey_create" name="survey_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create an entry in the survey table</h4>
<p>Insert and entry in a survey table (full fill the survey).
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/survey/ppi_kenya_2005/87
</code>
<code class="method-request">
POST survey/{surveyName}/{clientId}
Content-Type: application/json
Request Body:
{
ppi_household_members_cd_q1_householdmembers : 167,
ppi_highestschool_cd_q2_highestschool : 174 ,
ppi_businessoccupation_cd_q3_businessoccupation : 180,
ppi_habitablerooms_cd_q4_habitablerooms :184,
ppi_floortype_cd_q5_floortype : 188,
ppi_lightingsource_cd_q6_lightingsource :190,
ppi_irons_cd_q7_irons:193,
ppi_mosquitonets_cd_q8_mosquitonets:195,
ppi_towels_cd_q9_towels:198,
ppi_fryingpans_cd_q10_fryingpans:201,
date:"2014-12-02 20:30:00",
dateFormat:"Y-m-d H:i:s",
locale:"en_GB"
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 87,
"resourceId": 87
}
</code>
</div>
</div>
<!-- end of Survey api docs -->
<!-- start of Notes api docs -->
<a id="notes" name="notes" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Notes</h3>
<p>Notes API allows to enter notes for supported resources.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>note</td>
</tr>
<tr>
<td class=fielddesc>A simple text note created for supported resources.</td>
</tr>
</table>
<br>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Supported Resources</div></td>
</tr>
<tr class=alt>
<td>
<a href="#clients">Client</a>
<br>
<a href="#loans">Loan</a>
<br>
<a href="#groups">Group</a>
<br>
<a href="#savingsaccounts">Savings Account</a>
</td>
</tr>
</table>
</div>
</div>
<a id="resources_addnote" name="resources_addnote"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Add a Resource Note</h4>
<p>Adds a new note to a supported resource.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>note</td>
</tr>
</table>
<p>Example Requests:</p>
<div class=apiClick>clients/1/notes</div>
<br>
<br>
<div class=apiClick>groups/1/notes</div>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/{resource}/{resourceId}/notes
</code>
<code class="method-request">
POST clients/1/notes
Content-Type: application/json
Request Body:
{
"note": "a note about the client"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 76
}
</code>
</div>
</div>
<a id="resource_notelist" name="resource_notelist"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Resource's Notes</h4>
<p>
<b>Note:</b> Notes are returned in descending createOn order.
</p>
<p>Example Requests:</p>
<div class=apiClick>clients/2/notes</div>
<br>
<br>
<div class=apiClick>groups/2/notes?fields=note,createdOn,createdByUsername</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/{resource}/{resourceId}/notes
</code>
<code class="method-response">
[
{
"id": 2,
"clientId": 1,
"noteType": {
"id": 100,
"code": "noteType.client",
"value": "Client note"
},
"note": "First note edited",
"createdById": 1,
"createdByUsername": "mifos",
"createdOn": 1342498505000,
"updatedById": 1,
"updatedByUsername": "mifos",
"updatedOn": 1342498517000
}
]
</code>
</div>
</div>
<a id="resources_retrievenote" name="resources_retrievenote"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Resource Note</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1/notes/76</div>
<br>
<br>
<div class=apiClick>groups/1/notes/20</div>
<br>
<br>
<div class=apiClick>clients/1/notes/76?fields=note,createdOn,createdByUsername</div>
<br>
<br>
<div class=apiClick>groups/1/notes/20?fields=note,createdOn,createdByUsername</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/{resource}/{resourceId}/notes/{noteId}
</code>
<code class="method-response">
{
"id": 76,
"clientId": 1,
"noteType": {
"id": 100,
"code": "noteType.client",
"value": "Client note"
},
"note": "a note about the client",
"createdById": 1,
"createdByUsername": "mifos",
"createdOn": 1359463135000,
"updatedById": 1,
"updatedByUsername": "mifos",
"updatedOn": 1359463135000
}
</code>
</div>
</div>
<a id="resources_updatenote" name="resources_updatenote"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Resource Note</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/{resource}/{resourceId}/notes/{noteId}
</code>
<code class="method-request">
PUT clients/1/notes/76
Content-Type: application/json
Request Body:
{
"note": "and here the note is updated nicely."
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"resourceId": 76,
"changes": {
"note": "and here the note is updated nicely."
}
}
</code>
</div>
</div>
<a id="resources_deletenote" name="resources_deletenote"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Resource Note</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/{resource}/{resourceId}/notes/{noteId}
</code>
<code class="method-request">
DELETE clients/1/notes/76
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 76
}
</code>
</div>
</div>
<!-- end of Notes api docs -->
<!-- start of documents api docs -->
<a id="documents" name="documents" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Documents</h3>
<p>Multiple Documents (a combination of a name, description
and a file) may be attached to different Entities
like Clients, Groups, Staff, Loans, Savings and Client
Identifiers in the system
</p>
<p>Note: The currently allowed Entities are
<ul>
<li>Clients: URL Pattern as <i>clients</i></li>
<li>Staff: URL Pattern as <i>staff</i></li>
<li>Loans: URL Pattern as <i>loans</i></li>
<li>Savings: URL Pattern as <i>savings</i></li>
<li>Client Identifiers: URL Pattern as <i>client_identifiers</i></li>
<li>Groups: URL Pattern as <i>groups</i></li>
</ul>
</p>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>parentEntityType</td>
</tr>
<tr>
<td class=fielddesc>The type of the Entity
with which this document is associated
</td>
</tr>
<tr class=alt>
<td>parentEntityId</td>
</tr>
<tr>
<td class=fielddesc>The ID of the entity (client,
loan etc) with which this document is
associated</td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>User Defined name for the
document, need not be the same as the name
of the file associated with the document
</td>
</tr>
<tr class=alt>
<td>fileName</td>
</tr>
<tr>
<td class=fielddesc>The name of the file associated
with this document</td>
</tr>
<tr class=alt>
<td>size</td>
</tr>
<tr>
<td class=fielddesc>The size (in bytes) of the file
associated with this document</td>
</tr>
<tr class=alt>
<td>type</td>
</tr>
<tr>
<td class=fielddesc>Mime Type of the file
associated with this document
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>A description of this document
</td>
</tr>
</table>
</div>
</div>
<a id="documents_list" name="documents_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List documents</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1/documents</div>
<br>
<div class=apiClick>client_identifiers/1/documents</div>
<br>
<div class=apiClick>loans/1/documents?fields=name,description</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/{entityType}/{entityId}/documents
</code>
<code class="method-response">
[
{
"id": 1,
"parentEntityType": "clients",
"parentEntityId": 1,
"name": "Client Details Form ",
"fileName": "CGAP.pdf",
"size": 5246719,
"type": "application/pdf",
"description": "A signed form signed by new member"
}
]
</code>
</div>
</div>
<a id="documents_retrieve" name="documents_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Document</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1/documents/1</div>
<br>
<br>
<div class=apiClick>loans/1/documents/1</div>
<br>
<br>
<div class=apiClick>client_identifiers/1/documents/1?fields=name,description</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/documents/{clientId}
</code>
<code class="method-response">
{
"id": 1,
"parentEntityType": "clients",
"parentEntityId": 1,
"name": "Client Details Form ",
"fileName": "CGAP.pdf",
"size": 5246719,
"type": "application/pdf",
"description": "A signed form signed by new member"
}
</code>
</div>
</div>
<a id="documents_create" name="documents_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Document</h4>
<p>
<b>Note:</b> A document is created using a Multi-part form upload
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Body Parts</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name or summary of the document
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>Description of the document
</tr>
<tr class=alt>
<td>file</td>
</tr>
<tr>
<td class=fielddesc>The file to be uploaded
</td>
</tr>
</table>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>file and description</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/{entityType}/{entityId}/documents
</code>
<code class="method-request">
POST clients/1/documents
Content-Type: multipart/form-data
Request Body:
<i>Not Shown (multi-part form data)</i>
</code>
<code class="method-response">
{
"resourceId":3,
"resourceIdentifier":"3"
}
</code>
</div>
</div>
<a id="documents_update" name="documents_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Document</h4>
<p>
<b>Note:</b> A document is updated using a Multi-part form upload
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Body Parts</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name or summary of the document
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>Description of the document
</tr>
<tr class=alt>
<td>file</td>
</tr>
<tr>
<td class=fielddesc>The file to be uploaded
</td>
</tr>
</table>
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/{entityType}/{entityId}/documents/{documentId}
</code>
<code class="method-request">
PUT clients/1/documents/1
Content-Type: multipart/form-data
Request Body:
<i>Not Shown (multi-part form data)</i>
</code>
<code class="method-response">
{
"resourceId":3,
"changes":{},
"resourceIdentifier":"3"
}
</code>
</div>
</div>
<a id="documents_retrieve_file" name="documents_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Binary File associated with Document</h4>
<p>Request used to download the file associated with the document</p>
<p>Example Requests:</p>
<div class=apiClick>clients/1/documents/1/attachment</div>
<br>
<br>
<div class=apiClick>loans/1/documents/1/attachment</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/{entityType}/{entityId}/documents/{documentId}/attachment
</code>
<code class="method-response">
<i>Not Shown: The corresponding Binary file</i>
</code>
</div>
</div>
<a id="documents_delete" name="documents_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Remove a Document</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/{entityType}/{entityId}/documents/{documentId}
</code>
<code class="method-request">
DELETE clients/1/documents/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId":1,
"changes":{},
"resourceIdentifier":"1"
}
</code>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/{entityType}/{entityId}/documents/{documentId}
</code>
<code class="method-request">
DELETE loans/1/documents/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId":1,
"changes":{},
"resourceIdentifier":"1"
}
</code>
</div>
</div>
<!-- start of reports api docs -->
<a id="reports" name="reports" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Reports</h3>
<p>
Non-core reports can be added, updated and deleted.
</p>
<p>
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.
</p>
<p>
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.<br>
e.g. query parameter R_myName=john will replace ${myName} with john
</p>
<p>
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.<br>
Usage example "where o.hierarchy like CONCAT('${currentUserHierarchy}', '%')"
</p>
<p>
Note: <br>
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.
</p>
</div>
</div>
<a id="reports_template" name="reports_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Report Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>reports/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reports/template
</code>
<code class="method-response">
{
"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"
}
]
}
</code>
</div>
</div>
<a id="reports_create" name="reports_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Report</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/reports
</code>
<code class="method-request">
POST reports
Content-Type: application/json
Request Body:
{
"reportName":"Completely New Report",
"reportType":"Table",
"reportSubType":"",
"reportCategory":"Loan",
"useReport":"false",
"description":"Just\nAn\nExample",
"reportSql":"select 'very good sql' as AComment",
"reportParameters":[{"id":"","parameterId":"5","reportParameterName":""},{"id":"","parameterId":"6","reportParameterName":""}]
}
</code>
<code class="method-response">
{
"resourceId": 132
}
</code>
</div>
</div>
<a id="reports_list" name="reports_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Reports</h4>
<p>Lists all reports and their parameters. </p>
<p>Example Request:</p>
<div class=apiClick>reports</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reports
</code>
<code class="method-response">
[
{
"id": 1,
"reportName": "Client Listing",
"reportType": "Table",
"reportCategory": "Client",
"description": "Individual Client Report\r\n\r\nLists the small number of defined fields on the client table. Would expect to copy this \n\nreport and add any \u0027one to one\u0027 additional data for specific tenant needs.\r\n\r\nCan be run for any size MFI but you\u0027d expect it only to be run within a branch for \n\nlarger ones. Depending on how many columns are displayed, there is probably is a limit of about 20/50k clients returned for html display (export to excel doesn\u0027t \n\nhave that client browser/memory impact).",
"coreReport": true,
"useReport": true,
"reportParameters": [
{
"id": 1,
"parameterId": 5,
"parameterName": "OfficeIdSelectOne"
}
]
},
{
"id": 2,
"reportName": "Client Loans Listing",
"reportType": "Table",
"reportCategory": "Client",
"description": "Individual Client Report\n\nPretty \n\nwide report that lists the basic details of client loans. \n\nCan be run for any size MFI but you\u0027d expect it only to be run within a branch for larger ones. \n\nThere is probably is a limit of about 20/50k clients returned for html display (export to excel doesn\u0027t have that client browser/memory impact).",
"coreReport": false,
"useReport": true,
"reportParameters": [
{
"id": 2,
"parameterId": 5,
"parameterName": "OfficeIdSelectOne"
},
{
"id": 3,
"parameterId": 6,
"parameterName": "loanOfficerIdSelectAll"
},
{
"id": 4,
"parameterId": 10,
"parameterName": "currencyIdSelectAll"
},
{
"id": 5,
"parameterId": 20,
"parameterName": "fundIdSelectAll"
},
{
"id": 6,
"parameterId": 25,
"parameterName": "loanProductIdSelectAll"
},
{
"id": 7,
"parameterId": 26,
"parameterName": "loanPurposeIdSelectAll"
}
]
},...
]
</code>
</div>
</div>
<a id="reports_retrieve" name="reports_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Report</h4>
<p>Example Requests:</p>
<div class=apiClick>reports/1</div><br><br>
<div class=apiClick>reports/1?template=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reports/{id}
</code>
<code class="method-response">
{
"id": 1,
"reportName": "Client Listing",
"reportType": "Table",
"reportCategory": "Client",
"description": "Individual Client Report\r\n\r\nLists the small number of defined fields on the client table. Would expect to copy this \n\nreport and add any \u0027one to one\u0027 additional data for specific tenant needs.\r\n\r\nCan be run for any size MFI but you\u0027d expect it only to be run within a branch for \n\nlarger ones. Depending on how many columns are displayed, there is probably is a limit of about 20/50k clients returned for html display (export to excel doesn\u0027t \n\nhave that client browser/memory impact).",
"reportSql": "select \nconcat(repeat(\"..\", \n ((LENGTH(ounder.`hierarchy`) - LENGTH(REPLACE(ounder.`hierarchy`, \u0027.\u0027, \u0027\u0027)) - 1))), ounder.`name`) as \"Office/Branch\",\n c.account_no as \"Client Account No.\", \nc.display_name as \"Name\", \nr.enum_message_property as \"Status\",\nc.activation_date as \"Activation\", c.external_id as \"External Id\"\nfrom m_office o \njoin m_office ounder on ounder.hierarchy like concat(o.hierarchy, \u0027%\u0027)\nand ounder.hierarchy like concat(\u0027${currentUserHierarchy}\u0027, \u0027%\u0027)\njoin m_client c on c.office_id \u003d ounder.id\nleft join r_enum_value r on r.enum_name \u003d \u0027status_enum\u0027 and r.enum_id \u003d c.status_enum\nwhere o.id \u003d ${officeId}\norder by ounder.hierarchy, c.account_no",
"coreReport": true,
"useReport": true,
"reportParameters": [
{
"id": 1,
"parameterId": 5,
"parameterName": "OfficeIdSelectOne"
}
]
}
</code>
</div>
</div>
<a id="reports_update" name="reports_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Report</h4>
<p>
Only the useReport value can be updated for core reports.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/reports/{id}
</code>
<code class="method-request">
PUT reports/129
Content-Type: application/json
Request Body:
{
"reportName": "New rpt name",
"reportParameters": [
{
"id": 194,
"parameterId": 5,
"reportParameterName": "m"
}
]
}
</code>
<code class="method-response">
{
"resourceId": 129,
"changes": {
"reportName": "New rpt name",
"reportParameters": "[{\"id\":194,\"parameterId\":5,\"reportParameterName\":\"m\"}]"
}
}
</code>
</div>
</div>
<a id="reports_delete" name="reports_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Report</h4>
<p>
Only non-core reports can be deleted.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/reports/{id}
</code>
<code class="method-request">
DELETE reports/100
Content-Type: application/json
Request Body:
{}
</code>
<code class="method-response">
{
"resourceId": 100
}
</code>
</div>
</div>
<!-- start of runreports api docs -->
<a id="runreports" name="runreports" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Run Reports</h3>
</div>
</div>
<a id="report_run" name="report_run" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Running a Report</h4>
<p>This resource allows you to run and receive output from pre-defined Apache Fineract reports. </p>
<p>Reports can also be used to provide data for searching and workflow functionality.</p>
<p>
The default output is a JSON formatted "Generic Resultset". The Generic Resultset contains
Column Heading as well as Data information. However, you can
export to CSV format by simply adding "&exportCSV=true" to the end
of your URL.</p>
<p>If Pentaho reports have been pre-defined, they can also be
run through this resource. Pentaho reports can return HTML, PDF or
CSV formats.</p>
<p>The Apache Fineract reference application uses a
JQuery plugin called stretchyreporting which, itself, uses this
reports resource to provide a pretty flexible reporting User
Interface (UI).</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>R_'parameter names' ...</dt>
<dd>
optional, <span>No defaults</span>
</dd>
<dd>The number and names of the parameters depend on the
specific report and how it has been configured. R_officeId is an
example parameter name.</dd>
<dd>Note: the prefix R_ stands for Reporting</dd>
<dt>genericResultSet</dt>
<dd>
<span>optional, defaults to true</span>
</dd>
<dd>If 'true' an optimised JSON format is returned suitable for tabular display of data.
<dd>If 'false' a simple JSON format is returned.
<dt>parameterType</dt>
<dd>
optional, <span>The only valid value is 'true'. If any
other value is provided the argument will be ignored</span>
</dd>
<dd>Determines whether the request looks in the list of
reports or the list of parameters for its data. Doesn't apply to
Pentaho reports.</dd>
<dt>exportCSV</dt>
<dd>
optional, <span>The only valid value is 'true'. If any
other value is provided the argument will be ignored</span>
</dd>
<dd>Output will be delivered as a CSV file instead of JSON.
Doesn't apply to Pentaho reports.</dd>
<dt>output-type</dt>
<dd>
optional, <span>Defaults to HTML.</span>
</dd>
<dd>Valid Values are HTML, XLS, XSLX, CSV and PDF for html, Excel, Excel 2007+,
CSV and PDF formats respectively.</dd>
<dd>Only applies to Pentaho reports.</dd>
<dt>locale</dt>
<dd>
optional
</dd>
<dd>Any valid locale Ex: en_US, en_IN, fr_FR etc</dd>
<dd>Only applies to Pentaho reports.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>runreports/Client%20Listing?R_officeId=1</div>
<br>
<br>
<div class=apiClick>runreports/Client%20Listing?R_officeId=1&exportCSV=true</div>
<br>
<br>
<div class=apiClick>runreports/OfficeIdSelectOne?R_officeId=1&ampparameterType=true</div>
<br>
<br>
<div class=apiClick>runreports/OfficeIdSelectOne?R_officeId=1&ampparameterType=true&exportCSV=true</div>
<br>
<br>
<div class=apiClick>runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=HTML&R_officeId=1</div>
<br>
<br>
<div class=apiClick>runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=XLS&R_officeId=1</div>
<br>
<br>
<div class=apiClick>runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=CSV&R_officeId=1</div>
<br>
<br>
<div class=apiClick>runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=PDF&R_officeId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/runreports/{reportName}
</code>
<code class="method-response">
{
"columnHeaders": [
{
"columnName": "Office/Branch",
"columnType": "VARCHAR",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Client Account No.",
"columnType": "VARCHAR",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Name",
"columnType": "VARCHAR",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "Joined",
"columnType": "DATE",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
},
{
"columnName": "External Id",
"columnType": "VARCHAR",
"isColumnNullable": false,
"isColumnPrimaryKey": false,
"columnValues": []
}
],
"data": [
{
"row": [
"Head Office",
"000000001",
"Petra Yton",
"2009-03-04",
"786YYH7"
]
},
{
"row": [
"Head Office",
"000000002",
"Keith(changed) Yton",
"2009-03-04",
null
]
},
{
"row": [
"Head Office",
"000000003",
"Jorge lastname",
"2013-02-05",
null
]
}
]
}
</code>
</div>
</div>
<!-- start of report mailing jobs api docs -->
<a id="report_mailing_jobs" name="report_mailing_jobs" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Report Mailing Jobs</h3>
<p>This resource allows you to create a scheduled job that runs a report and sents it by email to specified email addresses.</p>
<p>The scheduled job can be configured to run once or on a regular basis (once a day, twice a week, etc).</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>The name of the report mailing job. It must be unique.</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>Optional: Description of the report mailing job.</td>
</tr>
<tr class=alt>
<td>startDateTime</td>
</tr>
<tr>
<td class=fielddesc>Date and time to start the report mailing job.</td>
</tr>
<tr class=alt>
<td>stretchyReportId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of the stretchy report to be sent.</td>
</tr>
<tr class=alt>
<td>emailRecipients</td>
</tr>
<tr>
<td class=fielddesc>Comma separated report recipient email addresses.</td>
</tr>
<tr class=alt>
<td>emailSubject</td>
</tr>
<tr>
<td class=fielddesc>The subject of the email to be sent.</td>
</tr>
<tr class=alt>
<td>emailMessage</td>
</tr>
<tr>
<td class=fielddesc>The body of the email to be sent.</td>
</tr>
<tr class=alt>
<td>emailAttachmentFileFormatId</td>
</tr>
<tr>
<td class=fielddesc>The Enum constant id of the email attachment file format.</td>
</tr>
<tr class=alt>
<td>recurrence</td>
</tr>
<tr>
<td class=fielddesc>Rule or repeating pattern for recurring events. See - <a target="_blank" href="http://www.kanzaki.com/docs/ical/rrule.html">http://www.kanzaki.com/docs/ical/rrule.html</a></td>
</tr>
<tr class=alt>
<td>isActive</td>
</tr>
<tr>
<td class=fielddesc>Indicates whether or not the scheduler should be created as active.</td>
</tr>
<tr class=alt>
<td>stretchyReportParamMap</td>
</tr>
<tr>
<td class=fielddesc>Optional: A map of the stretchy report parameter names to values.</td>
</tr>
</table>
</div>
</div>
<a id="report_mailing_jobs_template" name="report_mailing_jobs_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Report Mailing Job Details Template</h4>
<p>This is a convenience resource. It can be useful when
building maintenance user interface screens for report mailing job
applications. The template data returned consists of any or all
of:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>reportmailingjobs/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reportmailingjobs/template
</code>
<code class="method-response">
{
"isActive": false,
"emailAttachmentFileFormatOptions": [
{
"id": 1,
"code": "ReportMailingJobEmailAttachmentFileFormat.xls",
"value": "xls"
},
{
"id": 2,
"code": "ReportMailingJobEmailAttachmentFileFormat.pdf",
"value": "pdf"
},
{
"id": 3,
"code": "ReportMailingJobEmailAttachmentFileFormat.csv",
"value": "csv"
}
],
"stretchyReportParamDateOptions": [
{
"id": 1,
"code": "reportMailingJobStretchyReportParamDateOption.today",
"value": "today"
},
{
"id": 2,
"code": "reportMailingJobStretchyReportParamDateOption.yesterday",
"value": "yesterday"
},
{
"id": 3,
"code": "reportMailingJobStretchyReportParamDateOption.tomorrow",
"value": "tomorrow"
}
]
}
</code>
</div>
</div>
<a id="report_mailing_jobs_retrieve" name="report_mailing_jobs_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Report Mailing Job</h4>
<p>Example Requests:</p>
<div class=apiClick>reportmailingjobs/1</div>
<br>
<br>
<div class=apiClick>reportmailingjobs/1?template=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reportmailingjobs/{id}
</code>
<code class="method-response">
{
"id": 1,
"name": "Client Numbers Report",
"description": "Client Numbers Report",
"startDateTime": 1469627093000,
"recurrence": "",
"timeline": {
"createdOnDate": [
2016,
7,
27
],
"createdByUsername": "musoni",
"createdByFirstname": "firstname",
"createdByLastname": "lastname"
},
"emailRecipients": "info@musonisystem.com",
"emailSubject": "Client Numbers Report",
"emailMessage": "Client Numbers Report",
"emailAttachmentFileFormat": {
"id": 1,
"code": "ReportMailingJobEmailAttachmentFileFormat.xls",
"value": "xls"
},
"stretchyReport": {
"id": 120,
"reportName": "Client Numbers Report",
"reportType": "Pentaho",
"reportCategory": "Client",
"description": "",
"coreReport": false,
"useReport": true
},
"stretchyReportParamMap": "{\"startDate\":\"2016-07-01\",\"endDate\":\"2016-08-02\",\"selectOffice\":\"1\",\"environementUrl\":\"environementUrl\"}",
"nextRunDateTime": 1469627093000,
"numberOfRuns": 0,
"isActive": true,
"runAsUserId": 1
}
</code>
</div>
</div>
<a id="report_mailing_jobs_list" name="report_mailing_jobs_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Report Mailing Jobs</h4>
<p>Example Requests:</p>
<div class=apiClick>reportmailingjobs</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reportmailingjobs
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Client Numbers Report",
"description": "Client Numbers Report",
"startDateTime": 1469627093000,
"recurrence": "",
"timeline": {
"createdOnDate": [
2016,
7,
27
],
"createdByUsername": "musoni",
"createdByFirstname": "firstname",
"createdByLastname": "lastname"
},
"emailRecipients": "info@musonisystem.com",
"emailSubject": "Client Numbers Report",
"emailMessage": "Client Numbers Report",
"emailAttachmentFileFormat": {
"id": 1,
"code": "ReportMailingJobEmailAttachmentFileFormat.xls",
"value": "xls"
},
"stretchyReport": {
"id": 120,
"reportName": "Client Numbers Report",
"reportType": "Pentaho",
"reportCategory": "Client",
"description": "",
"coreReport": false,
"useReport": true
},
"stretchyReportParamMap": "{\"startDate\":\"2016-07-01\",\"endDate\":\"2016-08-02\",\"selectOffice\":\"1\",\"environementUrl\":\"environementUrl\"}",
"nextRunDateTime": 1469627093000,
"numberOfRuns": 0,
"isActive": true,
"runAsUserId": 1
}
]
</code>
</div>
</div>
<a id="report_mailing_job_history_list" name="report_mailing_job_history_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Report Mailing Job History</h4>
<p>The <i>list</i> capability of report mailing job history can support <b>pagination</b> and <b>sorting</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>startDateTime, endDateTime, status</span>
</dd>
<dd>Orders results by the indicated field.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>reportmailingjobrunhistory/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/reportmailingjobrunhistory/{reportMailingJobId}
</code>
<code class="method-response">
[
{
"id": 1,
"reportMailingJobId": 1,
"startDateTime": 1469627093000",
"endDateTime": 1469627093050,
"status": "success",
"errorMessage": "",
"errorLog": ""
}
]
</code>
</div>
</div>
<a id="report_mailing_jobs_create" name="report_mailing_jobs_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Report Mailing Job</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, startDateTime, stretchyReportId, emailRecipients, emailSubject, emailMessage, emailAttachmentFileFormatId, recurrence, isActive</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>description, stretchyReportParamMap</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/reportmailingjobs
</code>
<code class="method-request">
POST reportmailingjobs
Content-Type: application/json Request Body:
{
"locale": "en_GB",
"dateFormat": "dd-MM-yyyy HH:mm:ss",
"name": "Client Numbers Report",
"description": "Client Numbers Report",
"startDateTime": "02-08-2016 11:34:18",
"stretchyReportId": "120",
"emailRecipients": "info@musonisystem.com",
"emailSubject": "Client Numbers Report",
"emailMessage": "Client Numbers Report",
"emailAttachmentFileFormatId": "1",
"recurrence": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR",
"isActive": true,
"stretchyReportParamMap": "{\"startDate\":\"2016-07-01\",\"endDate\":\"2016-08-02\",\"selectOffice\":\"1\",\"environementUrl\":\"environementUrl\"}"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="report_mailing_jobs_update" name="report_mailing_jobs_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Report Mailing Job</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/reportmailingjobs/{id}
</code>
<code class="method-request">
PUT reportmailingjobs/1
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"dateFormat": "dd-MM-yyyy HH:mm:ss",
"startDateTime": "10-08-2016 23:30:00"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"startDateTime": "10-08-2016 23:30:00"
}
}
</code>
</div>
</div>
<a id="report_mailing_jobs_delete" name="report_mailing_jobs_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Report Mailing Job</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/reportmailingjobs/{id}
</code>
<code class="method-request">
DELETE reportmailingjobs/1
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- start of authentication api docs -->
<a id="authenticationbasic" name="authenticationbasic" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication HTTP Basic</h3>
<p>An API capability that allows client applications to verify
authentication details using HTTP Basic Authentication.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>base64EncodedAuthenticationKey</td>
</tr>
<tr>
<td class=fielddesc>HTTP Basic Auth key. See <a
href="#authentication_overview">Authentication Overview</a> for
an example of its use.
</td>
</tr>
</tr>
</table>
</div>
</div>
<a id="authenticate_request_basic" name="authenticate_request_basic" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Verify authentication</h4>
<p>Authenticates the credentials provided and returns the set roles and permissions allowed.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/authentication?username={username}&password={password}
</code>
<code class="method-request">
POST authentication?username=mifos&password=password
Content-Type: application/json
No Request Body
</code>
<p>Example response of autentication for user that is not linked with any staff.</p>
<code class="method-response">
{
"username": "mifos",
"userId": 1,
"base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=",
"authenticated": true,
"officeId": 1,
"officeName": "Head Office",
"roles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
],
"permissions": [
"ALL_FUNCTIONS"
]
}
</code>
<p>Example response of autentication for user that is linked with a staff member and role.</p>
<code class="method-response">
{
"username": "mifos",
"userId": 1,
"base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=",
"authenticated": true,
"officeId": 1,
"officeName": "Head Office",
"staffId": 1,
"staffDisplayName": "Director, Program",
"organisationalRole": {
"id": 100,
"code": "staffOrganisationalRoleType.programDirector",
"value": "Program Director"
},
"roles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
],
"permissions": [
"ALL_FUNCTIONS"
]
}
</code>
<code class="method-request">
POST authentication?username=mifos&password=fail
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"developerMessage": "Invalid authentication details were passed in api request.",
"developerDocLink": "https://github.com/openMF/mifosx/wiki/HTTP-API-Error-codes",
"httpStatusCode": "401",
"defaultUserMessage": "Unauthenticated. Please login.",
"userMessageGlobalisationCode": "error.msg.not.authenticated",
"errors": []
}
</code>
</div>
</div>
<a id="authenticationoauth" name="authenticationoauth" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication Oauth2</h3>
<p>An API capability that allows client applications to fetch current user details details using Oauth2.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>accessToken</td>
</tr>
<tr>
<td class=fielddesc>HTTP Auth bearer key. See <a
href="#authentication_overview">Authentication Overview</a> for
an example of its use.
</td>
</tr>
</tr>
</table>
</div>
</div>
<a id="oauth" name="oauth" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication via OAuth2</h3>
<p>API for requesting OAuth2 access token and refresh token.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>grant_type</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Indicates the requested grant type. Supported values:
<span>password</span>.
</td>
</tr>
<tr class=alt>
<td>client_id</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Indicates the client application identity.
</td>
</tr>
<tr class=alt>
<td>client_secret</td>
</tr>
<tr>
<td class=fielddesc>Optional field.
Indicates the client application password.
</td>
</tr>
<tr class=alt>
<td>username</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Application User(resource) login name.
</td>
</tr>
<tr class=alt>
<td>password</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Application User(resource) password.
</td>
</tr>
</table>
</div>
</div>
<a id="oauth_request" name="oauth_request" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>OAuth2 Refresh and Access Token Request</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/oauth/token?username={username}&password={password}&client_id={clientId}&grant_type={grant_type}&client_secret={client_secret}
</code>
<code class="method-request">
POST api/oauth/token?username=mifos&password=password&client_id=community-app&grant_type=password&client_secret=123
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
""access_token": "b771987f-82fc-45ba-b521-bfe280c4e603",
"token_type": "bearer",
"refresh_token":"a2a89b23-8d22-4d90-8585-8f464db433b0",
"expires_in": 3599,
"scope": "all"
}
</code>
</div>
</div>
<a id="oauth_access_token_req" name="oauth_access_token_req" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication via OAuth2</h3>
<p>API for requesting OAuth2 access tokens through oAuth2 refresh tokens.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>grant_type</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Indicates the requested grant type. Supported values:
<span>refresh_token</span>.
</td>
</tr>
<tr class=alt>
<td>client_id</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Indicates the client application identity.
</td>
</tr>
<tr class=alt>
<td>client_secret</td>
</tr>
<tr>
<td class=fielddesc>Optional field.
Indicates the client application password.
</td>
</tr>
<tr class=alt>
<td>refresh_token</td>
</tr>
<tr>
<td class=fielddesc>Mandatory field.
Application refresh token to generate access token.
</td>
</tr>
</table>
</div>
</div>
<a id="oauth_request_with_refresh" name="oauth_request_with_refresh" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>OAuth2 Token Request through Refresh Token</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/oauth/token?refresh_token={refresh_token}&client_id={clientId}&grant_type={grant_type}&client_secret={client_secret}
</code>
<code class="method-request">
POST api/oauth/token?client_id=community-app&grant_type=refresh_token&client_secret=123&refresh_token=a2a89b23-8d22-4d90-8585-8f464db433b0
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
""access_token": "b771987f-82fc-45ba-b521-bfe280c4e643",
"token_type": "bearer",
"refresh_token":"a2a89b23-8d22-4d90-8585-8f464db433b0",
"expires_in": 3599,
"scope": "all"
}
</code>
</div>
</div>
<a id="userdetails_request" name="userdetails_request" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Fetch authenticated user details </h4>
<p>checks the Authentication and returns the set roles and permissions allowed.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/userdetails?access_token={access_token}
</code>
<code class="method-request">
POST userdetails?access_token=bWlmb3M6cGFzc3dvcmQ=
Content-Type: application/json
No Request Body
</code>
<p>Example response of authenticated user user that is not linked with any staff.</p>
<code class="method-response">
{
"username": "mifos",
"userId": 1,
"accessToken": "bWlmb3M6cGFzc3dvcmQ=",
"authenticated": true,
"officeId": 1,
"officeName": "Head Office",
"roles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
],
"permissions": [
"ALL_FUNCTIONS"
]
}
</code>
<p>Example response of authenticated user that is linked with a staff member and role.</p>
<code class="method-response">
{
"username": "mifos",
"userId": 1,
"accessToken": "bWlmb3M6cGFzc3dvcmQ=",
"authenticated": true,
"officeId": 1,
"officeName": "Head Office",
"staffId": 1,
"staffDisplayName": "Director, Program",
"organisationalRole": {
"id": 100,
"code": "staffOrganisationalRoleType.programDirector",
"value": "Program Director"
},
"roles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
],
"permissions": [
"ALL_FUNCTIONS"
]
}
</code>
<code class="method-request">
POST api/oauth/token?username=mifos&password=password&client_id=community-app&grant_type=password&client_secret=123
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"developerMessage": "Invalid authentication details were passed in api request.",
"developerDocLink": "https://github.com/openMF/mifosx/wiki/HTTP-API-Error-codes",
"httpStatusCode": "401",
"defaultUserMessage": "Unauthenticated. Please login.",
"userMessageGlobalisationCode": "error.msg.not.authenticated",
"errors": []
}
</code>
</div>
</div>
<!-- start of users api docs -->
<a id="users" name="users" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Users</h3>
<p>An API capability to support administration of application users.</p>
</div>
</div>
<a id="users_list" name="users_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve list of users</h4>
<p>Example Requests:</p>
<div class=apiClick>users</div>
<br>
<br>
<div class=apiClick>users?fields=id,username,email,officeName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/users
</code>
<code class="method-response">
[
{
"id": 1,
"username": "mifos",
"officeId": 1,
"officeName": "Head Office",
"firstname": "App",
"lastname": "Administrator",
"email": "demomfi@mifos.org",
"passwordNeverExpires": false,
"staff": {
"id": 1,
"firstname": "Test",
"lastname": "123",
"displayName": "123, Test",
"mobileNo": "12312312",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true,
"isActive": true
}
"selectedRoles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
]
}
]
</code>
</div>
</div>
<a id="users_template" name="users_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve User Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>users/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/users/template
</code>
<code class="method-response">
{
"allowedOffices": [
{
"id": 1,
"name": "Head Office",
"nameDecorated": "Head Office"
}
],
"availableRoles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
]
}
</code>
</div>
</div>
<a id="users_retrieve" name="users_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a User</h4>
<p>Example Requests:</p>
<div class=apiClick>users/1</div>
<br>
<br>
<div class=apiClick>users/1?template=true</div>
<br>
<br>
<div class=apiClick>users/1?fields=username,officeName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/users/{userId}
</code>
<code class="method-response">
{
"id": 1,
"username": "mifos",
"officeId": 1,
"officeName": "Head Office",
"firstname": "App",
"lastname": "Administrator",
"email": "demomfi@mifos.org",
"passwordNeverExpires": true,
"staff": {
"id": 1,
"firstname": "Test",
"lastname": "123",
"displayName": "123, Test",
"mobileNo": "12312312",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true,
"isActive": true
}
"availableRoles": [],
"selectedRoles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
]
}
</code>
</div>
</div>
<a id="users_create" name="users_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a User</h4>
<p>Adds new application user.</p>
<p>
<b>Note:</b> Password information is not required (or processed).
Password details at present are auto-generated and then sent to
the email account given (which is why it can take a few seconds to
complete).
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr>
<td>username, firstname, lastname, email, officeId, roles, sendPasswordToEmail</td>
</tr>
</table>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr>
<td>staffId,passwordNeverExpires,isSelfServiceUser,clients</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/users
</code>
<code class="method-request">
POST users
Content-Type: application/json
Request body:
{
"username": "newuser",
"firstname": "Test",
"lastname": "User",
"email": "whatever@mifos.org",
"officeId": 1,
"staffId": 1,
"roles": [2,3],
"sendPasswordToEmail": true
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 11
}
</code>
<code class="method-request">
POST users
Content-Type: application/json
Request body:
{
"username": "newuser",
"firstname": "Test",
"lastname": "User",
"email": "whatever@mifos.org",
"officeId": 1,
"staffId": 1,
"roles": [2,3],
"sendPasswordToEmail": false,
"password": "123",
"repeatPassword": "123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 12
}
</code>
<code class="method-declaration">
POST https://DomainName/api/v1/users
</code>
<code class="method-request">
POST users
Content-Type: application/json
Request body:
{
"username": "newuser",
"firstname": "Test",
"lastname": "User",
"email": "whatever@mifos.org",
"officeId": 1,
"staffId": 1,
"roles": [2,3],
"sendPasswordToEmail": true,
"isSelfServiceUser": true,
"clients": [1,2,3]
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 11
}
</code>
</div>
</div>
<a id="users_update" name="users_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a User</h4>
<p>
<b>Note:</b> When updating a password you must provide the
repeatPassword parameter also.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/users/{userId)
</code>
<code class="method-request">
PUT users/3
Content-Type: application/json
Request body:
{
"firstname": "Test",
"password": "window75",
"repeatPassword": "window75"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 3,
"changes": {
"firstname": "Test",
"passwordEncoded": "abc3326b1bb376351c7baeb4175f5e0504e33aadf6a158474a6d71de1befae51"
}
}
</code>
</div>
</div>
<a id="users_delete" name="users_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a User</h4>
<p>Removes the user and the associated roles and permissions.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/users/{userId}
</code>
<code class="method-request">
DELETE users/20
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 20,
"changes": {}
}
</code>
</div>
</div>
<!-- end of users api docs -->
<!-- start of roles api docs -->
<a id="roles" name="users" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Roles</h3>
<p>An API capability to support management of application roles for user administration.</p>
</div>
</div>
<a id="roles_list" name="roles_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Roles</h4>
<p>Example Requests:</p>
<div class=apiClick>roles</div>
<br>
<br>
<div class=apiClick>roles?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/roles
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
]
</code>
</div>
</div>
<a id="roles_delete" name="roles_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Role</h4>
<p>Description : Delete the role in case role is not associated with any users.</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/roles/{roleId}
</code>
<code class="method-request">
DELETE roles/20
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"resourceId":1
}
</code>
</div>
</div>
<a id="roles_retrieve" name="roles_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Role</h4>
<p>Example Requests:</p>
<div class=apiClick>roles/1</div>
<br>
<br>
<div class=apiClick>roles/1?fields=name</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/roles/{roleId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
</code>
</div>
</div>
<a id="roles_create" name="roles_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a New Role</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, description</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/roles
</code>
<code class="method-request">
POST roles
Content-Type: application/json
Request body:
{
"name": "Another Role Name",
"description": "A description outlining the purpose of this role in relation to the application."
}
</code>
<code class="method-response">{ "resourceId": 2} </code>
</div>
</div>
<a id="roles_update" name="roles_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Role</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/roles/{roleId}
</code>
<code class="method-request">
PUT roles/1
Content-Type: application/json
Request body:
{
"description": "some description(changed)"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"description": "some description(changed)"
}
}
</code>
</div>
</div>
<a id="rolespermissions_retrieve" name="rolespermissions_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Role's Permissions</h4>
<p>Example Requests:</p>
<div class=apiClick>roles/1/permissions</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/roles/{roleId}/permissions
</code>
<code class="method-response">
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions.",
"permissionUsageData": [
{
"grouping": "authorisation",
"code": "READ_PERMISSION",
"entityName": "PERMISSION",
"actionName": "READ",
"selected": false
},
...
{
"grouping": "transaction_loan",
"code": "WRITEOFF_LOAN_CHECKER",
"entityName": "LOAN",
"actionName": "WRITEOFF",
"selected": false
}
]
}
</code>
</div>
</div>
<a id="roles_enable" name="roles_enable" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Enable Role</h4>
<p>Description : Enable role in case role is disabled.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/roles/{roleId}?command=enable
</code>
<code class="method-request">
POST roles/1?command=enable
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"resourceId":1
}
</code>
</div>
</div>
<a id="roles_disable" name="roles_disable" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Disable Role</h4>
<p>Description : Disable the role in case role is not associated with any users.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/roles/{roleId}?command=disable
</code>
<code class="method-request">
POST roles/1?command=disable
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"resourceId":1
}
</code>
</div>
</div>
<a id="rolespermissions_update" name="rolespermissions_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Role's Permissions</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/roles/{roleId}/permissions
</code>
<code class="method-request">
PUT roles/8
Content-Type: application/json
Request body:
{
"permissions": {
"ALL_FUNCTIONS_READ": "true"
}
}
</code>
<code class="method-response">
{
"resourceId": 8,
"changes": {
"permissions": {
"ALL_FUNCTIONS_READ": true
}
}
}
</code>
</div>
</div>
<!-- start of permissions api docs -->
<a id="permissions" name="permissions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Permissions</h3>
<p>An API capability to support management of application permissions for user administration.</p>
<p>There is no Apache Fineract functionality for creating or deleting permissions. Permissions come pre-installed.</p>
<p>Permissions are not updated, except in the case of enabling or disabling non-read transactions for
Maker Checker functionality</p>
</div>
</div>
<a id="permissions_list" name="permissions_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Application Permissions</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>makerCheckerable</dt>
<dd>optional, <span>
Values are true, false. Default is false.</span>
<p>If makerCheckerable=false or not supplied then a list of application permissions is returned. The "selected"
attribute is always true in this case.
</p>
<p>If makerCheckerable=true then the "selected" attribute shows whether the permission is
enabled for Maker Check functionality.
</p>
<p>
Note: Each Apache Fineract transaction is associated with a permission.
</p>
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>permissions</div><br><br>
<div class=apiClick>permissions?makerCheckerable=true</div><br><br>
<div class=apiClick>permissions?fields=grouping,code</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/permissions
</code>
<code class="method-response">
[
{
"grouping": "authorisation",
"code": "READ_PERMISSION",
"entityName": "PERMISSION",
"actionName": "READ",
"selected": true
},
....
{
"grouping": "transaction_loan",
"code": "WRITEOFF_LOAN",
"entityName": "LOAN",
"actionName": "WRITEOFF",
"selected": true
}
]
</code>
</div>
</div>
<a id="permissions_update" name="permissions_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Enable/Disable Permissions for Maker Checker</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/permissions
</code>
<code class="method-request">
PUT permissions
Content-Type: application/json
Request Body:
{
"permissions":{
"CREATE_GUARANTOR":true,
"CREATE_CLIENT":true
}
}
</code>
</div>
</div>
<!-- start of password validation policy api docs -->
<a id="password_preferences" name="passwordpreferences" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Password preferences</h3>
<p>This API enables management of password policy for user administration.</p>
<p>There is no Apache Fineract functionality for creating a validation policy. The validation policies come pre-installed.</p>
<p>Validation policies may be updated</p>
</div>
</div>
<a id="password_preferences_list" name="passwordValidationPolicy_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Application Password validation policies</h4>
<h5>Arguments</h5>
<dl class="argument-list">
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>passwordpreferences</div><br><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/passwordpreferences/template
</code>
<code class="method-response">
[
{
"id": 1,
"description": "Password must be at least 1 character and not more that 50 characters long",
"active": true,
"key" : "simple"
},
{
"id": 2,
"description": "Password must be at least 6 characters, no more than 50 characters long, must include at least one upper case letter, one lower case letter, one numeric digit and no space",
"active": false,
"key" : "secure"
}
]
</code>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/passwordpreferences/
</code>
<code class="method-response">
{
"id": 1,
"description": "Password most be at least 1 character and not more that 50 characters long",
"active": true,
"key" : "simple"
}
</code>
</div>
</div>
<a id="password_preferences_update" name="passwordValidationPolicy_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update password preferences</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/passwordpreferences/
</code>
<code class="method-request">
PUT passwordpreferences
Content-Type: application/json
Request Body:
{
"validationPolicyId" : 1,
}
</code>
</div>
</div>
<!-- start of accounting api docs -->
<a id="glaccounts" name="glaccounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>General Ledger Account</h3>
<p>Ledger accounts represent an Individual account within an Organizations Chart
Of Accounts(COA) and are assigned a name and unique number by which they can
be identified. <br/>
All transactions relating to a company's assets, liabilities, owners' equity,
revenue and expenses are recorded against these accounts
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>The name of the account</td>
</tr>
<tr class=alt>
<td>glCode</td>
</tr>
<tr>
<td class=fielddesc>The ledger code associated with the
Account<br>These codes are mandatory and should be unique within
an organization</td>
</tr>
<tr class=alt>
<td>disabled</td>
</tr>
<tr>
<td class=fielddesc>A boolean flag that indicates whether an account
is currently in use</td>
</tr>
<tr class=alt>
<td>type</td>
</tr>
<tr>
<td class=fielddesc>Classifies the account into one of the following Types
<br/><b>Asset:</b> 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<br/>
<b>Liability:</b> represent the different types of economic obligations
by a business, such as accounts payable, bank loan, bonds payable<br/>
<b>Income:</b> represent the company's gross earnings and common examples
include Interest Income, Sales and Service revenue<br/>
<b>Expense:</b> represent the company's expenditures to enable itself to
operate. Common examples are electricity and water, rentals, depreciation,
doubtful accounts, insurance.<br/>
<b>Equity:</b> represent the residual equity of a business (after
deducting from Assets all the liabilities) including Retained Earnings
and Appropriations <br/><br/>
The options are fully listed in <a href="#glaccounts_template">Retrieve
General Ledger Accounts Template</a>.
</td>
</tr>
<tr class=alt>
<td>usage</td>
</tr>
<tr>
<td class=fielddesc>Determines how the account shall be used<br>
"Header" accounts specify the title of a group of accounts. They are used
only for grouping together detail accounts that have a similar purpose; that is, detail accounts
are assigned to specific header accounts
<br/>
"Detail" accounts may have transactions logged against them<br/><br/>
The options are fully listed in <a href="#glaccounts_template">Retrieve
General Ledger Accounts Template</a>.
</td>
</tr>
<tr class=alt>
<td>manualEntriesAllowed</td>
</tr>
<tr>
<td class=fielddesc>Specifies if manual entries can be made
against this account using the <a href="#journalentries_create">
Create Journal Entries API</a> </td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>Human understandable description for the Ledger Account
</td>
</tr>
<tr class=alt>
<td>parentId</td>
</tr>
<tr>
<td class=fielddesc>To assign a parent for this GLAccount
</td>
</tr><tr class=alt>
<td>tagId</td>
</tr>
<tr>
<td class=fielddesc>Used for tagging the Account Heads, based on GLAccount types.
</td>
</tr>
</table>
</div>
</div>
<a id="glaccounts_list" name="glaccounts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List General Ledger Accounts</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>type</dt>
<dd>
Integer <span>optional</span>
</dd>
<dt>manualEntriesAllowed</dt>
<dd>
boolean <span>optional</span>
</dd>
<dt>usage</dt>
<dd>
Integer <span>optional</span>
</dd>
<dt>disabled</dt>
<dd>
boolean <span>optional</span>
</dd>
<dt>parentId</dt>
<dd>
Long <span>optional</span>
</dd>
<dt>tagId</dt>
<dd>
Long <span>optional</span>
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>glaccounts</div>
<br>
<br>
<div class=apiClick>glaccounts?type=1&manualEntriesAllowed=true&usage=1&disabled=false</div>
<br>
<div class=apiClick>glaccounts?fetchRunningBalance=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/glaccounts
</code>
<code class="method-response">
[
{
"id": 16,
"name": "Cash",
"parentId": 1,
"glCode": "100001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "Desc",
"nameDecorated": "....Cash",
"tagId": {
"id": 10,
"name": "asset tag"
},
"organizationRunningBalance": 118437,
},
{
"id": 15,
"name": "Fund Source For Loan",
"glCode": "100002",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "Desc",
"organizationRunningBalance": 118437,
}
]
</code>
</div>
</div>
<a id="glaccounts_template" name="glaccounts_template"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve GL Accounts Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>glaccounts/template</div>
<div class=apiClick>glaccounts/template?type=1</div>
<br>
type is optional and integer value from 1 to 5.<br>
<P><br>1.Assets
<br>2.Liabilities
<br>3.Equity
<br>4.Income
<br>5.Expenses</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/glaccounts/template<br>
GET https://DomainName/api/v1/glaccounts/template?type=1
</code>
<code class="method-response">
{
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"accountTypeOptions": [
{
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
{
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
{
"id": 3,
"code": "accountType.equity",
"value": "EQUITY"
},
{
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
{
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
}
],
"usageOptions": [
{
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
{
"id": 2,
"code": "accountUsage.header",
"value": "HEADER"
}
],
"assetHeaderAccountOptions": [
{
"id": 1,
"name": "Two wheeler loan",
"glCode": "10001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 2,
"code": "accountUsage.header",
"value": "HEADER"
},
"nameDecorated": "Two wheeler loan",
"tagId": {
"id": 10,
"name": "asset tag"
}
},
{
"id": 2,
"name": "VEHICLE LOAN",
"parentId": 1,
"glCode": "10002",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"usage": {
"id": 2,
"code": "accountUsage.header",
"value": "HEADER"
},
"nameDecorated": "....VEHICLE LOAN",
"tagId": {
"id": 10,
"name": "asset tag"
}
}
],
"liabilityHeaderAccountOptions": [
{
"id": 15,
"name": "liabilitieschild",
"glCode": "ltchild",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"usage": {
"id": 2,
"code": "accountUsage.header",
"value": "HEADER"
},
"nameDecorated": "liabilitieschild",
"tagId": {
"id": 11,
"name": "liability tag"
}
}
],
"equityHeaderAccountOptions": [
{
"id": 13,
"name": "testajax",
"glCode": "12345678",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 3,
"code": "accountType.equity",
"value": "EQUITY"
},
"usage": {
"id": 2,
"code": "accountUsage.header",
"value": "HEADER"
},
"nameDecorated": "testajax",
"tagId": {
"id": 12,
"name": "Equity tag"
}
}
],
"expenseHeaderAccountOptions": [
{
"id": 8,
"name": "Salary",
"glCode": "450098",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 5,
"code": "accountType.expense",
"value": "EXPENSE"
},
"usage": {
"id": 2,
"code": "accountUsage.header",
"value": "HEADER"
},
"nameDecorated": "Salary",
"tagId": {
"id": 14,
"name": "Expenses Tag"
}
}
],
"allowedAssetsTagOptions": [
{
"id": 10,
"name": "asset tag",
"position": 0
}
],
"allowedLiabilitiesTagOptions": [
{
"id": 11,
"name": "liability tag",
"position": 0
}
],
"allowedEquityTagOptions": [
{
"id": 12,
"name": "Equity tag",
"position": 0
}
],
"allowedIncomeTagOptions": [
{
"id": 13,
"name": "Income Tag",
"position": 0
}
],
"allowedExpensesTagOptions": [
{
"id": 14,
"name": "Expenses Tag",
"position": 0
}
]
}
</code>
</div>
</div>
<a id="glaccounts_retrieve" name="glaccounts_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a General Ledger Account</h4>
<p>Example Requests:</p>
<div class=apiClick>glaccounts/1</div>
<br>
<br>
<div class=apiClick>glaccounts/1?template=true</div>
<br>
<br>
<div class=apiClick>glaccounts/1?fields=name,glCode</div>
<br>
<br>
<div class=apiClick>glaccounts/1?fetchRunningBalance=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/glaccounts/{glaccountsId}
</code>
<code class="method-response">
{
"id": 1,
"name": "Cash",
"glCode": "100001",
"disabled": false,
"manualEntriesAllowed": true,
"type": {
"id": 1,
"code": "accountType.asset1",
"value": "ASSET"
},
"usage": {
"id": 1,
"code": "accountUsage.detail",
"value": "DETAIL"
},
"description": "Desc",
"organizationRunningBalance": 118437,
}
</code>
</div>
</div>
<a id="glaccounts_create" name="glaccounts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a General Ledger Account</h4>
<p>
<b>Note:</b> You may optionally
create Hierarchical Chart of Accounts by using the "parentId"
property of an Account<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, glCode, type, usage and manualEntriesAllowed
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/glaccounts
</code>
<code class="method-request">
POST glaccounts
Content-Type: application/json
Request Body:
{
"name": "Cash at Bangalore",
"glCode": "100017",
"manualEntriesAllowed": true,
"type": 1,
"tagId": "10",
"parentId": "18",
"usage": 1,
"description": "Cash at Bangalore Branch"
}
</code>
<code class="method-response">
{
"resourceId": 22
}
</code>
</div>
</div>
<a id="glaccounts_update" name="glaccounts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a General Ledger Account</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/glaccounts/{glaccountId}
</code>
<code class="method-request">
PUT glaccounts/22
Content-Type: application/json
Request Body:
{
"name": "Cash at Bangalore rural"
}
</code>
<code class="method-response">
{
"resourceId": 22,
"changes": {
"name": "Cash at Bangalore rural"
}
}
</code>
</div>
<div class="method-example">
<code class="method-request">
PUT glaccounts/1
Content-Type: application/json
Request Body:
{
"disabled": true
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"disabled": true
}
}
</code>
</div>
</div>
<a id="glaccounts_delete" name="glaccounts_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a General Ledger Account</h4>
<p>
<b>Note:</b> Only Ledger Accounts against which no transactions have been logged
(either manually or by the loan or Savings portfolio) can be deleted.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/glaccounts/{glaccountId}
</code>
<code class="method-request">
DELETE glaccounts/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {}
}
</code>
</div>
</div>
<a id="glclosures" name="glclosures" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Accounting Closure</h3>
<p>An accounting closure indicates that no more journal
entries may be logged (or reversed) in the system,
either manually or via the portfolio with an entry date
prior to the defined closure date
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>closingDate</td>
</tr>
<tr>
<td class=fielddesc>The date for which the
accounting closure is defined</td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>The identifer of the branch for
which accounting has been closed</td>
</tr>
<tr class=alt>
<td>comments</td>
</tr>
<tr>
<td class=fielddesc>Description associated with an
Accounting closure</td>
</tr>
</table>
</div>
</div>
<a id="glclosures_list" name="glclosures_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Accounting closures</h4>
<p>Example Requests:</p>
<div class=apiClick>glclosures</div>
<br>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/glclosures
</code>
<code class="method-response">
[
{
"id": 7,
"officeId": 1,
"officeName": "Head Office",
"closingDate": [
2013,
1,
2
],
"deleted": false,
"createdDate": [
2013,
1,
3
],
"lastUpdatedDate": [
2013,
1,
3
],
"createdByUserId": 1,
"createdByUsername": "mifos",
"lastUpdatedByUserId": 1,
"lastUpdatedByUsername": "mifos",
"comments": "closed",
},
{
"id": 6,
"officeId": 1,
"officeName": "Head Office",
"closingDate": [
2012,
12,
13
],
"deleted": false,
"createdDate": [
2012,
12,
14
],
"lastUpdatedDate": [
2012,
12,
14
],
"createdByUserId": 1,
"createdByUsername": "mifos",
"lastUpdatedByUserId": 1,
"lastUpdatedByUsername": "mifos",
"comments": "hello",
}
]
</code>
</div>
</div>
<a id="glclosures_retrieve" name="glclosures_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve an Accounting Closure</h4>
<p>Example Requests:</p>
<div class=apiClick>glclosures/1</div>
<br>
<br>
<div class=apiClick>/glclosures/1?fields=officeName,closingDate</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/glclosures/{glclosureId}
</code>
<code class="method-response">
{
"id": 7,
"officeId": 1,
"officeName": "Head Office",
"closingDate": [
2013,
1,
2
],
"deleted": false,
"createdDate": [
2013,
1,
3
],
"lastUpdatedDate": [
2013,
1,
3
],
"createdByUserId": 1,
"createdByUsername": "mifos",
"lastUpdatedByUserId": 1,
"lastUpdatedByUsername": "mifos",
"comments": "closed",
}
</code>
</div>
</div>
<a id="glclosures_create" name="glclosures_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create an Accounting Closure</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>officeId,closingDate
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/glclosures
</code>
<code class="method-request">
POST glclosures
Content-Type: application/json
Request Body:
{
"officeId": 1,
"closingDate": "06 December 2012",
"comments": "The accountants are heading for a carribean vacation",
"locale": "en" ,
"dateFormat": "dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 9
}
</code>
</div>
</div>
<a id="glclosures_update" name="glclosures_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update an Accounting closure</h4>
<p>Once an accounting closure is created, only the comments associated with it may be edited
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/glclosures/{glclosureId}
</code>
<code class="method-request">
PUT glclosures/1
Content-Type: application/json
Request Body:
{
"comments": "All transactions verified by Johnny Cash"
}
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 1,
"changes": {
"comments": "All transactions verified by Johnny Cash"
}
}
</code>
</div>
</div>
<a id="glclosures_delete" name="glclosures_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete an accounting closure</h4>
<p>
<b>Note:</b> Only the latest accounting closure
associated with a branch may be deleted.
</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/glclosures/{glclosureId}
</code>
<code class="method-request">
DELETE glclosures/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"officeId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="journalentries" name="journalentries" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Journal Entries</h3>
<p>A journal entry refers to the logging of
transactions against general ledger accounts. A journal
entry may consist of several line items, each of which is either a "debit" or a "credit". The total amount of the
debits must equal the total amount of the credits or the
journal entry is said to be "unbalanced" <br/><br/>
A journal entry directly changes the account balances on
the general ledger
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of the office (
cost center) at which the financial activity
occured</td>
</tr>
<tr class=alt>
<td>currencyCode</td>
</tr>
<tr>
<td class=fielddesc>A three letter ISO code of currency.</td>
</tr>
<tr class=alt>
<td>glAccountId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of the account (
Ledger Account) against which this journal entry
was made
</td>
</tr>
<tr class=alt>
<td>transactionDate</td>
</tr>
<tr>
<td class=fielddesc>The target date for which this
entry was recorded</td>
</tr>
<tr class=alt>
<td>amount</td>
</tr>
<tr>
<td class=fielddesc>The Monetary amount associated
with this entry
</td>
</tr>
<tr class=alt>
<td>comments</td>
</tr>
<tr>
<td class=fielddesc>A description associated with
this entry</td>
</tr>
<tr class=alt>
<td>entryType</td>
</tr>
<tr>
<td class=fielddesc>Either a Credit(1) or a Debit(2)</td>
</tr>
<tr class=alt>
<td>transactionId</td>
</tr>
<tr>
<td class=fielddesc>A unique Identifier for a set
of related Credit and Debit entries that make up
a "balanced" jounral Entry. For a manual entry,
this feild is a unique string.<br/>
For a system generated entry, the combination
of transactionId and entityId is unique
</td>
</tr>
<tr class=alt>
<td>manualEntry</td>
</tr>
<tr>
<td class=fielddesc>Flag determines if an entry is
generated by the portfolio (posted automatically by
the system during the lifecycle of loan or saving
products) or manually created by using the <a href="
journalentries_create">Create (Balanced) Journal
Entries</a> API
</td>
</tr>
<tr class=alt>
<td>reversed</td>
</tr>
<tr>
<td class=fielddesc>Flag determines if this manual
journal entry has been reversed using the <a href="
journalentries_reverse">Reverse a Journal Entry</a>
API. <br/>
Note: A journal entry is reversed by logging debits
for all credits that make up the Journal entry and
vice-versa
</td>
</tr>
<tr class=alt>
<td>referenceNumber</td>
</tr>
<tr>
<td class=fielddesc>An additional field that is used to store additional information about the entry (Ex: chequeNo)
</td>
</tr>
<tr class=alt>
<td>accountingRule</td>
</tr>
<tr>
<td class=fielddesc>Denotes the accounting rule id for posting journal entries.
</td>
</tr>
<tr class=alt>
<td>officeRunningBalance</td>
</tr>
<tr>
<td class=fielddesc>Describes office balance after the journal entry for the Ledger Account.
</td>
</tr>
<tr class=alt>
<td>organizationRunningBalance</td>
</tr>
<tr>
<td class=fielddesc>Describes complete organization balances after the journal entry for the Ledger Account.
</td>
</tr>
<tr class=alt>
<td>runningBalanceComputed</td>
</tr>
<tr>
<td class=fielddesc>Describes whether account balances computed for the journal entry.
</td>
</tr>
<tr class=alt>
<td>transactionDetails</td>
</tr>
<tr>
<td class=fielddesc>Additional details of transaction like payment details and notes .
</td>
</tr>
<tr class=alt>
<td>paymentTypeId</td>
</tr>
<tr>
<td class=fielddesc>Maps to a <a href="#configs_codes_codevalues">Code value</a> of a system defined <a href="
#configs_codes">Code</a> with the name "PaymentType". This is used to optionally identify the mode of payment (Ex: checks, Cash etc) associated with a Journal Entry
</td>
</tr>
<tr class=alt>
<td>accountNumber, checkNumber, routingCode, receiptNumber, bankNumber</td>
</tr>
<tr>
<td class=fielddesc>Various properties associated with a payment type
</td>
</tr>
</table>
</div>
</div>
<a id="journalentries_list" name="journalentries_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Journal Entries</h4>
<p>The <i>list</i> capability of journal entries can support <b>pagination</b> and <b>sorting</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates from what result to start from.</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>displayName, accountNo, officeId, officeName</span>
</dd>
<dd>Orders the results by the field indicated.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>officeId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides ability to restrict list of centers returned based on the office there associated with.</dd>
<dt>glAccountId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dt>manualEntriesOnly</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Flag determines if only manually created journal entries
are to be returned( journal entries created by
the system during lifecycle of loan or saving
products etc shall be excluded)
<br/>
Set to "false" by default if not passed in explicity
</dd>
<dt>fromDate</dt>
<dd>
Date<span>optional</span>
</dd>
<dd>Filters for Journal entries whose entry Date
is greater than or equal to the passed in Date
</dd>
<dt>toDate</dt>
<dd>
Date <span>optional</span>
</dd>
<dd>Filters for Journal entries whose entry Date
is lesser than or equal to the passed in Date
</dd>
<dt>transactionId</dt>
<dd>
String <span>optional</span>
</dd>
<dt>transactionDetails</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Flag determines if additional transactional details
to be returned(like payment details and notes).
</dd>
<dt>runningBalance</dt>
<dd>
Boolean <span>optional</span>
</dd>
<dd>Flag determines whether running balances
to be returned
</dd>
<dt>loanId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides ability to restrict journal entries based on the loan they are associated with
</dd>
<dt>savingsId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>Provides ability to restrict journal entries based on the savings account they are associated with
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>journalentries</div>
<br>
<div class=apiClick>journalentries?transactionId=PB37X8Y21EQUY4S</div>
<br>
<div class=apiClick>journalentries?officeId=1&manualEntriesOnly=true&fromDate=1 July 2013&toDate=15 July 2013&dateFormat=dd MMMM yyyy&locale=en</div>
<br>
<div class=apiClick>journalentries?fields=officeName,glAccountName,transactionDate</div>
<br>
<div class=apiClick>journalentries?offset=10&limit=50</div>
<br>
<div class=apiClick>journalentries?orderBy=transactionId&sortOrder=DESC</div>
<br>
<div class=apiClick>journalentries?runningBalance=true</div>
<br>
<div class=apiClick>journalentries?transactionDetails=true</div>
<br>
<div class=apiClick>journalentries?loanId=12</div>
<br>
<div class=apiClick>journalentries?savingsId=24</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/journalentries?transactionId=PB37X8Y21EQUY4S
</code>
<code class="method-response">
{
"totalFilteredRecords": 24,
"pageItems": [
{
"id": 1,
"officeId": 1,
"officeName": "Head Office",
"glAccountName": "ACCOUNT_NAME_WTYRB",
"glAccountId": 98,
"glAccountCode": "ASSET_C01367768735188",
"glAccountType": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"transactionDate": [
2011,
3,
4
],
"entryType": {
"id": 2,
"code": "journalEntrytType.debit",
"value": "DEBIT"
},
"amount": 10000,
"transactionId": "33",
"manualEntry": false,
"entityType": {
"id": 1,
"code": "productType.loan",
"value": "LOAN"
},
"entityId": 7,
"createdByUserId": 1,
"createdDate": [
2013,
5,
5
],
"createdByUserName": "mifos",
"reversed": false,
},
{
"id": 2,
"officeId": 1,
"officeName": "Head Office",
"glAccountName": "ACCOUNT_NAME_WTYRB",
"glAccountId": 98,
"glAccountCode": "ASSET_C01367768735188",
"glAccountType": {
"id": 1,
"code": "accountType.asset",
"value": "ASSET"
},
"transactionDate": [
2011,
3,
4
],
"entryType": {
"id": 1,
"code": "journalEntryType.credit",
"value": "CREDIT"
},
"amount": 10000,
"transactionId": "33",
"manualEntry": false,
"entityType": {
"id": 1,
"code": "productType.loan",
"value": "LOAN"
},
"entityId": 7,
"createdByUserId": 1,
"createdDate": [
2013,
5,
5
],
"createdByUserName": "mifos",
"reversed": false,
}
]
}
</code>
</div>
</div>
<a id="journalentries_create" name="journalentries_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create "Balanced" Journal Entries</h4>
<p>
<b>Note:</b> A Balanced (simple) Journal entry would
have atleast one "Debit" and one "Credit" entry whose
amounts are equal <br/>
Compound Journal entries may have "n" debits and "m"
credits where both "m" and "n" are greater than 0
and the net sum or all debits and credits are equal
<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>officeId, transactionDate
</td>
</tr>
<tr>
<td class=fielddesc></td>
</tr>
<tr class=alt>
<td>credits</td>
</tr>
<tr>
<td class=fielddesc>Details of the credits contained
in the journal entry. Each credit entry contains
the following items <br/>
glAccountId: Identifier of the general ledger
account against which the credit entry shall be
made <br/>
amount: Amount of money credited
<br/>
comments: Optional description associated with
a credit entry
</a>.
</td>
</tr>
<tr class=alt>
<td>debits</td>
</tr>
<tr>
<td class=fielddesc>Details of the debits contained
in the journal entry. Each debit entry contains the
following items <br/>
glAccountId: Identifier of the general ledger account
against which the debit entry shall be
made <br/>
amount: Amount of money debited
<br/>
comments: Optional description associated with
a debit entry
</a>.
</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>paymentTypeId, accountNumber, checkNumber, routingCode, receiptNumber, bankNumber</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/journalentries
</code>
<code class="method-request">
POST journalentries
Content-Type: application/json
Request Body:
{
"officeId": 1,
"transactionDate": "06 December 2012",
"comments": "Gifts for staff",
"locale": "en" ,
"currencyCode": "USD",
"dateFormat": "dd MMMM yyyy",
"credits":[{"glAccountId":1,
"amount":5000},
{"glAccountId":2,
"amount":5000}
],
"debits":[{"glAccountId":3,
"amount":5000},
{"glAccountId":4,
"amount":5000}
],
"paymentTypeId": "12",
"accountNumber": "accno123",
"checkNumber": "chec123",
"routingCode": "rou123",
"receiptNumber": "rec123",
"bankNumber": "ban123"
}
</code>
<code class="method-response">
{
"officeId": 1,
"transactionId": "DNEEMS2LPD0NJ9O"
}
</code>
<code class="method-declaration">
POST https://DomainName/api/v1/journalentries
</code>
<code class="method-request">
POST journalentries
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"officeId": "1",
"transactionDate": "23 May 2013",
"referenceNumber": "547",
"currencyCode": "USD",
"comments": "asdf",
"accountingRule": "2",
"amount": "547"
}
</code>
<code class="method-response">
{
"officeId":1,
"transactionId":"RS9MCISID4WK1ZM"
}
</code>
<code class="method-declaration">
POST https://DomainName/api/v1/journalentries
</code>
<code class="method-request">
POST journalentries
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"officeId": "1",
"transactionDate": "23 May 2013",
"referenceNumber": "547",
"comments": "asdf",
"accountingRule": "2",
"credits":[{"glAccountId":1,
"amount":5000},
{"glAccountId":2,
"amount":5000}
],
"debits":[{"glAccountId":3,
"amount":5000},
{"glAccountId":4,
"amount":5000}
]
}
</code>
<code class="method-response">
{
"officeId":1,
"transactionId":"RS9MCISID4WK1ZM"
}
</code>
<code class="method-declaration">
POST https://DomainName/api/v1/journalentries
</code>
<code class="method-request">
POST journalentries
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"officeId": "1",
"transactionDate": "23 May 2013",
"referenceNumber": "547",
"comments": "asdf",
"accountingRule": "3",
"credits":[{"glAccountId":1,
"amount":5000},
{"glAccountId":2,
"amount":5000}
],
"amount": "10000"
}
</code>
<code class="method-response">
{
"officeId":1,
"transactionId":"RS9MCISID4WK1ZM"
}
</code>
</div>
</div>
<a id="journalentries_updatebalance" name="journalentries_updatebalance" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Running balances for Journal Entries</h4>
<p>
This API calculates the running balances for office. If office ID not provided this API calculates running balances for all offices.
<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>officeId
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/journalentries?command=updateRunningBalance
</code>
<code class="method-request">
POST journalentries?command=updateRunningBalance
Content-Type: application/json
Request Body:
{
"officeId": 1,
}
</code>
<code class="method-response">
{
"officeId": 1,
}
</code>
</div>
</div>
<a id="journalentries_retrieve" name="journalentries_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a single Entry</h4>
<p>Example Requests:</p>
<div class=apiClick>journalentries/1</div>
<br>
<br>
<br>
<div class=apiClick>journalentries/1?fields=officeName,glAccountId,entryType,amount</div>
<br>
<div class=apiClick>journalentries/1?runningBalance=true</div>
<br>
<div class=apiClick>journalentries/1?transactionDetails=true</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/journalentries/{entryId}
</code>
<code class="method-response">
{
"id": 1,
"officeId": 2,
"officeName": "sub branch 1",
"glAccountName": "Income from interest",
"glAccountId": 14,
"glAccountCode": "400001",
"glAccountType": {
"id": 4,
"code": "accountType.income",
"value": "INCOME"
},
"transactionDate": [
2012,
11,
2
],
"entryType": {
"id": 1,
"code": "journalEntryType.credit",
"value": "CREDIT"
},
"amount": 900,
"transactionId": "13",
"manualEntry": true,
"createdByUserId": 1,
"createdDate": [
2012,
11,
2
],
"createdByUserName": "mifos",
"reversed": false,
}
</code>
</div>
</div>
<a id="journalentries_reverse" name="journalentries_reverse"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Reverse a Journal Entry</h4>
<p>
<b>Note:</b> A journal entry is reversed by logging debits
for all credits that constitute the Journal entry and
vice-versa. The transactionId of the "reversal Entry" is returned
as the methods response
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>command</dt>
<dd>
String<span> Mandatory, case-insensitive</span>
</dd>
<dd>'reverse' : Reverse the Journal Entry</dd>
</dl>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>comments</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Optional string to be applied as a comment for the created reversal entry,
default comment is used if this field is not supplied</dd>
</dl>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/journalentries/{transactionId}?command=reverse
</code>
<code class="method-request">
POST journalentries/C1MAE935K0IAEYA?command=reverse
Content-Type: application/json
</code>
<code class="method-response">
{
"transactionId": "YFDYMPBVVI9TRJP"
}
</code>
</div>
</div>
<!-- start office gl accout mappings-->
<a id="officeglaccount" name="officeglaccount" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Mapping Financial Activities to Accounts</h3>
<p>
Organization Level Financial Activities like Asset and Liability Transfer can be mapped to GL Account. Integrated accounting takes these accounts into consideration when an Account transfer is made between a savings to loan/savings account and vice-versa
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>financialActivityId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of the Financial Activity
</td>
</tr>
<tr class=alt>
<td>glAccountId</td>
</tr>
<tr>
<td class=fielddesc>The identifier of a GL Account (
Ledger Account) which shall be used as the default account for the selected Financial Activity
</td>
</tr>
</table>
</div>
</div>
<a id="financialactivityaccounts_list" name="financialactivityaccounts_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Financial Activities to Accounts Mappings</h4>
<p>Example Requests:</p>
<div class=apiClick>financialactivityaccounts</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/financialactivityaccounts
</code>
<code class="method-response">
[
{
"id": 1,
"financialActivityData": {
"id": 200,
"name": "liabilityTransfer",
"mappedGLAccountType": "LIABILITY"
},
"glAccountData": {
"id": 55,
"name": "Liability Transfer (Temp)",
"glCode": "220004-Temp"
}
},
{
"id": 2,
"financialActivityData": {
"id": 100,
"name": "assetTransfer",
"mappedGLAccountType": "ASSET"
},
"glAccountData": {
"id": 33,
"name": "Petty Cash",
"glCode": "20302"
}
}
]
</code>
</div>
</div>
<a id="financialactivityaccounts_create" name="financialactivityaccounts_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a new Financial Activity to Accounts Mapping</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>financialActivityId, glAccountId
</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/financialactivityaccounts
</code>
<code class="method-request">
POST financialactivityaccounts
Content-Type: application/json
Request Body:
{
"financialActivityId": 200,
"glAccountId":2
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="financialactivityaccounts_update" name="financialactivityaccounts_update" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Financial Activity to Account Mapping</h4>
<p>
the API updates the Ledger account linked to a Financial Activity
<br>
</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/financialactivityaccounts/{financialactivityaccountId}
</code>
<code class="method-request">
PUT financialactivityaccounts
Content-Type: application/json
Request Body:
{
"financialActivityId": 200,
"glAccountId":3
}
</code>
<code class="method-response">
{
"resourceId": 2,
"changes": {
"glAccountId": 3
}
}
</code>
</div>
</div>
<a id="financialactivityaccounts_retrieve" name="financialactivityaccounts_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Financial Activity to Account Mapping</h4>
<p>Example Requests:</p>
<div class=apiClick>financialactivityaccounts/1</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/financialactivityaccounts/{financialactivityaccountId}
</code>
<code class="method-response">
{
"id": 1,
"financialActivityData": {
"id": 200,
"name": "liabilityTransfer",
"mappedGLAccountType": "LIABILITY"
},
"glAccountData": {
"id": 55,
"name": "Liability Transfer (Temp)",
"glCode": "220004-Temp"
}
}
</code>
</div>
</div>
<a id="financialactivityaccounts_delete" name="financialactivityaccounts_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Financial Activity to Account Mapping</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/financialactivityaccounts/{financialactivityaccountId}
</code>
<code class="method-request">
DELETE financialactivityaccounts/1?
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": "2"
}
</code>
</div>
</div>
<!-- start Periodic accrual API doc-->
<a id="periodicaccrualaccounting" name="periodicaccrualaccounting" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Periodic Accrual Accounting</h3>
<p>
Periodic Accrual is to accrue the loan income till the specific date or till batch job scheduled time.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>tillDate</td>
</tr>
<tr>
<td class=fielddesc>which specifies periodic accruals should happen till the given Date
</td>
</tr>
</table>
</div>
</div>
<a id="periodicaccrualaccounting_run" name="periodicaccrualaccounting_run" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Executes Periodic Accrual Accounting</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>tillDate
</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/runaccruals
</code>
<code class="method-request">
POST financialactivityaccounts
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"tillDate":"04 June 2014"
}
</code>
<code class="method-response">
</code>
</div>
</div>
<!-- Provisioning Entries -->
<a id="provisioningentries" name="provisioningentries" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Provisioning Entries</h3>
<p>This defines the Provisioning Entries for all active loan products
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>date</td>
</tr>
<tr>
<td class=fielddesc>Date on which day provisioning entries should be created
</td>
</tr>
<tr class=alt>
<td>createjournalentries</td>
</tr>
<tr>
<td class=fielddesc>
Boolean variable whether to add journal entries for generated provisioning entries
</td>
</tr>
</table>
</div>
</div>
<a id="provisioningentries_create" name="provisioningentries_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create new Provisioning Entries</h4>
<p>Creates a new Provisioning Entries</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>date</td>
</tr>
<tr class=alt>
<td>dateFormat</td>
</tr>
<tr class=alt>
<td>locale</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>createjournalentries</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/provisioningentries
</code>
<code class="method-request">
POST provisioningentries
Content-Type: application/json
Request Body:
{
"date":"16 October 2015",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"createjournalentries":true
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="provisioningentries_list" name="provisioningentries_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List all Provisioning Entries</h4>
<p>List all Provisioning Entries</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/provisioningentries
</code>
<code class="method-request">
GET provisioningentries
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{[
{"id":1, "journalEntry":true, "createdUser":"mifos", "createdDate":"16 October 2014"},
{"id":2, "journalEntry":true, "createdUser":"mifos", "createdDate":"16 October 2015"}
]
}
</code>
</div>
</div>
<a id="provisioningentry_retrieve" name="provisioningentry_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieves a Provisioning Entry</h4>
<p>Returns the details of a generated Provisioning Entry.</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/provisioningentries/{privisioningEntryId}
</code>
<code class="method-request">
GET provisioningentries
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"id":1,
"journalEntry":true,
"createdUser":"mifos",
"createdDate":"16 October 2014",
"provisioningEntries":[
{"historyId":1,
"officeId:":1
"officeName:":"Head Office",
"currencyCode:":"USD",
"productId:":12,
"productName:":"Loan Product Name1",
"categoryId":4,
"categoryName":"LOSS",
"amountReserved":63098.29,
"liabilityAccount":4,
"liabilityCode":"Liability Account Name",
"expenseAccount":6,
"expenseCode":"Expense Account Name"
},
{"id":2,
"journalEntry":true,
"createdUser":"mifos",
"createdDate":"16 October 2014",
"provisioningEntries":[
{"historyId":1,
"officeId:":2
"officeName:":"Branch Office",
"currencyCode:":"USD",
"productId:":12,
"productName:":"Loan Product Name1",
"categoryId":2,
"categoryName":"SUB-STANDARD",
"amountReserved":63098.29,
"liabilityAccount":1,
"liabilityCode":"Liability Account Name",
"expenseAccount":2,
"expenseCode":"Expense Account Name"
}
]
}
</code>
</div>
</div>
<a id="provisioningentry_recreate" name="provisioningentry_recreate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Recreates Provisioning Entry</h4>
<p>Recreates Provisioning Entry.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/provisioningentries/{privisioningEntryId}?command=recreateprovisioningentry
</code>
<code class="method-request">
POST provisioningentries
Content-Type: application/json
Request Body:
{
"command":"recreateprovisioningentry"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="provisioningentry_addjournals" name="provisioningentry_addjournals"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieves a Provisioning Entry</h4>
<p>Returns the details of a generated Provisioning Entry.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/provisioningentries/{privisioningEntryId}?command=createjournalentry
</code>
<code class="method-request">
POST provisioningentries
Content-Type: application/json
Request Body:
{
"command":"createjournalentry"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- end Periodic accrual API doc-->
<!-- start of Search API doc -->
<a id="search" name="search" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Search</h3>
<p>Search API allows to search scoped resources clients, loans and groups on specified fields.</p>
<table class=matrixHeading id=scoped_resources>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Scoped Resources</div></td>
<td><div class="fineractHeading2">Scoped fields</div></td>
</tr>
<tr class=alt>
<td rowspan="3"><a href="#clients">Client</a></td>
<td>Display Name</td>
</td>
<tr class=alt>
<td>Account Number</td>
</tr>
<tr class=alt>
<td>External Id</td>
</tr>
<tr>
<td><a href="#loans">Loan</a></td>
<td>Account Number</td>
</td>
<tr class=alt>
<td><a href="#client_identifiers">Client Identifiers</a></td>
<td>Document Key</td>
</td>
<tr>
<td rowspan=2><a href="#groups">Group</a></td>
<td>Name</td>
</td>
<tr class=alt>
<td>Account Number</td>
</tr>
<tr class=alt>
<td></td>
<td>External Id</td>
</td>
</table>
</div>
</div>
<a id="search_resource" name="search_resource"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Search Resources</h4>
<p>Example Requests:</p>
<div class=apiClick>search?query=000000001</div>
<br>
<div class=apiClick>search?query=Petra&resource=clients,groups</div>
<br>
<div class=apiClick>search?query=Petra&resource=clients,groups&exactMatch=true</div>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Parameters</div></td>
<td><div class="fineractHeading2">Description</div></td>
</tr>
<tr class=alt>
<td>
query
<br><i>(mandatory)</i>
</td>
<td class=fielddesc>
String which is searched on scoped resources
</td>
</tr>
<tr>
<td>
resource
<br><i>(non-mandatory)</i>
</td>
<td class=fielddesc>
Scoped resources on which search can be performed. If there is no resource parameter passed then search will be performed on all <a href="#search">scoped</a> resources.
</td>
</tr>
<tr>
<td>
exactMatch
<br><i>(non-mandatory)</i>
</td>
<td class=fielddesc>
Scoped resources on which search can be performed. If there is no exactMatch parameter passed then search will be performed for all partial matches <a href="#search">scoped</a> resources.
</td>
</tr>
</table>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Order of Search results</div></td>
</tr>
<tr class=alt>
<td class=fielddesc>
<b>List exact match results in following order</b>
<ol start=1>
<li>1. Clients</li>
<li>2. Loans</li>
<li>3. Client Identifiers</li>
<li>4. Groups</li>
</ol>
</td>
</tr>
<tr>
<td class=fielddesc>
<b>List partial match results in following order</b>
<ol start=1>
<li>1. Clients</li>
<li>2. Loans</li>
<li>3. Client Identifiers</li>
<li>4. Groups</li>
</ol>
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/search?query=000000111
</code>
<code class="method-response">
[
{
"entityId": 111,
"entityAccountNo": "000000111",
"entityName": "12-A Flat Loan",
"entityType": "LOAN",
"parentId": 65,
"parentName": "aaaa aaaaa",
"parentType": "client"
}
]
</code>
<code class="method-declaration">
GET https://DomainName/api/v1/search?query=000000001&exactMatch=true
</code>
<code class="method-response">
[{
"entityId": 1,
"entityAccountNo": "000000001",
"entityExternalId": "ID_JKZGEXF",
"entityName": "Group_Name_HVCU5",
"entityType": "GROUP",
"parentId": 1,
"parentName": "Head Office",
"entityStatus": {
"id": 300,
"code": "groupingStatusType.active",
"value": "Active"
}
},
{
"entityId": 1,
"entityAccountNo": "000000001",
"entityExternalId": "ID_UOZAGPZ",
"entityName": "Client_FirstName_KJ5B6 Client_LastName_KDGX",
"entityType": "CLIENT",
"parentId": 1,
"parentName": "Head Office",
"entityStatus": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
}
}]
</code>
</div>
</div>
<a id="advance_search" name="advance_search" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Advance Search</h3>
<p>AdHoc Query search supported parameters and field descriptions</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>entities</td>
</tr>
<tr>
<td class=fielddesc>Entities to be included for search.(presently support added only for loans)<br></td>
</tr>
<tr class=alt>
<td>loanStatus</td>
</tr>
<tr>
<td class=fielddesc>Loan status values to be included for search.<br>
Supported loan status:["all","active","overpaid","closed","writeoff"]
</td>
</tr>
<tr class=alt>
<td>loanProducts</td>
</tr>
<tr>
<td class=fielddesc>Array of loanproduct ids.
</td>
</tr>
<tr class=alt>
<td>offices</td>
</tr>
<tr>
<td class=fielddesc>Array of office ids.
</td>
</tr>
<tr class=alt>
<td>loanDateOption</td>
</tr>
<tr>
<td class=fielddesc>Date condition name for search query.<br>
Supported values "approvalDate" or "createdDate" or "disbursalDate".
</td>
</tr>
<tr class=alt>
<td>loanFromDate</td>
</tr>
<tr>
<td class=fielddesc>Start date for 'loanDateOption' in 'yyyy-MM-dd' format. </td>
</tr>
<tr class=alt>
<td>loanToDate</td>
</tr>
<tr>
<td class=fielddesc>End date for 'loanDateOption' in 'yyyy-MM-dd' format. </td>
</tr>
<tr class=alt>
<td>includeOutStandingAmountPercentage</td>
</tr>
<tr>
<td class=fielddesc>It is a Boolean value, allows to search percentage of loan outstanding amount with in a given range</td>
</tr>
<tr class=alt>
<td>outStandingAmountPercentageCondition</td>
</tr>
<tr>
<td class=fielddesc>Condition type for outstanding amount percentage.
Supported values: between or &lt;= or &gt;= or &lt; or &gt; or = <br>
When 'outStandingAmountPercentageCondition' is <b>between</b> required fields <b>minOutStandingAmountPercentage</b> and <b>maxOutStandingAmountPercentage</b>
</td>
</tr>
<tr class=alt>
<td>minOutStandingAmountPercentage</td>
</tr>
<tr>
<td class=fielddesc>Minimum percentage of outstanding amount. <br> Mandatory when 'outStandingAmountPercentageCondition' type is 'between' </td>
</tr>
<tr class=alt>
<td>maxOutStandingAmountPercentage </td>
</tr>
<tr>
<td class=fielddesc>Maximum percentage of outstanding amount. <br> Mandatory when 'outStandingAmountPercentageCondition' type is 'between' </td>
</tr>
<tr class=alt>
<td>outStandingAmountPercentage</td>
</tr>
<tr>
<td class=fielddesc>Percentage of outstanding amount for search. <br> Mandatory when 'outStandingAmountPercentageCondition' type is otherthan 'between' </td>
</tr>
<tr class=alt>
<td>includeOutstandingAmount</td>
</tr>
<tr>
<td class=fielddesc>Boolean value, allows user to search loan outstanding amount with in a given range</td>
</tr>
<tr class=alt>
<td>outstandingAmountCondition</td>
</tr>
<tr>
<td class=fielddesc>Condition type to search outstanding amount.
Supported values: between or &lt;= or &gt;= or &lt; or &gt; or = <br>
When 'outstandingAmountCondition' is <b>between</b> required fields <b>minOutStandingAmount</b> and <b>maxOutStandingAmount</b>
</td>
</tr>
<tr class=alt>
<td>minOutStandingAmount</td>
</tr>
<tr>
<td class=fielddesc>Minimum value of outstanding amount for outstandingAmountCondition type between. <br> Mandatory when 'outstandingAmountCondition' type is 'between' </td>
</tr>
<tr class=alt>
<td>maxOutStandingAmount</td>
</tr>
<tr>
<td class=fielddesc>Maximum value of outstanding amount for outstandingAmountCondition type between. <br> Mandatory when 'outstandingAmountCondition' type is 'between' </td>
</tr>
<tr class=alt>
<td>outStandingAmount</td>
</tr>
<tr>
<td class=fielddesc>Default value of outstanding amount for search. <br> Mandatory when 'outstandingAmountCondition' type is otherthan 'between' </td>
</tr>
</table>
</div>
</div>
<a id="advance_search_resource" name="advance_search_resource" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>AdHoc Query Search</h4>
<p>
AdHocQuery search has more search options, it is a <b>POST</b> request, it uses request body to send search parameters<br>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>entities</td>
</tr>
</table>
<br />
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>
loanStatus, loanProducts, offices, loanDateOption, loanFromDate, loanToDate, <br>includeOutStandingAmountPercentage, outStandingAmountPercentageCondition, <br>
minOutStandingAmountPercentage and maxOutStandingAmountPercentage OR outStandingAmountPercentage, <br>includeOutstandingAmount, outstandingAmountCondition, <br>
minOutstandingAmount and maxOutstandingAmount OR outstandingAmount</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/search/advance
</code>
<code class="method-request">
POST search/advance
Content-Type: application/json Request Body:
{
"locale": "en",
"dateFormat": "yyyy-MM-dd",
"entities": ["loans"],
"loanStatus": ["all","active","overpaid"],
"loanProducts": ["65","97","73","82"],
"offices": ["1","10","100"],
"loanDateOption": "approvalDate",
"loanFromDate": "2013-01-01",
"loanToDate": "2014-01-27",
"includeOutStandingAmountPercentage": true,
"outStandingAmountPercentageCondition": "<=",
"outStandingAmountPercentage": "80",
"includeOutstandingAmount": true,
"outstandingAmountCondition": "between",
"minOutstandingAmount": "100",
"maxOutstandingAmount": "10000"
}
</code>
<code class="method-response">
[{
"officeName": "HFC",
"loanProductName": "01 BC3M",
"count": 86,
"loanOutStanding": 5692.41,
"percentage": 76.4
},
{
"officeName": "keithoffice",
"loanProductName": "IGL",
"count": 3,
"loanOutStanding": 4168.23,
"percentage": 56.9
},
{
"officeName": "Rio",
"loanProductName": "IGL",
"count": 1,
"loanOutStanding": 1681.12,
"percentage": 55.56
}]
</code>
</div>
</div>
<!-- ends Search API docs-->
<!-- start of interest rate chart API docs -->
<a id="interestratechart" name="interestratechart" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Interest Rate Chart</h3>
<p>This defines an interest rate scheme that can be associated to a term deposit product. This will have a slab (band or range) of deposit periods and the associated interest rates applicable along with incentives for each band.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the interest rate chart.
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>
Description of Interest rate chart.
</td>
</tr>
<tr class=alt>
<td>fromDate</td>
</tr>
<tr>
<td class=fielddesc>
Date from when the chart is valid. The fromDate is mandatory and used to find out applicable interest rate chart for Accounts creation (FD & RD accounts). There should not be any overlapping of fromDate and endDate of charts for a product.
</td>
</tr>
<tr class=alt>
<td>endDate</td>
</tr>
<tr>
<td class=fielddesc>
Validity end date of the chart. This is optional, if not provided means it is the current chart applicable.
</td>
</tr>
</table>
</div>
</div>
<a id="interestratechart_create" name="interestratechart_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Chart</h4>
<p>Creats a new chart which can be attached to a term deposit products (FD or RD).</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>fromDate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>name, description and endDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/interestratecharts
</code>
<code class="method-request">
POST interestratecharts
Content-Type: application/json
Request Body:
{
"name": "Chart - 2014",
"description": "This chart is applicable for year 2014",
"type": "Document",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"fromDate": "01 Jan 2014"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="interestratechart_list" name="interestratechart_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve all Charts</h4>
<p>Retrieve list of charts associated with a term deposit product(FD or RD).</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>productId</dt>
<dd>
Integer <span>mandatory</span>
</dd>
<dd>Retrieves Interest rate charts to a deposit product.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>interestratecharts?productId=1</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/interestratecharts?productId={productId)
</code>
<code class="method-response">
[
{
"id": 1,
"fromDate": [
2014,
1,
1
],
"savingsProductId": 1,
"savingsProductName": "Fixed Deposit Product 001",
"chartSlabs": [
{
"id": 1,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 1,
"annualInterestRate": 6,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
]
}
]
</code>
</div>
</div>
<a id="interestratechart_retrieve" name="interestratechart_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Chart</h4>
<p>Example Requests:</p>
<div class=apiClick>interestratecharts/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/interestratecharts/{chartId}
</code>
<code class="method-response">
{
"id": 1,
"fromDate": [
2014,
1,
1
],
"savingsProductId": 1,
"savingsProductName": "Fixed Deposit Product 001",
"chartSlabs": [
{
"id": 1,
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 1,
"annualInterestRate": 6,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
]
}
</code>
</div>
</div>
<a id="interestratechart_update" name="interestratechart_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Chart</h4>
<p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/interestratecharts/{chartId}
</code>
<code class="method-request">
PUT interestratecharts/1
Content-Type: application/json
Request Body:
{
"name": "Interest rate chart for 2014",
"description": "Interest rate chart for 2014",
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="interestratechart_delete" name="interestratechart_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Chart</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/interestratecharts/{chartId}
</code>
<code class="method-request">
DELETE interestratecharts/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="interestratechart_template" name="interestratechart_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Chart Details Template</h4>
<p>This is a convenience resource. It can be useful when
building maintenance user interface screens for creating a chart.
The template data returned consists of any or all
of:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<p>Example Request:</p>
<div class=apiClick>interestratecharts/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/interestratecharts/template
</code>
<code class="method-response">
{
"periodTypes": [
{
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
{
"id": 1,
"code": "interestChartPeriodType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "interestChartPeriodType.months",
"value": "Months"
},
{
"id": 3,
"code": "interestChartPeriodType.years",
"value": "Years"
}
]
}
</code>
</div>
</div>
<!-- end of interest rate chart API docs-->
<!-- start of interest rate slabs API docs -->
<a id="interestrateslab" name="interestrateslab" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Interest Rate Slab (A.K.A interest bands)</h3>
<p>The slabs a.k.a interest bands are associated with Interest Rate Chart. These bands allow to define different interest rates for different deposit term periods.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>periodType</td>
</tr>
<tr>
<td class=fielddesc>The period type is used to define the different deposit term intervals. 0=Daily, 1=Weekly, 2=Monthly, 3=Yearly
</td>
</tr>
<tr class=alt>
<td>fromPeriod</td>
</tr>
<tr>
<td class=fielddesc>Start of the period for defining deposit term interval.
<br> e.g. for 1 day to 180 days applicable interest rate is 5%
<br> then startPeriod=1, endPeriod=180 and periodType=0
</td>
</tr>
<tr class=alt>
<td>toPeriod</td>
</tr>
<tr>
<td class=fielddesc>End of the period for defining deposit term interval.
<br> e.g. for 1 day to 180 days applicable interest rate is 5%
</td>
</tr>
<tr class=alt>
<td>annualInterestRate</td>
</tr>
<tr>
<td class=fielddesc>The applicable annual interest rate for defined term interval
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>
provide a description about the slab.
</td>
</tr>
<tr class=alt>
<td>incentives</td>
</tr>
<tr>
<td class=fielddesc>
Represents incentives on interest for a perticular period.
</td>
</tr>
</table>
</div>
</div>
<a id="interestrateslab_create" name="interestrateslab_create"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Slab</h4>
<p>Creats a new interest rate slab for an interest rate chart.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>periodType, fromPeriod, annualInterestRate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>toPeriod and description</td>
</tr>
</table>
<p>Example Requests:</p>
<div class=apiClick>interestratecharts/1/chartslabs</div>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/interestratecharts/{chartId}/chartslabs
</code>
<code class="method-request">
POST interestratecharts/{chartId}/chartslabs
Content-Type: application/json
Request Body:
{
"periodType": "0",
"fromPeriod": "1",
"toPeriod": "180",
"annualInterestRate": "5",
"description": "5% interest from 1 day till 180 days of deposit",
"locale":"en",
"incentives":[{
"entityType":"2",
"attributeName":2,
"conditionType":2,
"attributeValue":11,
"incentiveType":3,
"amount":"-1"
}]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="interestrateslab_list" name="interestrateslab_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve all Slabs</h4>
<p>Retrieve list of slabs associated with a chart </p>
<p>Example Requests:</p>
<div class=apiClick>interestratecharts/1/chartslabs</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/interestratecharts/{chartId}/chartslabs
</code>
<code class="method-response">
[
{
"id": 1,
"description": "5% interest from 1 day till 180 days of deposit",
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 1,
"toPeriod": 180,
"annualInterestRate": 5,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"incentives":[{
"id":1,
"entityType":{"id":2,"code":"InterestIncentiveEntityType.customer","value":"Customer"},
"attributeName":{"id":2,"code":"InterestIncentiveAttributeName.gender","value":"Gender"}, "conditionType":{"id":2,"code":"incentiveConditionType.equal","value":"equal"},
"attributeValue":"11","attributeValueDesc":"FEMALE",
"incentiveType":{"id":3,"code":"InterestIncentiveType.incentive","value":"Incentive"},
"amount":-1.000000
}]
}
]
</code>
</div>
</div>
<a id="interestrateslab_retrieve" name="interestrateslab_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Slab</h4>
<p>Retrieve a slab associated with an Interest rate chart</p>
<p>Example Requests:</p>
<div class=apiClick>interestratecharts/1/chartslabs/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/interestratecharts/{chartId}/chartslabs/{slabId}
</code>
<code class="method-response">
{
"id": 1,
"description": "changed to 6% interest ",
"periodType": {
"id": 0,
"code": "interestChartPeriodType.days",
"value": "Days"
},
"fromPeriod": 1,
"toPeriod": 180,
"annualInterestRate": 6,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"incentives":[{
"id":1,
"entityType":{"id":2,"code":"InterestIncentiveEntityType.customer","value":"Customer"},
"attributeName":{"id":2,"code":"InterestIncentiveAttributeName.gender","value":"Gender"}, "conditionType":{"id":2,"code":"incentiveConditionType.equal","value":"equal"},
"attributeValue":"11","attributeValueDesc":"FEMALE",
"incentiveType":{"id":3,"code":"InterestIncentiveType.incentive","value":"Incentive"},
"amount":-1.000000
}]
}
</code>
</div>
</div>
<a id="interestrateslab_update" name="interestrateslab_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Slab</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/interestratecharts/{chartId}/chartslabs/{slabId}
</code>
<code class="method-request">
PUT interestratecharts/1/chartslabs/1
Content-Type: application/json
Request Body:
{
"annualInterestRate": "6",
"description": "Interest rate changed to 6%",
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"description": "Interest rate changed to 6%",
"annualInterestRate": 6
}
}
</code>
</div>
</div>
<a id="interestrateslab_delete" name="interestrateslab_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Slab</h4>
<p>Delete a Slab from a chart</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/interestratecharts/{chartId}/chartslabs/{slabId}
</code>
<code class="method-request">
DELETE interestratecharts/1/chartslabs/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of interest rate slabs API docs-->
<!-- start of Teller Cash Management API docs -->
<a id="tellercashmgmt" name="tellercashmgmt" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Teller Cash Management</h3>
<p>Teller cash management which will allow an organization to manage their cash transactions at branches or head office more effectively.</p>
</div>
</div>
<a id="listtellers" name="listtellers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List all tellers</h4>
<p>Retrieves list tellers.</p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers
</code>
<code class="method-response">
[
{
"id": 3,
"officeId": 1,
"debitAccountId": 0,
"creditAccountId": 0,
"name": "Teller3",
"description": "cash handling",
"startDate": [
2015,
2,
1
],
"status": "ACTIVE",
"officeName": "Head Office"
},
{
"id": 2,
"officeId": 1,
"debitAccountId": 0,
"creditAccountId": 0,
"name": "Teller2",
"description": "abcc",
"startDate": [
2015,
2,
19
],
"endDate": [
2015,
3,
30
],
"status": "ACTIVE",
"officeName": "Head Office"
},
{
"id": 1,
"officeId": 1,
"debitAccountId": 0,
"creditAccountId": 0,
"name": "Teller1",
"description": "abc",
"startDate": [
2015,
2,
20
],
"status": "ACTIVE",
"officeName": "Head Office"
},
{
"id": 4,
"officeId": 2,
"debitAccountId": 0,
"creditAccountId": 0,
"name": "Teller4",
"description": "cash handling",
"startDate": [
2015,
2,
1
],
"status": "ACTIVE",
"officeName": "Office1"
}
]
</code>
</div>
</div>
<a id="createtellers" name="createtellers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create teller</h4>
<p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>Teller name, OfficeId, Description, Start Date, Status</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>End Date</td>
</tr>
</table>
</p><br>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/tellers
</code>
<code class="method-request">
POST tellers
Content-Type: application/json
Request Body:
{
"officeId":2,
"name":"Teller4",
"description":"cash handling",
"status":300,
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"startDate":"01 February 2015"
}
</code>
<code class="method-response">
{
"officeId": 2,
"resourceId": 5
}
</code>
</div>
</div>
<a id="findtellers" name="findtellers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve tellers</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/5
</code>
<code class="method-response">
{
"id": 5,
"officeId": 2,
"debitAccountId": 0,
"creditAccountId": 0,
"name": "Teller5",
"description": "cash handling",
"startDate": [
2015,
2,
1
],
"status": "ACTIVE",
"officeName": "Office1"
}
</code>
</div>
</div>
<a id="updatetellers" name="updatetellers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update teller</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/tellers/{tellerId}
</code>
<code class="method-request">
PUT tellers/5
Content-Type: application/json
Request Body:
{
"name":"Teller5",
"officeId":2,
"description":"teller cash handling",
"status":300,
"endDate":"28 February 2015",
"startDate":"01 February 2015",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"officeId":2,
"resourceId":5,
"changes":{
"description":"teller cash handling",
"endDate":"28 February 2015",
"dateFormat":"dd MMMM yyyy",
"locale":"en"
}
}
</code>
</div>
</div>
<!--<a id="deletetellers" name="deletetellers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Teller</h4>
<p></p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/interestratecharts/{chartId}/chartslabs/{slabId}
</code>
<code class="method-request">
DELETE interestratecharts/1/chartslabs/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
-->
<a id="findallcashiers" name="findallcashiers"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Cashiers</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers
</code>
<code class="method-response">
{
"tellerId": 1,
"tellerName": "Teller1",
"officeId": 1,
"officeName": "Head Office",
"cashiers": [
{
"id": 1,
"tellerId": 1,
"staffId": 1,
"description": "",
"startDate": "Feb 20, 2015 12:00:00 AM",
"endDate": "Feb 27, 2015 12:00:00 AM",
"isFullDay": true,
"startTime": "",
"endTime": "",
"tellerName": "Teller1",
"staffName": "Staff1, Test"
}
]
}
</code>
</div>
</div>
<a id="createcashier" name="createcashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create Cashiers</h4>
<p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>Cashier/staff, Fromm Date, To Date, Full Day or From time and To time</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>Description/Notes</td>
</tr>
</table>
</p><br>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/tellers/{tellerId}/cashiers
</code>
<code class="method-request">
POST tellers/1/cashiers
{
"endDate":"28 February 2015",
"description":"Cashier created",
"isFullDay":true,
"staffId":3,
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"startDate":"01 February 2015"
}
</code>
<code class="method-response">
{
"resourceId":1,
"subResourceId":2
}
</code>
</div>
</div>
<a id="findaonecashier" name="findonecashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a cashier</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}
</code>
<code class="method-response">
{
"id": 1,
"tellerId": 1,
"staffId": 1,
"description": "",
"startDate": "Feb 20, 2015 12:00:00 AM",
"endDate": "Feb 27, 2015 12:00:00 AM",
"isFullDay": true,
"startTime": "",
"endTime": "",
"tellerName": "Teller1",
"staffName": "Staff1, Test"
}
</code>
</div>
</div>
<a id="updatecashier" name="updatecashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Cashier</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}
</code>
</code>
<code class="method-request">
PUT tellers/1/cashiers/1
{
"endDate":"25 February 2015",
"description":"Cashier updated.",
"isFullDay":true,
"staffId":4,
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"startDate":"01 February 2015"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"subResourceId": 1,
"changes": {
"description": "Cashier updated.",
"endDate": "25 February 2015",
"dateFormat": "dd MMMM yyyy",
"locale": "en"
}
}
</code>
</div>
</div>
<a id="deletecashier" name="deletecashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete Cashier</h4>
<p></p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE tellers/{tellerId}/cashiers/{cashierId}
</code>
<code class="method-request">
DELETE tellers/1/cashiers/3
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId": 3
}
</code>
</div>
</div>
<a id="cashiertemplate" name="cashiertemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Find Cashiers</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers/template
</code>
<code class="method-response">
{
"tellerId":1,
"officeId":1,
"officeName":"Head Office",
"tellerName":"Teller1",
"staffOptions":[
{
"id":1,
"displayName":"Staff1, Test"
},
{
"id":2,
"displayName":"Staff, 2"
},
{
"id":3,
"displayName":"Staff, 3"
}
]
}
</code>
</div>
</div>
<a id="transactionsForCashier" name="transactionsForCashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Cashier Transaction</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}/transactions
</code>
<code class="method-response">
[
{
"id": 8,
"cashierId": 15,
"txnType": {
"id": 104,
"value": "Cash Out"
},
"txnAmount": 10000,
"txnDate": "Feb 25, 2015 12:00:00 AM",
"entityId": 2,
"entityType": "loans",
"txnNote": "Disbursement, Loan:2-000000002,Client:1-Test 1",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 0,
"cashierName": "B, Ramesh"
},
{
"id": 10,
"cashierId": 15,
"txnType": {
"id": 104,
"value": "Cash Out"
},
"txnAmount": 8500,
"txnDate": "Feb 25, 2015 12:00:00 AM",
"entityId": 3,
"entityType": "loans",
"txnNote": "Disbursement, Loan:3-000000003,Client:3-Client 1",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 0,
"cashierName": "B, Ramesh"
},
{
"id": 12,
"cashierId": 15,
"txnType": {
"id": 104,
"value": "Cash Out"
},
"txnAmount": 10000,
"txnDate": "Feb 1, 2015 12:00:00 AM",
"entityId": 4,
"entityType": "loans",
"txnNote": "Disbursement, Loan:4-000000004,Client:4-Client 2",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 0,
"cashierName": "B, Ramesh"
},
{
"id": 14,
"cashierId": 15,
"txnType": {
"id": 103,
"value": "Cash In"
},
"txnAmount": 1266.52,
"txnDate": "Feb 1, 2015 12:00:00 AM",
"entityId": 4,
"entityType": "loans",
"txnNote": "Repayment, Loan:4-000000004,Client:4-Client 2",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 0,
"cashierName": "B, Ramesh"
},
{
"id": 13,
"cashierId": 15,
"txnType": {
"id": 101,
"value": "Allocate Cash"
},
"txnAmount": 50000,
"txnDate": "Feb 1, 2015 12:00:00 AM",
"entityId": 0,
"entityType": "",
"txnNote": "cash allocated on 1st Feb 2015",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 10,
"tellerName": "Ramesh(Teller/Cashier)",
"cashierName": "B, Ramesh"
},
{
"id": 15,
"cashierId": 15,
"txnType": {
"id": 104,
"value": "Cash Out"
},
"txnAmount": 10000,
"txnDate": "Feb 1, 2015 12:00:00 AM",
"entityId": 5,
"entityType": "loans",
"txnNote": "Disbursement, Loan:5-000000005,Client:5-Suresh D",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 0,
"cashierName": "B, Ramesh"
},
{
"id": 17,
"cashierId": 15,
"txnType": {
"id": 103,
"value": "Cash In"
},
"txnAmount": 1266.52,
"txnDate": "Feb 1, 2015 12:00:00 AM",
"entityId": 5,
"entityType": "loans",
"txnNote": "Repayment, Loan:5-000000005,Client:5-Suresh D",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 0,
"cashierName": "B, Ramesh"
},
{
"id": 14,
"cashierId": 15,
"txnType": {
"id": 102,
"value": "Settle Cash"
},
"txnAmount": 10000,
"txnDate": "Feb 1, 2015 12:00:00 AM",
"entityId": 0,
"entityType": "",
"txnNote": "cash settlement on 1 feb with 10k",
"createdDate": "Feb 25, 2015 12:00:00 AM",
"officeId": 1,
"officeName": "Head Office",
"tellerId": 10,
"tellerName": "Ramesh(Teller/Cashier)",
"cashierName": "B, Ramesh"
}
]
</code>
</div>
</div>
<!--
<a id="cashiertemplate" name="cashiertemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Find Cashiers</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers/template
</code>
<code class="method-response">
{
"tellerId":1,
"officeId":1,
"officeName":"Head Office",
"tellerName":"Teller1",
"staffOptions":[
{
"id":1,
"displayName":"Staff1, Test"
},
{
"id":2,
"displayName":"Staff, 2"
},
{
"id":3,
"displayName":"Staff, 3"
}
]
}
</code>
</div>
</div>-->
<a id="allocateCashToCashier" name="allocateCashToCashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Allocate Cash To Cashier</h4>
<p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>Date, Amount, Currency, Notes/Comments</td>
</tr>
</table>
</p><br>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}/allocate
</code>
<code class="method-request">
POST tellers/1/cashiers/1/allocate?command=allocate
{
"currencyCode":"USD",
"txnAmount":"5000",
"txnNote":"allocating cash",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"txnDate":"01 February 2015"
}
</code>
<code class="method-response">
{
"resourceId":1,
"subResourceId":4
}
</code>
</div>
</div>
<a id="settleCashFromCashier" name="settleCashFromCashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Settle Cash From Cashier</h4>
<p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>Date, Amount, Currency, Notes/Comments</td>
</tr>
</table>
</p><br>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}/settle
</code>
<code class="method-request">
POST tellers/1/cashiers/1/settle?command=settle
{
"currencyCode":"USD",
"txnAmount":"2000",
"txnNote":"cash settlement",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"txnDate":"20 February 2015"
}
</code>
<code class="method-response">
{
"resourceId":1,
"subResourceId":5
}
</code>
</div>
</div>
<a id="getTransactionsWtihSummaryForCashier" name="getTransactionsWtihSummaryForCashier"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Transactions Wtih Summary For Cashier</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}/summaryandtransactions
</code>
<code class="method-response">
{
"sumCashAllocation":7000.000000,
"sumInwardCash":0,
"sumOutwardCash":0,
"sumCashSettlement":50.000000,
"netCash":6950.000000,
"officeName":"Head Office",
"tellerId":1,
"tellerName":"Teller1",
"cashierId":1,
"cashierName":"Staff1, Test",
"cashierTransactions":[
{
"id":2,
"cashierId":1,
"txnType":{
"id":101,
"value":"Allocate Cash"
},
"txnAmount":2000.000000,
"txnDate":"Feb 20, 2015 12:00:00 AM",
"entityId":0,
"entityType":"",
"txnNote":"aaaa",
"createdDate":"Feb 20, 2015 12:00:00 AM",
"officeId":1,
"officeName":"Head Office",
"tellerId":1,
"tellerName":"Teller1",
"cashierName":"Staff1, Test"
},
{
"id":3,
"cashierId":1,
"txnType":{
"id":102,
"value":"Settle Cash"
},
"txnAmount":50.000000,
"txnDate":"Feb 20, 2015 12:00:00 AM",
"entityId":0,
"entityType":"",
"txnNote":"bbbbbb",
"createdDate":"Feb 20, 2015 12:00:00 AM",
"officeId":1,
"officeName":"Head Office",
"tellerId":1,
"tellerName":"Teller1",
"cashierName":"Staff1, Test"
},
{
"id":4,
"cashierId":1,
"txnType":{
"id":101,
"value":"Allocate Cash"
},
"txnAmount":5000.000000,
"txnDate":"Feb 1, 2015 12:00:00 AM",
"entityId":0,
"entityType":"",
"txnNote":"allocating cash",
"createdDate":"Feb 23, 2015 12:00:00 AM",
"officeId":1,
"officeName":"Head Office",
"tellerId":1,
"tellerName":"Teller1",
"cashierName":"Staff1, Test"
}
]
}
</code>
</div>
</div>
<a id="retrieveCashierTxnTemplate" name="retrieveCashierTxnTemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Cashier Transaction Template</h4>
<p></p><br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/tellers/{tellerId}/cashiers/{cashierId}/transactions/template
</code>
<code class="method-response">
{
"cashierId":1,
"officeName":"Head Office",
"tellerId":1,
"tellerName":"Teller1",
"cashierName":"Staff1, Test",
"cashierData":{
"id":1,
"tellerId":1,
"staffId":1,
"description":"",
"startDate":"Feb 20, 2015 12:00:00 AM",
"endDate":"Feb 27, 2015 12:00:00 AM",
"isFullDay":true,
"startTime":"",
"endTime":"",
"tellerName":"Teller1",
"staffName":"Staff1, Test"
},
"startDate":"Feb 20, 2015 12:00:00 AM",
"endDate":"Feb 27, 2015 12:00:00 AM",
"currencyOptions":[
{
"code":"USD",
"name":"US Dollar",
"decimalPlaces":2,
"displaySymbol":"$",
"nameCode":"currency.USD",
"displayLabel":"US Dollar ($)"
}
]
}
</code>
</div>
</div>
<!-- end of Teller Cash Management API docs -->
<!--Start of Payment type API docs-->
<a id="paymenttype" name="paymenttype" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Payment Type</h3>
<p>This defines the payment type
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name the payment type
</td>
</tr>
<tr class=alt>
<td>description</td>
</tr>
<tr>
<td class=fielddesc>
Description of payment type
</td>
</tr>
<tr class=alt>
<td>isCashPayment</td>
</tr>
<tr>
<td class=fielddesc>
Determines weather the payment type is cash or not.
</td>
</tr>
<tr class=alt>
<td>position</td>
</tr>
<tr>
<td class=fielddesc>
Can set the order in which the payment type should be displayed.
</td>
</tr>
</table>
</div>
</div>
<a id="create_paymenttype" name="create_paymenttype"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a Payment Type</h4>
<p>Creates a new Payment type</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>Description, isCashPayment,Position</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/paymenttypes
</code>
<code class="method-request">
POST paymenttype
Content-Type: application/json
Request Body:
{
"name":"cash",
"description":"cash payment type",
"isCashPayment":true,
"position":1
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="paymenttype_list" name="paymenttype_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve all Payment Types</h4>
<p>Retrieve list of payment types </p>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/paymenttypes
</code>
<code class="method-response">
[
{
"id": 24,
"name": "PTC",
"description": "Cash",
"isCashPayment": true,
"position": 0
},
{
"id": 25,
"name": "mPay",
"description": "not chash payment",
"isCashPayment": false,
"position": 0
},
{
"id": 26,
"name": "mPesa",
"description": "non cash payment",
"isCashPayment": false,
"position": 0
},
{
"id": 27,
"name": "Mobile Money",
"description": "money transferred through mobile",
"isCashPayment": false,
"position": 0
},
{
"id": 13,
"name": "cash",
"description": "cash Payment",
"isCashPayment": true,
"position": 1
}
]
</code>
</div>
</div>
<a id="paymenttype_retrieve" name="paymenttype_retrieve"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Payment Type</h4>
<p>Retrieves a payment type </p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/paymenttypes/{paymentTypeId}
</code>
<code class="method-response">
{
"id": 13,
"name": "cash",
"description": "cash Payment",
"isCashPayment": true,
"position": 1
}
</code>
</div>
</div>
<a id="paymenttype_update" name="paymenttype_update"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Payment Type</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/paymenttypes/{paymnetTypeId}
</code>
<code class="method-request">
PUT /paymenttypes/13
{
"name":"mPay",
"description":"not a cash payment type",
"isCashPayment":false,
"position":3
}
</code>
<code class="method-response">
{
"resourceId": 13
}
</code>
</div>
</div>
<a id="paymnettype_delete" name="paymnettype_delete"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Payment Type</h4>
<p>Deletes payment type</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/paymenttypes/{paymentTypeId}
</code>
<code class="method-request">
DELETE paymnettypes/13
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 13
}
</code>
</div>
</div>
<!-- Provisioning -->
<a id="provisioningcriteria" name="provisioningcriteria" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Provisioning Criteria</h3>
<p>This defines the Provisioning Criteria
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>Provisioning Criteria Name</td>
</tr>
<tr>
<td class=fielddesc>Name the Provisioning Criteria
</td>
</tr>
<tr class=alt>
<td>Loan Products</td>
</tr>
<tr>
<td class=fielddesc>
Select all loan products for which provisioning criteria to be associated
</td>
</tr>
<tr class=alt>
<td>Provisioning Categories</td>
</tr>
<tr>
<td class=fielddesc>
Define minimum, maximum, percentage, liability account, expense account for all provisioning categories
</td>
</tr>
</table>
</div>
</div>
<a id="create_provisioningcriteria" name="create_provisioningcriteria"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a new Provisioning Criteria</h4>
<p>Creates a new Provisioning Criteria</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>criteriaName</td>
</tr>
<tr class=alt>
<td>provisioningcriteria</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>loanProducts</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/provisioningcriteria
</code>
<code class="method-request">
POST provisioningcriteria
Content-Type: application/json
Request Body:
{
"criteriaName":"High Risk Products Criteria",
"loanProducts": [
{"id": 1,
"name": "LOAN_PRODUCT_3ODPK1",
"includeInBorrowerCycle": false},
{"id": 2,
"name": "LOAN_PRODUCT_BXW8NC",
includeInBorrowerCycle": false}
],
"provisioningcriteria": [
{"categoryId": 1,
"categoryName": "STANDARD",
"minAge": 0,
"maxAge": 3,
"provisioningPercentage": 1,
"liabilityAccount": 8,
"expenseAccount": 14},
{"categoryId": 2,
"categoryName": "SUB-STANDARD",
"minAge": 1,
"maxAge": 5,
"provisioningPercentage": 2,
"liabilityAccount": 13,
"expenseAccount": 13},
{"categoryId": 3,
"categoryName": "DOUBTFUL",
"minAge": 2,
"maxAge": 6,
"provisioningPercentage": 3,
"liabilityAccount": 9,
"expenseAccount": 10},
{"categoryId": 4,
"categoryName": "LOSS",
"minAge": 3,
"maxAge": 7,
"provisioningPercentage": 4,
"liabilityAccount": 10,
"expenseAccount": 9}]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="provisioningcriteria_list" name="provisioningcriteria_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieves all created Provisioning Criterias</h4>
<p>Retrieves all created Provisioning Criterias</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/provisioningcriteria
</code>
<code class="method-request">
GET provisioningcriteria
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
[
{"criteriaId":1,
"criteriaName":"High Risk Products Criteria",
"createdBy":"mifos"},
{"criteriaId":2,
"criteriaName":"Low Risk Products Criteria",
"createdBy":"mifos"}
]
}
</code>
</div>
</div>
<a id="retrieve_provisioningcriteria" name="retrieve_provisioningcriteria"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieves a Provisioning Criteria</h4>
<p>Retrieves a Provisioning Criteria</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/provisioningcriteria/{criteriaId}
</code>
<code class="method-request">
GET provisioningcriteria/{criteriaId}
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"criteriaId":1
"criteriaName":"High Risk Products Criteria",
"loanProducts": [
{"id": 1,
"name": "LOAN_PRODUCT_3ODPK1",
"includeInBorrowerCycle": false},
{"id": 2,
"name": "LOAN_PRODUCT_BXW8NC",
includeInBorrowerCycle": false}
],
"provisioningcriteria": [
{"categoryId": 1,
"categoryName": "STANDARD",
"minAge": 0,
"maxAge": 3,
"provisioningPercentage": 1,
"liabilityAccount": 8,
"expenseAccount": 14},
{"categoryId": 2,
"categoryName": "SUB-STANDARD",
"minAge": 1,
"maxAge": 5,
"provisioningPercentage": 2,
"liabilityAccount": 13,
"expenseAccount": 13},
{"categoryId": 3,
"categoryName": "DOUBTFUL",
"minAge": 2,
"maxAge": 6,
"provisioningPercentage": 3,
"liabilityAccount": 9,
"expenseAccount": 10},
{"categoryId": 4,
"categoryName": "LOSS",
"minAge": 3,
"maxAge": 7,
"provisioningPercentage": 4,
"liabilityAccount": 10,
"expenseAccount": 9}]
}
</code>
</div>
</div>
<a id="update_provisioningcriteria" name="update_provisioningcriteria"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Updates a new Provisioning Criteria</h4>
<p>Updates a new Provisioning Criteria</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>criteriaName, loanProducts, provisioningcriteria</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/provisioningcriteria/{criteriaId}
</code>
<code class="method-request">
PUT provisioningcriteria/{criteriaId}
Content-Type: application/json
Request Body:
{
"criteriaName":"High Risk Products Criteria1",
"loanProducts": [
{"id": 1,
"name": "LOAN_PRODUCT_3ODPK1",
"includeInBorrowerCycle": false},
{"id": 2,
"name": "LOAN_PRODUCT_BXW8NC",
includeInBorrowerCycle": false}
],
"provisioningcriteria": [
{"categoryId": 1,
"categoryName": "STANDARD",
"minAge": 0,
"maxAge": 3,
"provisioningPercentage": 1,
"liabilityAccount": 8,
"expenseAccount": 14},
{"categoryId": 2,
"categoryName": "SUB-STANDARD",
"minAge": 1,
"maxAge": 5,
"provisioningPercentage": 2,
"liabilityAccount": 13,
"expenseAccount": 13},
{"categoryId": 3,
"categoryName": "DOUBTFUL",
"minAge": 2,
"maxAge": 6,
"provisioningPercentage": 3,
"liabilityAccount": 9,
"expenseAccount": 10},
{"categoryId": 4,
"categoryName": "LOSS",
"minAge": 3,
"maxAge": 7,
"provisioningPercentage": 4,
"liabilityAccount": 10,
"expenseAccount": 9}]
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"criteriaName": "High Risk Products Criteria1"
}
}
</code>
</div>
</div>
<a id="delete_provisioningcriteria" name="delete_provisioningcriteria"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Deletes Provisioning Criteria</h4>
<p>Deletes Provisioning Criteria</p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/provisioningcriteria/{criteriaId}
</code>
<code class="method-request">
DELETE provisioningcriteria/{criteriaId}
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">
{
"resourceId": 1,
}
</code>
</div>
</div>
<!--End of Payment Type API docs-->
<!-- floatingrates -->
<a id="floatingrates" name="floatingrates" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Floating Rates</h3>
<p>This defines the Floating Rates</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the Floating Rate, must be unique
</td>
</tr>
<tr class=alt>
<td>isBaseLendingRate</td>
</tr>
<tr>
<td class=fielddesc>
Identifies the Floating Rate scheme to be Base Lending Rate. Only one scheme can be Base Lending Rate at any given point of time. default is false.
</td>
</tr>
<tr class=alt>
<td>isActive</td>
</tr>
<tr>
<td class=fielddesc>
Identify if Floating Rate scheme is active or not. default is true.
</td>
</tr>
<tr class=alt>
<td>ratePeriods</td>
</tr>
<tr>
<td class=fielddesc>
Array of ratePeriod JSON objects as defined in below section.
</td>
</tr>
</table>
<p>This defines the Floating Rates Periods</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions for ratePeriods</div></td>
</tr>
<tr class=alt>
<td>fromDate</td>
</tr>
<tr>
<td class=fielddesc>Start date from which this rate has to be considered. Should be a future date.
</td>
</tr>
<tr class=alt>
<td>interestRate</td>
</tr>
<tr>
<td class=fielddesc>
Interest Rate applicable.
</td>
</tr>
<tr class=alt>
<td>isDifferentialToBaseLendingRate</td>
</tr>
<tr>
<td class=fielddesc>
If false, interestRate field is considered absolute.
If true, interestRate field is considered differential to Base Lending Rate as of the startDate.
Cannot be used if there is no scheme defined as Base Lending Rate.
</td>
</tr>
</table>
</div>
</div>
<a id="create_floatingrates" name="create_floatingrates"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a new Floating Rate</h4>
<p>Creates a new Floating Rate</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>isBaseLendingRate</td>
</tr>
<tr class=alt>
<td>isActive</td>
</tr>
<tr class=alt>
<td>ratePeriods</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/floatingrates
</code>
<code class="method-request">
POST floatingrates
Content-Type: application/json
Request Body:
{
"name":"Floating Rate 1",
"isBaseLendingRate":true,
"isActive":true,
"ratePeriods":[
{
"fromDate":"19 November 2015",
"interestRate":10,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
},
{
"fromDate":"15 December 2015",
"interestRate":11,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="floatingrates_list" name="floatingrates_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Floating Rates</h4>
<p>List Floating Rates</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/floatingrates
</code>
<code class="method-request">
GET floatingrates
Content-Type: application/json
</code>
<code class="method-response">
{
[
{
"id": 1,
"name": "Floating Rate 1",
"isBaseLendingRate": true,
"isActive": true,
"createdBy": "mifos",
"createdOn": "Nov 18, 2015",
"modifiedBy": "mifos",
"modifiedOn": "Nov 18, 2015"
},
{
"id": 2,
"name": "Floating Rate 2",
"isBaseLendingRate": false,
"isActive": true,
"createdBy": "mifos",
"createdOn": "Nov 18, 2015",
"modifiedBy": "mifos",
"modifiedOn": "Nov 18, 2015"
}
]
}
</code>
</div>
</div>
<a id="retrieve_floatingrate" name="retrieve_floatingrate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Floating Rate</h4>
<p>Retrieve Floating Rate</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/floatingrates/1
</code>
<code class="method-request">
GET floatingrates
Content-Type: application/json
</code>
<code class="method-response">
{
"id": 1,
"name": "Floating Rate 1",
"isBaseLendingRate": true,
"isActive": true,
"createdBy": "mifos",
"createdOn": "Nov 18, 2015",
"modifiedBy": "mifos",
"modifiedOn": "Nov 18, 2015",
"ratePeriods":
[
{
"id": 1,
"fromDate": "Dec 15, 2015",
"interestRate": 11,
"isDifferentialToBaseLendingRate": false,
"isActive": true,
"createdBy": "mifos",
"createdOn": "Nov 18, 2015",
"modifiedBy": "mifos",
"modifiedOn": "Nov 18, 2015"
},
{
"id": 2,
"fromDate": "Nov 19, 2015",
"interestRate": 10,
"isDifferentialToBaseLendingRate": false,
"isActive": true,
"createdBy": "mifos",
"createdOn": "Nov 18, 2015",
"modifiedBy": "mifos",
"modifiedOn": "Nov 18, 2015"
}
]
}
</code>
</div>
</div>
<a id="update_floatingrate" name="update_floatingrate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Floating Rate</h4>
<p>Updates new Floating Rate. Rate Periods in the past cannot be modified.
All the future rateperiods would be replaced with the new ratePeriods data sent.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/floatingrates/1
</code>
<code class="method-request">
PUT floatingrates
Content-Type: application/json
Request Body:
{
"name":"Floating Rate 1",
"isBaseLendingRate":true,
"isActive":true,
"ratePeriods":[
{
"fromDate":"19 November 2015",
"interestRate":10,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
},
{
"fromDate":"15 December 2015",
"interestRate":11,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes":
{
"ratePeriods": "[
{
"fromDate":"19 November 2015",
"interestRate":10,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
},
{
"fromDate":"15 December 2015",
"interestRate":11,
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
]"
}
}
</code>
</div>
</div>
<!-- End of floatingrates -->
<!-- Tax components-->
<a id="taxcomponent" name="taxcomponent" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Tax Components</h3>
<p>This defines the Tax Components</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the Tax component
</td>
</tr>
<tr class=alt>
<td>percentage</td>
</tr>
<tr>
<td class=fielddesc>
Percentage that should be applied on a amount as tax.
</td>
</tr>
<tr class=alt>
<td>debitAccountType</td>
</tr>
<tr>
<td class=fielddesc>
Debit Account type that should be applicable only for particular cases depending on requirement ex with hold tax doesn't require debit account for the accounting operation. .
</td>
</tr>
<tr class=alt>
<td>debitAcountId</td>
</tr>
<tr>
<td class=fielddesc>
GL Account that should debited when tax applied. used only for particular cases depending on requirement ex with hold tax doesn't require debit account for the accounting operation. .
</td>
</tr>
<tr>
<td class=fielddesc>
Credit Account type that should be applicable only for particular cases depending on requirement ex with hold tax require credit account for the accounting operation. .
</td>
</tr>
<tr class=alt>
<td>debitAcountId</td>
</tr>
<tr>
<td class=fielddesc>
GL Account that should credited when tax applied. used only for particular cases depending on requirement ex with hold tax require only credit account for the accounting operation. .
</td>
</tr>
<tr class=alt>
<td>startDate</td>
</tr>
<tr>
<td class=fielddesc>
Start date from which this tax component is applicable.
</td>
</tr>
</table>
</div>
</div>
<a id="create_taxcomponent" name="create_taxcomponent"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a new Tax Component</h4>
<p>Creates a new Tax Component</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr class=alt>
<td>percentage</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>debitAccountType</td>
</tr>
<tr class=alt>
<td>debitAcountId</td>
</tr>
<tr class=alt>
<td>creditAccountType</td>
</tr>
<tr class=alt>
<td>creditAcountId</td>
</tr>
<tr class=alt>
<td>startDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/taxes/component
</code>
<code class="method-request">
POST taxes/component
Content-Type: application/json
Request Body:
{
"name": "tax component 1",
"percentage": "10",
"creditAccountType": 2,
"creditAcountId": 4,
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"startDate": "11 April 2016"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="taxcomponents_list" name="taxcomponents_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Tax Components</h4>
<p>List Tax Components/p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/taxes/component
</code>
<code class="method-request">
GET taxes/component
Content-Type: application/json
</code>
<code class="method-response">
[{
"id": 1,
"name": "tax component 1",
"percentage": 10.000000,
"creditAccountType": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"creditAccount": {
"id": 4,
"name": "ACCOUNT_NAME_7BR9C",
"glCode": "LIABILITY_PA1460364665046"
},
"startDate": [2016,
4,
11],
"taxComponentHistories": [{
}]
},
{
"id": 2,
"name": "tax component 2",
"percentage": 10.000000,
"creditAccountType": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"creditAccount": {
"id": 4,
"name": "ACCOUNT_NAME_7BR9C",
"glCode": "LIABILITY_PA1460364665046"
},
"startDate": [2016,
4,
11],
"taxComponentHistories": [{
}]
}]
</code>
</div>
</div>
<a id="retrieve_taxcomponent" name="retrieve_taxcomponent"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Tax Component</h4>
<p>Retrieve Tax Component</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/taxes/component/1
</code>
<code class="method-request">
GET taxes/component/1
Content-Type: application/json
</code>
<code class="method-response">
{
"id": 1,
"name": "tax component 1",
"percentage": 10.000000,
"creditAccountType": {
"id": 2,
"code": "accountType.liability",
"value": "LIABILITY"
},
"creditAccount": {
"id": 4,
"name": "ACCOUNT_NAME_7BR9C",
"glCode": "LIABILITY_PA1460364665046"
},
"startDate": [2016,
4,
11],
"taxComponentHistories": [{
}]
}
</code>
</div>
</div>
<a id="update_taxcomponent" name="update_taxcomponent"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Tax Component</h4>
<p>Updates Tax component. Debit and credit account details cannot be modified.
All the future tax components would be replaced with the new percentage.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/taxes/component/1
</code>
<code class="method-request">
PUT taxes/component/1
Content-Type: application/json
Request Body:
{
"name": "tax component 2",
"percentage": "15",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"startDate": "15 April 2016"
}
</code>
<code class="method-response">
{
"resourceId": 1,
"changes": {
"percentage": 15,
"name": "tax component 2",
"startDate": [2016,
4,
15]
}
}
</code>
</div>
</div>
<!-- End of Tax component -->
<!-- Tax components-->
<a id="taxgroup" name="taxgroup" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Tax Group</h3>
<p>This defines the Tax Group</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Name of the Tax Group
</td>
</tr>
<tr class=alt>
<td>taxComponents</td>
</tr>
<tr>
<td class=fielddesc>
Array of tax components to be added part of tax group.
</td>
</tr>
<tr class=alt>
<td>id</td>
</tr>
<tr>
<td class=fielddesc>
Tax group and tax component mapping id.
</td>
</tr>
<tr class=alt>
<td>taxComponentId</td>
</tr>
<tr>
<td class=fielddesc>
Tax component id.
</td>
</tr>
<tr class=alt>
<td>startDate</td>
</tr>
<tr>
<td class=fielddesc>
Start date from which this tax component is applicable.
</td>
</tr>
<tr class=alt>
<td>endDate</td>
</tr>
<tr>
<td class=fielddesc>
End date from which this tax component is applicable.
</td>
</tr>
</table>
</div>
</div>
<a id="create_taxgroup" name="create_taxgroup"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Create a new Tax Group</h4>
<p>Creates a new Tax Group</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr class=alt>
<td>taxComponents</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields in taxComponents</div></td>
</tr>
<tr class=alt>
<td>taxComponentId</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields in taxComponents</div></td>
</tr>
<tr class=alt>
<td>id</td>
</tr>
<tr class=alt>
<td>startDate</td>
</tr>
<tr class=alt>
<td>endDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/taxes/group
</code>
<code class="method-request">
POST taxes/component
Content-Type: application/json
Request Body:
{
"name": "tax group 1",
"locale": "en",
"taxComponents": [{
"taxComponentId": 7,
"startDate": "11 April 2016"
}],
"dateFormat": "dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="taxgroup_list" name="taxgroup_list"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Tax Group</h4>
<p>List Tax Group/p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/taxes/group
</code>
<code class="method-request">
GET taxes/group
Content-Type: application/json
</code>
<code class="method-response">
[{
"id": 6,
"name": "Tax_component_Name_PAX65",
"taxAssociations": [{
"id": 6,
"taxComponent": {
"id": 6,
"name": "Tax_component_Name_FPNXE"
},
"startDate": [2013,
1,
1]
}]
},
{
"id": 7,
"name": "tax group 1",
"taxAssociations": [{
"id": 7,
"taxComponent": {
"id": 7,
"name": "tax component 2"
},
"startDate": [2016,
4,
11]
}]
}]
</code>
</div>
</div>
<a id="retrieve_taxgroup" name="retrieve_taxgroup"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Tax Group</h4>
<p>Retrieve Tax Group</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/taxes/group/1
</code>
<code class="method-request">
GET taxes/group/1
Content-Type: application/json
</code>
<code class="method-response">
{
"id": 7,
"name": "tax group 1",
"taxAssociations": [{
"id": 7,
"taxComponent": {
"id": 7,
"name": "tax component 2"
},
"startDate": [2016,
4,
11]
}]
}
</code>
</div>
</div>
<a id="update_taxgroup" name="update_taxgroup"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update Tax Group</h4>
<p>Updates Tax Group. Only end date can be up-datable and can insert new tax components.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/taxes/group/1
</code>
<code class="method-request">
PUT taxes/group/1
Content-Type: application/json
Request Body:
{
"name": "tax group 2",
"locale": "en",
"taxComponents": [{
"id": 7,
"taxComponentId": 7,
"endDate": "22 April 2016"
},
{
"taxComponentId": 6,
"startDate": "14 April 2016"
}],
"dateFormat": "dd MMMM yyyy"
}
</code>
<code class="method-response">
{
"resourceId": 7,
"changes": {
"addComponents": [6],
"modifiedComponents": [{
"endDate": "Apr 22, 2016 12:00:00 AM",
"taxComponentId": 7
}],
"name": "tax group 2"
}
}
</code>
</div>
</div>
<!-- End of Tax Group -->
<!-- start of clients api docs -->
<a id="templates" name="clients" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>User Generated Documents</h3>
<p>User Generated Documents(alternatively, Templates) are used for end-user features such as custom user defined document generation (AKA UGD). They are based on <a href="http://mustache.github.io/">{{ moustache }} templates</a>. Think of them as a sort of built-in "mail merge" functionality.</p>
<p>User Generated Documents (and other types of templates) can aggregate data from several Apache Fineract back-end API calls via <b>mappers</b>. Mappers can even access non-Apache Fineract REST services from other servers. UGDs can render such data in tables, show images, etc. <i>TBD: Please have a look at some of the Example UGDs included in Apache Fineract (or <a href="https://mifosforge.jira.com/wiki/display/RES/UGD_FinalDoc">the Wiki page</a>, for now.).</i></p>
<p>UGDs can be assigned to an entity like <b>client</b> or <b>loan</b> and be of a type like <b>Document</b> or <b>SMS</b>. The entity and type of a UGD is only there for the convenience of user agents (UIs), in order to know where to show UGDs for the user (i.e. which tab). The Template Engine back-end runner does not actually need this metadata.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
<tr>
<td class=fielddesc>Describes the document which will be created.
It must be unique and appears listed in a tab at the assigned entity. </td>
</tr>
<tr class=alt>
<td>type</td>
</tr>
<tr>
<td class=fielddesc>
For now only the types Document and SMS are supported.
In a next version, UGDs may be created for e-mails as well.
</td>
</tr>
<tr class=alt>
<td>entity</td>
</tr>
<tr>
<td class=fielddesc>
Indicates the primary resource reference.
UGDs may be filtered by entity and type so the relevant UGDs may be listed at the belonging position.
</td>
</tr>
<tr class=alt>
<td>text</td>
</tr>
<tr>
<td class=fielddesc>
The actual UGD which may be any html-text containing mustache tags.
</td>
</tr>
<tr class=alt>
<td>mappers</td>
</tr>
<tr>
<td class=fielddesc>
By default one mapper is assigned to the UGD depending on the entity.
Mappers are used to create requests and get tags wich may be used in the UGD.
Also mappery are in order and may depend on the previous mappers.
For now mappers expect a response in JSON or plain/text.
JSON contains the keys and the values.
If the response is plain/text it can be accessed by {{$mapperskey.src}}
</td>
</tr>
</table>
</div>
</div>
<a id="clients_template" name="clients_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve UGD Details Template</h4>
<p>This is a convenience resource. It can be useful when
building maintenance user interface screens for UGDs.
The UGD data returned consists of any or all of:
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>name</dt>
<dd>
String
</dd>
<dt>entity</dt>
<dd>
String
</dd>
<dt>type</dt>
<dd>
String
</dd>
<dt>text</dt>
<dd>
String <span>optional</span>
</dd>
<dt>mappers</dt>
<dd>
Mapper <span>optional</span>
</dd>
</dl>
<p>Example Request:</p>
<div class=apiClick>templates/template</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/templates/template
</code>
<code class="method-response">
{
"id": 1,
"name": "Test",
"entity": 1,
"type": 0,
"text": "This is a loan for {{loan.clientName}}",
"mappers": [
{
"mappersorder": 0,
"mapperskey": "loan",
"mappersvalue": "loans/{{loanId}}?associations=all&tenantIdentifier={{tenantIdentifier}}",
"id": 1
}
]
}
</code>
</div>
</div>
<a id="resources_addtemplate" name="resources_addtemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Add a UGD</h4>
<p>Adds a new UGD.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name</td>
</tr>
</table>
<p>Example Requests:</p>
<div class=apiClick>templates/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/templates
</code>
<code class="method-request">
POST templates
Content-Type: application/json
Request Body:
{
"id": 1,
"name": "Test",
"entity": 1,
"type": 0,
"text": "This is a loan for {{loan.clientName}}",
"mappers": [
{
"mappersorder": 0,
"mapperskey": "loan",
"mappersvalue": "loans/{{loanId}}?associations=all&tenantIdentifier={{tenantIdentifier}}",
"id": 1
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<a id="resource_templatelist" name="resource_templatelist"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve all UGDs</h4>
<p>Example Requests:</p>
<div class=apiClick>templates</div>
<br>
<p>
It is also possible to get specific UGDs by entity and type:
</p>
<div class=apiClick>templates?type=0&entity=0</div>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Entity</div></td>
<td>Id</td>
<td><div class="fineractHeading2">Type</div></td>
<td>Id</td>
</tr>
<tr class=alt>
<td>client</td>
<td>0</td>
<td>Document</td>
<td>0</td>
</tr>
<tr>
<td>loan</td>
<td>1</td>
<td>E-Mail (not yet)</td>
<td>1</td>
</tr>
<tr>
<td></td>
<td></td>
<td>SMS</td>
<td>2</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/templates
</code>
<code class="method-response">
[
{
"id": 1,
"name": "Test",
"entity": 1,
"type": 0,
"text": "This is a loan for {{loan.clientName}}",
"mappers": [
{
"mappersorder": 0,
"mapperskey": "loan",
"mappersvalue": "loans/{{loanId}}?associations=all&tenantIdentifier={{tenantIdentifier}}",
"id": 1
}
]
}
]
</code>
</div>
</div>
<a id="resources_retrievetemplate" name="resources_retrievetemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a UGD</h4>
<p>Example Requests:</p>
<div class=apiClick>templates/1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/templates/{Id}
</code>
<code class="method-response">
{
"id": 1,
"name": "Test",
"entity": 1,
"type": 0,
"text": "This is a loan for {{loan.clientName}}",
"mappers": [
{
"mappersorder": 0,
"mapperskey": "loan",
"mappersvalue": "loans/{{loanId}}?associations=all&tenantIdentifier={{tenantIdentifier}}",
"id": 1
}
]
}
</code>
</div>
</div>
<a id="resources_updatetemplate" name="resources_updatetemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a UGD</h4>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/templates/{templateId}
</code>
<code class="method-request">
PUT templates/1
Content-Type: application/json
Request Body:
{
"id": 1,
"name": "Test",
"entity": 1,
"type": 0,
"text": "This is a loan for {{loan.clientName}}",
"mappers": [
{
"mappersorder": 0,
"mapperskey": "loan",
"mappersvalue": "loans/{{loanId}}?associations=all&tenantIdentifier={{tenantIdentifier}}",
"id": 1
}
]
}
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!----------------Client charge API starts ------------>
<a id="client_charge" name="client_charge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Client Charges</h3>
<p>It is typical for MFI's to directly associate charges with an implicit Client account. These
can be either fees or penalties</p>
<p>Client Charges are client specific instances of <a href="#charges">Charges</a>. Refer <a href="#charges">Charges</a> for documentation of the various properties of a charge, Only additional properties (
specific to the context of a Charge being associated with a Client account) are
described here</p>
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>amountPaid</td>
</tr>
<tr>
<td class=fielddesc>The total amount which has been paid for this Charge
</td>
</tr>
<tr class=alt>
<td>amountWaived</td>
</tr>
<tr>
<td class=fielddesc>The total amount that has been waived for this Charge
</td>
</tr>
<tr class=alt>
<td>amountOutstanding</td>
</tr>
<tr>
<td class=fielddesc>The Total outstanding amount for this Charge
</td>
</tr>
<tr class=alt>
<td>dueDate</td>
</tr>
<tr>
<td class=fielddesc>it specifies the due date</td>
</tr>
</table>
</div>
</div>
<a id="client_transaction" name="client_transaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Client Transaction</h3>
<p>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.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Field Descriptions</div></td>
</tr>
<tr class=alt>
<td>id</td>
</tr>
<tr>
<td class=fielddesc>This ia an unique Id associate with a Transaction.
</td>
</tr>
<tr class=alt>
<td>officeId</td>
</tr>
<tr>
<td class=fielddesc>Identifier of the office in which the transaction was made</td>
</tr>
<tr class=alt>
<td>reversed</td>
</tr>
<tr>
<td class=fielddesc>Boolean Flag that indicates if this transaction is reversed.
</td>
</tr>
<tr class=alt>
<td>amount</td>
</tr>
<tr>
<td class=fielddesc>Transaction amount</b>.
</td>
</tr>
<tr class=alt>
<td>currency</td>
</tr>
<tr>
<td class=fielddesc>Details of the currency involved with the Transaction. Currently defaults
to the currency of the Client Charge this transaction pays </td>
</tr>
<tr class=alt>
<td>date</td>
</tr>
<tr>
<td class=fielddesc>Effective date of the transaction</td>
</tr>
</table>
</div>
</div>
<a id="list_clientTransactions" name="list_clientTransactions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Client Transactions</h4>
<p>The <i>list</i> capability of client transaction can support <b>pagination</b>.</p>
<h5>Mandatory Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>clients/189/transactions</div>
<div class=apiClick>clients/189/transactions?offset=10&limit=50</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/transactions?limit=5&offset=0
</code>
<code class="method-request">
GET clients/226/transactions?limit=5&offset=0
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"totalFilteredRecords": 20,
"pageItems": [
{
"id": 226,
"officeId": 1,
"officeName": "Head Office",
"type": {
"id": 1,
"code": "clientTransactionType.payCharge",
"value": "PAY_CHARGE"
},
"date": [
2015,
9,
2
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 22,
"submittedOnDate": [
2015,
9,
2
],
"reversed": false
}
]
}
</code>
</div>
</div>
<a id="clienttransactions_retrieve" name="clienttransactions_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client Transaction</h4>
<p>Example Requests:</p>
<div class=apiClick>clients/1/transactions/1</div>
<br>
<br>
<div class=apiClick>clients/1/transactions/1?fields=id,officeName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/transaction/{transactionId}
</code>
<code class="method-response">
{
"id": 1,
"officeId": 1,
"officeName": "Head Office",
"type": {
"id": 1,
"code": "clientTransactionType.payCharge",
"value": "PAY_CHARGE"
},
"date": [
2015,
8,
17
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 60.000000,
"submittedOnDate": [
2015,
8,
19
],
"reversed": true
}
</code>
</div>
</div>
<a id="add_clientCharge" name="add_clientCharge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Add Client Charge</h4>
<p>
This API associates a Client charge with an implicit Client account
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>chargeId and dueDate </td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>amount</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/charges
</code>
<code class="method-request">
POST clients/226/charges
Content-Type: application/json
Request Body:
{
"amount" : "100",
"chargeId" : "226",
"dateFormat" : "dd MMMM yyyy",
"dueDate" : "01 September 2015",
"locale" : "en"
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 189,
"resourceId":164
}
</code>
</div>
</div>
<a id="list_clientCharges" name="list_clientCharges" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Client Charges</h4>
<p>The <i>list</i> capability of client charges supports <b>pagination</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>pendingPayment</dt>
<dd>
String <span>optional</span>
</dd>
<dd> Filters charges that are pending payment (neither paid or waived).</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>clients/1/charges</div>
<div class=apiClick>clients/1/charges?offset=0&limit=5</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/charges?limit=5&offset=0
</code>
<code class="method-request">
GET clients/1/charges?limit=5&offset=0
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"totalFilteredRecords": 4,
"pageItems": [
{
"id": 5,
"clientId": 1,
"chargeId": 6,
"name": "Client Fees 2",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
9,
1
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 550.000000,
"amountPaid": 0.000000,
"amountWaived": 0.000000,
"amountWrittenOff": 0,
"amountOutstanding": 550.000000,
"penalty": false,
"isActive": true,
"isPaid": false,
"isWaived": false
},
{
"id": 4,
"clientId": 1,
"chargeId": 5,
"name": "Client Fee 1",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
8,
31
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 120.000000,
"amountPaid": 0.000000,
"amountWaived": 120.000000,
"amountWrittenOff": 0,
"amountOutstanding": 120.000000,
"penalty": true,
"isActive": true,
"isPaid": false,
"isWaived": true
},
{
"id": 3,
"clientId": 1,
"chargeId": 5,
"name": "Client Fee 1",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
8,
17
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"amountPaid": 0.000000,
"amountWaived": 100.000000,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"penalty": true,
"isActive": true,
"isPaid": false,
"isWaived": true
},
{
"id": 2,
"clientId": 1,
"chargeId": 2,
"name": "Recurring savings Charge",
"chargeTimeType": {
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
"dueDate": [
2015,
8,
17
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"amountPaid": 0,
"amountWaived": 100.000000,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"penalty": false,
"isActive": true,
"isPaid": false,
"isWaived": true
}
]
}
</code>
</div>
</div>
<a id="clientcharges_retrieve" name="clientcharges_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client Charge</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>associations</dt>
<dd>
optional, <span>Either 'all' or a comma separated list of
loan 'associations' (itemised below).</span>
</dd>
<dd>
<br>Associations are just extra pieces of data that you
might or might not want to retrieve.<br>
<br>
</dd>
<dd>
<b>'all':</b> Gets all association data.
</dd>
<dd>
<b>'transactions':</b> Retrieves all transactions made on this client charge.
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>clients/1/charges/1</div>
<br>
<br>
<div class=apiClick>clients/1/charges/1?fields=name,id</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/clients/{clientId}/charges/{clientChargeId}
</code>
<code class="method-response">
{
"id": 3,
"clientId": 1,
"chargeId": 5,
"name": "Client Fee 1",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
8,
17
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"amountPaid": 0.000000,
"amountWaived": 100.000000,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"penalty": true,
"isActive": true,
"isPaid": false,
"isWaived": true
}
</code>
</div>
</div>
<a id="delete_clientCharge" name="delete_clientCharge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a Client Charge</h4>
<p>
Deletes a Client Charge on which no transactions have taken place (either payments or waivers). </p>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/clients/{clientId}/charges/{clientChargeId}
</code>
<code class="method-request">
POST clients/189/charges/164
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 189,
"resourceId":164
}
</code>
</div>
</div>
<a id="pay_clientCharge" name="pay_clientCharge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Pay a Client Charge</h4>
<p>
<br>Pay either a part of or the entire due amount for a charge.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr >
<td>
transactionDate and amount
</td>
</tr>
</table>
<br />
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/charges/{clientChargeId}?command=paycharge
</code>
<code class="method-request">
POST clients/189/charges/157?command=payCharge
Content-Type: application/json
Request Body:
{
"amount":200,
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"transactionDate":"01 September 2015"
}
</code>
<code class="method-response">
{
"officeId":1,
"clientId":189,
"resourceId":157,
"transactionId":"221"
}
</code>
</div>
</div>
<a id="waive_clientCharge" name="waive_clientCharge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Waive a Client Charge</h4>
<p>
<br>This API provides the facility of waiving off the remaining amount on a client charge
</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/charges/{clientChargeId}?command=waive
</code>
<code class="method-request">
POST clients/189/charges/157?command=waive
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"clientId":"189",
"resourceId":157
}
</code>
</div>
</div>
<a id="revert_clientCharge" name="revert_clientCharge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Undo a Client Transaction</h4>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/clients/{clientId}/transactions/{transactionId}?command=undo
</code>
<code class="method-request">
POST clients/189/transactions/222?command=undo
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"officeId":1,
"clientId":189,
"resourceId":222
}
</code>
</div>
</div>
<!-- End of Client Transactions -->
<a id="resources_deletetemplate" name="resources_deletetemplate"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Delete a UGD</h4>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/templates/{templateId}
</code>
<code class="method-request">
DELETE templates/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of UGD api docs -->
<!-- start of SPM API docs -->
<a id="surveys" name="surveys" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>SPM API</h3>
<p>
The Apache Fineract SPM API provides the ability to create custom surveys to collect social performance measurentment data or any additional questionnaire a financial institute want to collect.
</p>
</div>
</div>
<a id="surveys_create" name="surveys_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Create a Survey</h3>
<p>Adds a new survey to collect client related data.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>countryCode, key, name, questions, responses, sequenceNo, text, value</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/surveys
</code>
<code class="method-request">
POST surveys
Content-Type: application/json
Request Body:
{
"key":"ppi-kenya-2010",
"name":"PPI Survey for Kenya, version 2010",
"description":null,
"countryCode":"KE",
"validFrom":null,
"validTo":null,
"componentDatas":
[
{
"key":"Household",
"text":"Information about the household.",
"description":null,
"sequenceNo":1
}
],
"questionDatas":
[
{
"componentKey":"Household",
"key":"Familiy members",
"text":"How many persons live in the household?",
"description":null,
"sequenceNo":1,
"responseDatas":
[
{
"text":"1 to 3",
"value":1,
"sequenceNo":1
},
{
"text":"3 to 7",
"value":5,
"sequenceNo":2
},
{
"text":"more than 7",
"value":13,
"sequenceNo":3
}
]
}
]
}
</code>
<code class="method-response">
200 OK
</code>
</div>
</div>
<a id="surveys_list" name="surveys_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>List all Surveys</h3>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/surveys
</code>
<code class="method-request">
GET surveys
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
[
{
"id": 1,
"componentDatas": [
{
"id": 1,
"key": "Household",
"text": "Information about the household.",
"description": null,
"sequenceNo": 1
}
],
"questionDatas": [
{
"id": 1,
"responseDatas": [
{
"id": 1,
"text": "1 to 3",
"value": 1,
"sequenceNo": 1
},
{
"id": 2,
"text": "3 to 7",
"value": 5,
"sequenceNo": 2
},
{
"id": 3,
"text": "more than 7",
"value": 13,
"sequenceNo": 3
}
],
"componentKey": "Household",
"key": "Familiy members",
"text": "How many persons live in the household?",
"description": null,
"sequenceNo": 1
}
],
"key": "ppi-kenya-2010",
"name": "PPI Survey for Kenya, version 2010",
"description": null,
"countryCode": "KE",
"validFrom": 1450047600000,
"validTo": 4607276399000
}
]
</code>
</div>
</div>
<a id="surveys_retrieve" name="surveys_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Retrieve a Survey</h3>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/surveys/1
</code>
<code class="method-request">
GET surveys/1
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"id": 1,
"componentDatas": [
{
"id": 1,
"key": "Household",
"text": "Information about the household.",
"description": null,
"sequenceNo": 1
}
],
"questionDatas": [
{
"id": 1,
"responseDatas": [
{
"id": 1,
"text": "1 to 3",
"value": 1,
"sequenceNo": 1
},
{
"id": 2,
"text": "3 to 7",
"value": 5,
"sequenceNo": 2
},
{
"id": 3,
"text": "more than 7",
"value": 13,
"sequenceNo": 3
}
],
"componentKey": "Household",
"key": "Familiy members",
"text": "How many persons live in the household?",
"description": null,
"sequenceNo": 1
}
],
"key": "ppi-kenya-2010",
"name": "PPI Survey for Kenya, version 2010",
"description": null,
"countryCode": "KE",
"validFrom": 1450047600000,
"validTo": 4607276399000
}
</code>
</div>
</div>
<a id="surveys_delete" name="surveys_delete" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Deactivate Survey</h3>
</div>
<div class="method-example">
<code class="method-declaration">
DELETE https://DomainName/api/v1/surveys/1
</code>
<code class="method-request">
DELETE surveys/1
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
200 OK
</code>
</div>
</div>
<a id="lookuptables_create" name="lookuptables_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Create a Lookup Table entry</h3>
<p>Add a new netry to a survey.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>key, score, validFrom, validTo</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/surveys/1/lookuptables
</code>
<code class="method-request">
POST surveys/1/lookuptables
Content-Type: application/json
Request Body:
{
"key": "test-table",
"description": null,
"entries": [
{
"valueFrom": 0,
"valueTo": 25,
"score": 100
},
{
"valueFrom": 26,
"valueTo": 50,
"score": 50
},
{
"valueFrom": 51,
"valueTo": 75,
"score": 25
},
{
"valueFrom": 76,
"valueTo": 100,
"score": 0
}
]
}
</code>
<code class="method-response">
200 OK
</code>
</div>
</div>
<a id="lookuptables_list" name="lookuptables_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>List all Lookup Table entries</h3>
<p>List all Lookup Table entries for a survey.</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/surveys/1/lookuptables
</code>
<code class="method-request">
GET surveys/1/lookuptables
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
[
{
"key": "test-table",
"description": null,
"entries": [
{
"valueFrom": 0,
"valueTo": 25,
"score": 100
},
{
"valueFrom": 26,
"valueTo": 50,
"score": 50
},
{
"valueFrom": 51,
"valueTo": 75,
"score": 25
},
{
"valueFrom": 76,
"valueTo": 100,
"score": 0
}
]
}
]
</code>
</div>
</div>
<a id="lookuptables_retrieve" name="lookuptables_retrieve" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Retrieve a Lookup Table entry</h3>
<p>Retrieve a Lookup Table entry for a survey.</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/surveys/1/lookuptables/1
</code>
<code class="method-request">
GET surveys/1/lookuptables/test-table
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"key": "test-table",
"description": null,
"entries": [
{
"valueFrom": 0,
"valueTo": 25,
"score": 100
},
{
"valueFrom": 26,
"valueTo": 50,
"score": 50
},
{
"valueFrom": 51,
"valueTo": 75,
"score": 25
},
{
"valueFrom": 76,
"valueTo": 100,
"score": 0
}
]
}
</code>
</div>
</div>
<a id="scorecards_create" name="scorecards_create" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Create a Scorecard entry</h3>
<p>Add a new netry to a survey.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>clientId, createdOn, questionId, responseId, staffId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/surveys/1/scorecards
</code>
<code class="method-request">
POST surveys/1/scorecards
Content-Type: application/json
Request Body:
{
"userId": 1,
"clientId": 1,
"createdOn": 1451905784553,
"scorecardValues":
[
{
"questionId": 1,
"responseId": 1,
"value": 0
},
{
"questionId": 2,
"responseId": 8,
"value": 0
},
{
"questionId": 3,
"responseId": 12,
"value": 7
},
{
"questionId": 4,
"responseId": 16,
"value": 4
},
{
"questionId": 5,
"responseId": 21,
"value": 2
},
{
"questionId": 6,
"responseId": 25,
"value": 2
},
{
"questionId": 7,
"responseId": 28,
"value": 3
},
{
"questionId": 8,
"responseId": 30,
"value": 6
},
{
"questionId": 9,
"responseId": 33,
"value": 4
},
{
"questionId": 10,
"responseId": 37,
"value": 7
}
]
} </code>
<code class="method-response">
200 OK
</code>
</div>
</div>
<a id="scorecards_list" name="scorecards_list" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>List all Scorecard entries</h3>
<p>List all Scorecard entries for a survey.</p>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/surveys/1/scorecards
</code>
<code class="method-request">
GET surveys/1/scorecards
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
[
{
"userId": 1,
"clientId": 1,
"createdOn": 1451905784553,
"scorecardValues":
[
{
"questionId": 1,
"responseId": 1,
"value": 0
},
{
"questionId": 2,
"responseId": 8,
"value": 0
},
{
"questionId": 3,
"responseId": 12,
"value": 7
},
{
"questionId": 4,
"responseId": 16,
"value": 4
},
{
"questionId": 5,
"responseId": 21,
"value": 2
},
{
"questionId": 6,
"responseId": 25,
"value": 2
},
{
"questionId": 7,
"responseId": 28,
"value": 3
},
{
"questionId": 8,
"responseId": 30,
"value": 6
},
{
"questionId": 9,
"responseId": 33,
"value": 4
},
{
"questionId": 10,
"responseId": 37,
"value": 7
}
]
}
]
</code>
</div>
</div>
<!-- end of SPM API docs -->
<!-- Customer Self Service APIs-->
<div class="method-section">
<div class="method-description">
<h3>Self Service APIs</h3>
</div>
</div>
<a id="selfbasicauth" name="selfbasicauth" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Verify authentication</h4>
<p>Authenticates the credentials provided and returns the set roles and permissions allowed.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/self/authentication?username={username}&password={password}
</code>
<code class="method-request">
POST self/authentication?username=mifos&password=password
Content-Type: application/json
No Request Body
</code>
<p>Example response of autentication for user</p>
<code class="method-response">
{
"username": "mifos",
"userId": 1,
"base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=",
"authenticated": true,
"officeId": 1,
"officeName": "Head Office",
"staffId": 1,
"staffDisplayName": "Director, Program",
"organisationalRole": {
"id": 100,
"code": "staffOrganisationalRoleType.programDirector",
"value": "Program Director"
},
"roles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
],
"permissions": [
"ALL_FUNCTIONS"
],
"isSelfServiceUser": true,
"clients": [1,2,3]
}
</code>
<code class="method-request">
POST self/authentication?username=mifos&password=fail
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"developerMessage": "Invalid authentication details were passed in api request.",
"developerDocLink": "https://github.com/openMF/mifosx/wiki/HTTP-API-Error-codes",
"httpStatusCode": "401",
"defaultUserMessage": "Unauthenticated. Please login.",
"userMessageGlobalisationCode": "error.msg.not.authenticated",
"errors": []
}
</code>
</div>
</div>
<a id="selfoauth" name="selfoauth" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Fetch authenticated user details </h4>
<p>checks the Authentication and returns the set roles and permissions allowed.</p>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/self/userdetails?access_token={access_token}
</code>
<code class="method-request">
POST self/userdetails?access_token=bWlmb3M6cGFzc3dvcmQ=
Content-Type: application/json
No Request Body
</code>
<p>Example response of authenticated user.</p>
<code class="method-response">
{
"username": "mifos",
"userId": 1,
"base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=",
"authenticated": true,
"officeId": 1,
"officeName": "Head Office",
"staffId": 1,
"staffDisplayName": "Director, Program",
"organisationalRole": {
"id": 100,
"code": "staffOrganisationalRoleType.programDirector",
"value": "Program Director"
},
"roles": [
{
"id": 1,
"name": "Super user",
"description": "This role provides all application permissions."
}
],
"permissions": [
"ALL_FUNCTIONS"
],
"isSelfServiceUser": true,
"clients": [1,2,3]
}
</code>
<code class="method-request">
POST api/oauth/token?username=mifos&password=password&client_id=community-app&grant_type=password&client_secret=123
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"developerMessage": "Invalid authentication details were passed in api request.",
"developerDocLink": "https://github.com/openMF/mifosx/wiki/HTTP-API-Error-codes",
"httpStatusCode": "401",
"defaultUserMessage": "Unauthenticated. Please login.",
"userMessageGlobalisationCode": "error.msg.not.authenticated",
"errors": []
}
</code>
</div>
</div>
<a id="selfuser" name="selfuser" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update User</h4>
<p>This API can be used by Self Service user to update their own user information. Currently, "password" and "repeatPassword" are the only parameters accepted.</p>
</div>
<div class="method-example">
<code class="method-declaration">
PUT https://DomainName/api/v1/self/user
</code>
<code class="method-request">
PUT self/user
Content-Type: application/json
{
"password":"Abcd1234",
"repeatPassword":"Abcd1234"
}
</code>
<p>Example response</p>
<code class="method-response">
{
"officeId": 1,
"resourceId": 6,
"changes": {
"passwordEncoded": "6a72a630795be86fe926ce540fc45b6b922fe5ba130f185fe806a26b5e5efcdd"
}
}
</code>
</div>
</div>
<a id="selflistclients" name="selflistclients" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Clients associated to the user</h4>
<p>The <i>list</i> capability of clients can support <b>pagination</b> and <b>sorting</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>optional</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>orderBy</dt>
<dd>
String <span>optional</span>, one of <span>displayName, accountNo, officeId, officeName</span>
</dd>
<dd>Orders results by the indicated field.</dd>
<dt>sortBy</dt>
<dd>
String <span>optional</span>, one of <span>ASC, DESC</span>
</dd>
<dd>Indicates what way to order results if <i>orderBy</i> is used.</dd>
<dt>displayName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use displayName of clients to restrict results.</dd>
<dt>firstName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use firstName of clients to restrict results.</dd>
<dt>lastName</dt>
<dd>
String <span>optional</span>
</dd>
<dd>Use lastName of clients to restrict results.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>self/clients</div>
<br>
<div class=apiClick>self/clients?fields=displayName,officeName</div>
<br>
<div class=apiClick>self/clients?offset=10&limit=50</div>
<br>
<div class=apiClick>self/clients?orderBy=displayName&sortOrder=DESC</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients
</code>
<code class="method-response">
{
"totalFilteredRecords": 2,
"pageItems": [
{
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2013,
3,
1
],
"fullname": "Small shop",
"displayName": "Small shop",
"officeId": 1,
"officeName": "Head Office"
},
{
"id": 2,
"accountNo": "000000002",
"status": {
"id": 100,
"code": "clientStatusType.pending",
"value": "Pending"
},
"active": false,
"fullname": "Home Farm Produce",
"displayName": "Home Farm Produce",
"officeId": 1,
"officeName": "Head Office"
}
]
}
</code>
</div>
</div>
<a id="selfclient" name="selfclient" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client</h4>
<p>Example Requests:</p>
<div class=apiClick>self/clients/1</div>
<br>
<div class=apiClick>self/clients/1?fields=id,displayName,officeName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}
</code>
<code class="method-response">
{
"id": 27,
"accountNo": "000000027",
"status": {
"id": 300,
"code": "clientStatusType.active",
"value": "Active"
},
"active": true,
"activationDate": [
2013,
1,
1
],
"firstname": "savings",
"lastname": "test",
"displayName": "savings test",
"officeId": 1,
"officeName": "Head Office",
"timeline": {
"submittedOnDate": [
2013,
1,
1
],
"submittedByUsername": "mifos",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"activatedOnDate": [
2013,
1,
1
],
"activatedByUsername": "mifos",
"activatedByFirstname": "App",
"activatedByLastname": "Administrator"
},
"savingsProductId": 4,
"savingsProductName": "account overdraft",
"groups": []
}
</code>
</div>
</div>
<a id="selfclientsaccounts" name="selfclientsaccounts" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve client accounts overview</h4>
<p>
An example of how a loan portfolio summary can be provided. This
is requested in a specific use case of the community application.<br> It is quite reasonable to add resources like this to simplify User Interface development.
</p>
<p>Example Requests:</p>
<div class=apiClick>self/clients/1/accounts</div>
<br>
<br>
<div class=apiClick>self/clients/1/accounts?fields=loanAccounts,savingsAccounts</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}/accounts
</code>
<code class="method-response">
{
"loanAccounts": [
{
"id": 1,
"accountNo": "000000001",
"externalId": "456",
"productId": 1,
"productName": "TestOne",
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"loanType": {
"id": 1,
"code": "loanType.individual",
"value": "Individual"
},
"loanCycle": 1
}
],
"savingsAccounts": [
{
"id": 7,
"accountNo": "000000007",
"productId": 2,
"productName": "Other product",
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
},
{
"id": 6,
"accountNo": "000000006",
"productId": 1,
"productName": "Passbook Savings",
"status": {
"id": 300,
"code": "savingsAccountStatusType.active",
"value": "Active",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": true,
"closed": false
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 1828.03
},
{
"id": 5,
"accountNo": "000000005",
"productId": 1,
"productName": "Passbook Savings",
"status": {
"id": 400,
"code": "savingsAccountStatusType.withdrawn.by.applicant",
"value": "Withdrawn by applicant",
"submittedAndPendingApproval": false,
"approved": false,
"rejected": false,
"withdrawnByApplicant": true,
"active": false,
"closed": true
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
}
}
]
}
</code>
</div>
</div>
<a id="selfclientsimages" name="selfclientsimages"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Client Image</h4>
<p>Optional arguments are identical to those of <a href="#client_images_retrieve_binary">Get Image associated with an Entity (Binary file)</a></p>
<p>Example Requests:</p>
<div class=apiClick>self/clients/1/images</div>
<br>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}/images
Accept: text/plain
</code>
<code class="method-response">
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAJ1JREFUeNpi+P//PwMIA4E9EG8E4idQDGLbw+WhiiqA+D8OXAFVAzbp
DxBvB2JLIGaGYkuoGEjOhhFIHAbij0BdPgxYACMj42ogJQpifwBiXSDeC8JIbt4LxSC5DyxQjTeB
+BeaYb+Q5EBOAVutCzMJHUNNPADzzDokiYdAfAmJvwLkGeTgWQfyKZICS6hYBTwc0QL8ORSjBDhA
gAEAOg13B6R/SAgAAAAASUVORK5CYII=
</code>
</div>
</div>
<a id="selfclientscharges" name="selfclientscharges" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Client Charges</h4>
<p>The <i>list</i> capability of client charges supports <b>pagination</b>.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
<dt>pendingPayment</dt>
<dd>
String <span>optional</span>
</dd>
<dd> Filters charges that are pending payment (neither paid or waived).</dd>
<dt>chargeStatus</dt>
<dd>
String <span>optional</span>
</dd>
<dd> Filters charges according to the status.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>self/clients/1/charges</div>
<div class=apiClick>self/clients/1/charges?offset=0&limit=5</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}/charges?limit=5&offset=0
</code>
<code class="method-request">
GET self/clients/1/charges?limit=5&offset=0
Content-Type: application/json
No Request Body
</code>
<code class="method-response">
{
"totalFilteredRecords": 4,
"pageItems": [
{
"id": 5,
"clientId": 1,
"chargeId": 6,
"name": "Client Fees 2",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
9,
1
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 550.000000,
"amountPaid": 0.000000,
"amountWaived": 0.000000,
"amountWrittenOff": 0,
"amountOutstanding": 550.000000,
"penalty": false,
"isActive": true,
"isPaid": false,
"isWaived": false
},
{
"id": 4,
"clientId": 1,
"chargeId": 5,
"name": "Client Fee 1",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
8,
31
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 120.000000,
"amountPaid": 0.000000,
"amountWaived": 120.000000,
"amountWrittenOff": 0,
"amountOutstanding": 120.000000,
"penalty": true,
"isActive": true,
"isPaid": false,
"isWaived": true
},
{
"id": 3,
"clientId": 1,
"chargeId": 5,
"name": "Client Fee 1",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
8,
17
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"amountPaid": 0.000000,
"amountWaived": 100.000000,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"penalty": true,
"isActive": true,
"isPaid": false,
"isWaived": true
},
{
"id": 2,
"clientId": 1,
"chargeId": 2,
"name": "Recurring savings Charge",
"chargeTimeType": {
"id": 7,
"code": "chargeTimeType.monthlyFee",
"value": "Monthly Fee"
},
"dueDate": [
2015,
8,
17
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"amountPaid": 0,
"amountWaived": 100.000000,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"penalty": false,
"isActive": true,
"isPaid": false,
"isWaived": true
}
]
}
</code>
</div>
</div>
<a id="selfclientscharge" name="selfclientscharge" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client Charge</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>associations</dt>
<dd>
optional, <span>a comma separated list of
'associations' (itemised below).</span>
</dd>
<dd>
<br>Associations are just extra pieces of data that you
might or might not want to retrieve.<br>
<br>
</dd>
<dd>
<b>'transactions':</b> Retrieves all transactions made on this client charge.
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>self/clients/1/charges/1</div>
<br>
<br>
<div class=apiClick>self/clients/1/charges/1?fields=name,id</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}/charges/{clientChargeId}
</code>
<code class="method-response">
{
"id": 3,
"clientId": 1,
"chargeId": 5,
"name": "Client Fee 1",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2015,
8,
17
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100.000000,
"amountPaid": 0.000000,
"amountWaived": 100.000000,
"amountWrittenOff": 0,
"amountOutstanding": 0.000000,
"penalty": true,
"isActive": true,
"isPaid": false,
"isWaived": true
}
</code>
</div>
</div>
<a id="selfclienttransactions" name="selfclienttransactions" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Client Transactions</h4>
<p>The <i>list</i> capability of client transaction can support <b>pagination</b>.</p>
<h5>Mandatory Arguments</h5>
<dl class="argument-list">
<dt>offset</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 0
</dd>
<dd>Indicates the result from which pagination starts</dd>
<dt>limit</dt>
<dd>
Integer <span>Mandatory</span>, defaults to 200
</dd>
<dd>Restricts the size of results returned. To override the default and return all entries you must explicitly pass a non-positive integer value for limit e.g. limit=0, or limit=-1</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>self/clients/189/transactions</div>
<div class=apiClick>self/clients/189/transactions?offset=10&limit=50</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}/transactions?limit=5&offset=0
</code>
<code class="method-request">
GET self/clients/226/transactions?limit=5&offset=0
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">
{
"totalFilteredRecords": 20,
"pageItems": [
{
"id": 226,
"officeId": 1,
"officeName": "Head Office",
"type": {
"id": 1,
"code": "clientTransactionType.payCharge",
"value": "PAY_CHARGE"
},
"date": [
2015,
9,
2
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 22,
"submittedOnDate": [
2015,
9,
2
],
"reversed": false
}
]
}
</code>
</div>
</div>
<a id="selfclienttransaction" name="selfclienttransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client Transaction</h4>
<p>Example Requests:</p>
<div class=apiClick>self/clients/1/transactions/1</div>
<br>
<br>
<div class=apiClick>self/clients/1/transactions/1?fields=id,officeName</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/clients/{clientId}/transaction/{transactionId}
</code>
<code class="method-response">
{
"id": 1,
"officeId": 1,
"officeName": "Head Office",
"type": {
"id": 1,
"code": "clientTransactionType.payCharge",
"value": "PAY_CHARGE"
},
"date": [
2015,
8,
17
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 60.000000,
"submittedOnDate": [
2015,
8,
19
],
"reversed": true
}
</code>
</div>
</div>
<a id="selfloantemplate" name="selfloantemplate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Loan Details Template</h4>
<p>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:
<ul>
<li class=normalli>Field Defaults</li>
<li class=normalli>Allowed Value Lists</li>
</ul>
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>templateType</dt>
<dd>
String <span>mandatory</span>, only allowed value is <span>individual</span>
</dd>
<dd>
<br>templateType value decides the required template data for creating a new loan application.
</dd>
<dd>
<br><b>'individual':</b> Loan template data for creating individual loans.
</dd>
<dt>clientId</dt>
<dd>
Integer <span>mandatory</span>
</dd>
</dl>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>productId</dt>
<dd>
Integer <span>optional</span>
</dd>
<dd>If entered, productId, productName and selectedProduct
fields are returned.</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>self/loans/template?templateType=individual&clientId=1</div>
<br>
<br>
<div class=apiClick>self/loans/template?templateType=individual&clientId=1&productId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/loans/template?templateType=individual&clientId=1
</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "Kampala first Client",
"clientOfficeId": 2,
"timeline": {
"expectedDisbursementDate": [
2013,
3,
8
]
},
"productOptions": [
{
"id": 1,
"name": "Kampala Product (with cash accounting)"
}
]
}
</code>
<code class="method-declaration">
GET https://DomainName/api/v1/self/loans/template?templateType=individual&clientId=1&productId=1
</code>
<code class="method-response">
{
"clientId": 1,
"clientName": "Kampala first Client",
"clientOfficeId": 2,
"loanProductId": 1,
"loanProductName": "Kampala Product (with cash accounting)",
"loanProductDescription": "Typical Kampala loan product with cash accounting enabled for testing.",
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"principal": 1000000,
"termFrequency": 12,
"termPeriodFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"interestRatePerPeriod": 24,
"interestRateFrequencyType": {
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
},
"annualInterestRate": 24,
"amortizationType": {
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
"interestType": {
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
"interestCalculationPeriodType": {
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
},
"transactionProcessingStrategyId": 2,
"timeline": {
"expectedDisbursementDate": [
2013,
3,
8
]
},
"daysInMonthType": {
"id": 30,
"code": "DaysInMonthType.days360",
"value": "30 Days"
},
"daysInYearType": {
"id": 360,
"code": "DaysInYearType.days360",
"value": "360 Days"
},
"isInterestRecalculationEnabled": true,
"interestRecalculationData": {
"interestRecalculationCompoundingType": {
"id": 2,
"code": "interestRecalculationCompoundingMethod.fee",
"value": "Fee"
},
"recalculationCompoundingFrequencyType": {
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
},
"rescheduleStrategyType": {
"id": 2,
"code": "loanRescheduleStrategyMethod.reduce.number.of.installments",
"value": "Reduce number of installments"
},
"recalculationRestFrequencyType": {
"id":1,
"code":"interestRecalculationFrequencyType.same.as.repayment.period",
"value":"Same as repayment period"
}
}
"charges": [],
"productOptions": [
{
"id": 1,
"name": "Kampala Product (with cash accounting)"
}
],
"loanOfficerOptions": [
{
"id": 2,
"firstname": "Kampala",
"lastname": "LoanOfficer",
"displayName": "LoanOfficer, Kampala",
"officeId": 2,
"officeName": "Uganda (Kampala)",
"isLoanOfficer": true
}
],
"loanPurposeOptions": [
{
"id": 20,
"name": "option.Agriculture",
"position": 1
},
{
"id": 21,
"name": "option.Manufacturing",
"position": 20
},
{
"id": 22,
"name": "option.HousingImprovement",
"position": 21
}
],
"termFrequencyTypeOptions": [
{
"id": 0,
"code": "loanTermFrequency.periodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "loanTermFrequency.periodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "loanTermFrequency.periodFrequencyType.months",
"value": "Months"
},
{
"id": 3,
"code": "loanTermFrequency.periodFrequencyType.years",
"value": "Years"
}
],
"repaymentFrequencyTypeOptions": [
{
"id": 0,
"code": "repaymentFrequency.periodFrequencyType.days",
"value": "Days"
},
{
"id": 1,
"code": "repaymentFrequency.periodFrequencyType.weeks",
"value": "Weeks"
},
{
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
}
],
"interestRateFrequencyTypeOptions": [
{
"id": 2,
"code": "interestRateFrequency.periodFrequencyType.months",
"value": "Per month"
},
{
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
}
],
"amortizationTypeOptions": [
{
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
{
"id": 0,
"code": "amortizationType.equal.principal",
"value": "Equal principle payments"
}
],
"interestTypeOptions": [
{
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
{
"id": 0,
"code": "interestType.declining.balance",
"value": "Declining Balance"
}
],
"interestCalculationPeriodTypeOptions": [
{
"id": 0,
"code": "interestCalculationPeriodType.daily",
"value": "Daily"
},
{
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
}
],
"transactionProcessingStrategyOptions": [
{
"id": 2,
"code": "heavensfamily-strategy",
"name": "Heavensfamily"
}
],
"chargeOptions": [
{
"id": 1,
"name": "Bank Fee (per installment)",
"active": true,
"penalty": false,
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"amount": 1500,
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
}
}
],
"loanCollateralOptions": [
{
"id": 17,
"name": "option.House",
"position": 1
},
{
"id": 18,
"name": "option.Television",
"position": 17
},
{
"id": 19,
"name": "option.Gold",
"position": 18
}
],
"accountLinkingOptions":[
{
"id":1,
"accountNo":"000000001",
"clientId":1,
"clientName":"pramod nuthakki",
"productId":1,
"productName":"pramod sav",
"fieldOfficerId":0,
"currency":{"code":"USD","name":"US Dollar","decimalPlaces":2,"displaySymbol":"$","nameCode":"currency.USD","displayLabel":"US Dollar ($)"}
}
]
}
</code>
</div>
</div>
<a id="selfloancalc" name="selfloancalc" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Calculate Loan Repayment Schedule</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>productId, principal, loanTermFrequency,
loanTermFrequencyType, numberOfRepayments, repaymentEvery,
repaymentFrequencyType, interestRatePerPeriod,
amortizationType, interestType,
interestCalculationPeriodType, expectedDisbursementDate,
transactionProcessingStrategyId</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/self/loans?command=calculateLoanSchedule
</code>
<code class="method-request">
POST self/loans?command=calculateLoanSchedule
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en_GB",
"productId": 1,
"principal": "100,000.00",
"loanTermFrequency": 12,
"loanTermFrequencyType": 2,
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": 2,
"interestRatePerPeriod": 2,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1,
"expectedDisbursementDate": "20 September 2011",
"transactionProcessingStrategyId": 2
}
</code>
<code class="method-response">
{
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"loanTermInDays": 366,
"totalPrincipalDisbursed": 100000,
"totalPrincipalExpected": 100000,
"totalPrincipalPaid": 0,
"totalInterestCharged": 13471.52,
"totalFeeChargesCharged": 0,
"totalPenaltyChargesCharged": 0,
"totalWaived": 0,
"totalWrittenOff": 0,
"totalRepaymentExpected": 113471.52,
"totalRepayment": 0,
"totalOutstanding": 0,
"periods": [
{
"period": 0,
"dueDate": [
2011,
9,
20
],
"principalDisbursed": 100000,
"principalLoanBalanceOutstanding": 100000,
"feeChargesDue": 0,
"feeChargesOutstanding": 0,
"totalOriginalDueForPeriod": 0,
"totalDueForPeriod": 0,
"totalOutstandingForPeriod": 0,
"totalOverdue": 0,
"totalActualCostOfLoanForPeriod": 0
},
{
"period": 1,
"fromDate": [
2011,
9,
20
],
"dueDate": [
2011,
10,
20
],
"daysInPeriod": 30,
"principalOriginalDue": 7455.96,
"principalDue": 7455.96,
"principalOutstanding": 7455.96,
"principalLoanBalanceOutstanding": 92544.04,
"interestOriginalDue": 2000,
"interestDue": 2000,
"interestOutstanding": 2000,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 9455.96,
"totalDueForPeriod": 9455.96,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 9455.96,
"totalOverdue": 9455.96,
"totalActualCostOfLoanForPeriod": 2000
},
...
...
{
"period": 12,
"fromDate": [
2012,
8,
20
],
"dueDate": [
2012,
9,
20
],
"daysInPeriod": 31,
"principalOriginalDue": 9270.56,
"principalDue": 9270.56,
"principalOutstanding": 9270.56,
"principalLoanBalanceOutstanding": 0,
"interestOriginalDue": 185.4,
"interestDue": 185.4,
"interestOutstanding": 185.4,
"feeChargesDue": 0,
"penaltyChargesDue": 0,
"totalOriginalDueForPeriod": 9455.96,
"totalDueForPeriod": 9455.96,
"totalPaidForPeriod": 0,
"totalOutstandingForPeriod": 9455.96,
"totalOverdue": 9455.96,
"totalActualCostOfLoanForPeriod": 185.4
}
]
}
</code>
</div>
</div>
<a id="selfloanapply" name="selfloanapply" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Submit a new Loan Application</h4>
<p>Only individual loanType can be used by Self Service User </p>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>clientId, productId, principal, loanTermFrequency,
loanTermFrequencyType, loanType, numberOfRepayments, repaymentEvery,
repaymentFrequencyType, interestRatePerPeriod,
amortizationType, interestType,
interestCalculationPeriodType, transactionProcessingStrategyId,
expectedDisbursementDate, submittedOnDate, loanType</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields if interest recalculation is enabled for product and Rest frequency not same as repayment period</div></td>
</tr>
<tr class=alt>
<td>recalculationRestFrequencyDate</td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Additional Mandatory Fields if interest recalculation with interest/fee compounding is enabled for product and compounding frequency not same as repayment period</div></td>
</tr>
<tr class=alt>
<td>recalculationCompoundingFrequencyDate</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged, linkAccountId, allowPartialPeriodInterestCalcualtion,
fixedEmiAmount, maxOutstandingLoanBalance, disbursementData, graceOnArrearsAgeing, createStandingInstructionAtDisbursement (requires linkedAccountId if set to true)
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/self/loans
</code>
<code class="method-request">
POST self/loans
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"locale": "en_GB",
"clientId": 1,
"productId": 1,
"principal": "10,000.00",
"loanTermFrequency": 12,
"loanTermFrequencyType": 2,
"loanType": "individual",
"numberOfRepayments": 10,
"repaymentEvery": 1,
"repaymentFrequencyType": 2,
"interestRatePerPeriod": 10,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1,
"transactionProcessingStrategyId": 1,
"expectedDisbursementDate": "10 Jun 2013",
"submittedOnDate": "10 Jun 2013",
"linkAccountId" : "1",
"fixedEmiAmount":1100,
"maxOutstandingLoanBalance":"35000",
"disbursementData":[{"expectedDisbursementDate":"01 November 2013",
"principal":22000,"approvedPrincipal":22000}]
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="selfloan" name="selfloan" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>associations</dt>
<dd>
optional, <span>a comma separated list of
loan 'associations' (itemised below).</span>
</dd>
<dd>
<br>Associations are just extra pieces of data that you
might or might not want to retrieve.<br>
<br>
</dd>
<dd>
<b>'repaymentSchedule':</b> Loan schedule data.
</dd>
<dd>
<b>'originalSchedule':</b> Loan schedule data without interest recalculations.
</dd>
<dd>
<b>'futureSchedule':</b> Loan schedule data from today date(will be displayed only for interest first repayment strategy processors)
</dd>
<dd>
<b>'transactions':</b> Loan transactions data.
</dd>
<dd>
<b>'charges':</b> Loan charges data.
</dd>
<dd>
<b>'guarantors':</b> Loan guarantors data.
</dd>
<dd>
<b>'collateral':</b> Loan collateral data.
</dd>
<dd>
<b>'linkedAccount':</b> Account linked to loan.
</dd>
<dd>
<b>'multiDisburseDetails':</b> Loan multi-disbursement details.
</dd>
</dl>
<p>Example Requests:</p>
<div class=apiClick>self/loans/1</div>
<br>
<br>
<div class=apiClick>self/loans/1?fields=id,principal,annualInterestRate</div>
<br>
<br>
<div class=apiClick>self/loans/1?fields=id,principal,annualInterestRate&associations=repaymentSchedule,transactions</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/loans/{loanId}
</code>
<code class="method-response">
{
"id": 1,
"accountNo": "000000001",
"status": {
"id": 300,
"code": "loanStatusType.active",
"value": "Active",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": true,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"clientId": 1,
"clientName": "Kampala first Client",
"clientOfficeId": 2,
"loanProductId": 1,
"loanProductName": "Kampala Product (with cash accounting)",
"loanProductDescription": "Typical Kampala loan product with cash accounting enabled for testing.",
"loanPurposeId": 22,
"loanPurposeName": "option.HousingImprovement",
"loanOfficerId": 2,
"loanOfficerName": "LoanOfficer, Kampala",
"loanType": {
"id": 1,
"code": "loanType.individual",
"value": "Individual"
},
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"principal": 1000000,
"termFrequency": 12,
"termPeriodFrequencyType": {
"id": 2,
"code": "termFrequency.periodFrequencyType.months",
"value": "Months"
},
"numberOfRepayments": 12,
"repaymentEvery": 1,
"repaymentFrequencyType": {
"id": 2,
"code": "repaymentFrequency.periodFrequencyType.months",
"value": "Months"
},
"interestRatePerPeriod": 24,
"interestRateFrequencyType": {
"id": 3,
"code": "interestRateFrequency.periodFrequencyType.years",
"value": "Per year"
},
"annualInterestRate": 24,
"amortizationType": {
"id": 1,
"code": "amortizationType.equal.installments",
"value": "Equal installments"
},
"interestType": {
"id": 1,
"code": "interestType.flat",
"value": "Flat"
},
"interestCalculationPeriodType": {
"id": 1,
"code": "interestCalculationPeriodType.same.as.repayment.period",
"value": "Same as repayment period"
},
"transactionProcessingStrategyId": 2,
"timeline": {
"submittedOnDate": [
2012,
4,
3
],
"submittedByUsername": "admin",
"submittedByFirstname": "App",
"submittedByLastname": "Administrator",
"approvedOnDate": [
2012,
4,
3
],
"approvedByUsername": "admin",
"approvedByFirstname": "App",
"approvedByLastname": "Administrator",
"expectedDisbursementDate": [
2012,
4,
10
],
"actualDisbursementDate": [
2012,
4,
10
],
"disbursedByUsername": "admin",
"disbursedByFirstname": "App",
"disbursedByLastname": "Administrator",
"expectedMaturityDate": [
2013,
4,
10
]
},
"summary": {
"currency": {
"code": "UGX",
"name": "Uganda Shilling",
"decimalPlaces": 2,
"displaySymbol": "USh",
"nameCode": "currency.UGX",
"displayLabel": "Uganda Shilling (USh)"
},
"principalDisbursed": 1000000,
"principalPaid": 0,
"principalWrittenOff": 0,
"principalOutstanding": 1000000,
"principalOverdue": 833333.3,
"interestCharged": 240000,
"interestPaid": 0,
"interestWaived": 0,
"interestWrittenOff": 0,
"interestOutstanding": 240000,
"interestOverdue": 200000,
"feeChargesCharged": 18000,
"feeChargesDueAtDisbursementCharged": 0,
"feeChargesPaid": 0,
"feeChargesWaived": 0,
"feeChargesWrittenOff": 0,
"feeChargesOutstanding": 18000,
"feeChargesOverdue": 15000,
"penaltyChargesCharged": 0,
"penaltyChargesPaid": 0,
"penaltyChargesWaived": 0,
"penaltyChargesWrittenOff": 0,
"penaltyChargesOutstanding": 0,
"penaltyChargesOverdue": 0,
"totalExpectedRepayment": 1258000,
"totalRepayment": 0,
"totalExpectedCostOfLoan": 258000,
"totalCostOfLoan": 0,
"totalWaived": 0,
"totalWrittenOff": 0,
"totalOutstanding": 1258000,
"totalOverdue": 1048333.3,
"overdueSinceDate": [
2012,
5,
10
],
"linkedAccount":{
"id":1,
"accountNo":"000000001"
},
"disbursementDetails":[{"id":71,"expectedDisbursementDate":[2013,11,1],"principal":22000.000000,"approvedPrincipal":22000.000000}],
"fixedEmiAmount":1100.000000,
"maxOutstandingLoanBalance":35000,
"canDisburse":false,
"emiAmountVariations": [],
"inArrears": true,
"isNPA":false,
"overdueCharges": [
{
"id": 20,
"name": "overdraft penality",
"active": true,
"penalty": true,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 3.000000,
"chargeTimeType": {
"id": 9,
"code": "chargeTimeType.overdueInstallment",
"value": "overdue fees"
},
"chargeAppliesTo": {
"id": 1,
"code": "chargeAppliesTo.loan",
"value": "Loan"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"chargePaymentMode": {
"id": 0,
"code": "chargepaymentmode.regular",
"value": "Regular"
},
"feeInterval": 2,
"feeFrequency": {
"id": 1,
"code": "feeFrequencyperiodFrequencyType.weeks",
"value": "Weeks"
}
}
]
}
}
</code>
</div>
</div>
<a id="selfloanupdate" name="selfloanupdate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Update a Loan Application</h2>
<p>Loan application can only be modified when in 'Submitted and pending approval' state. Once the application is approved, the details cannot be changed using this method.</p>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/self/loans/{loanId}</code>
<code class="method-request">PUT self/loans/1
Content-Type: application/json
No Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"productId": 1,
"principal": "5000",
"loanTermFrequency": 10,
"loanTermFrequencyType": 0,
"numberOfRepayments": 10,
"repaymentEvery": 1,
"repaymentFrequencyType": 0,
"interestRatePerPeriod": 2,
"interestType": 0,
"interestCalculationPeriodType": 0,
"amortizationType": 1,
"expectedDisbursementDate": "04 March 2014",
"transactionProcessingStrategyId": 1
}
</code>
<code class="method-response">
{
"officeId": 2,
"clientId": 1,
"loanId": 1,
"resourceId": 1,
"changes": {
"principal": 5000,
"locale": "en"
}
}
</code>
</div>
</div>
<a id="selfloanwithdraw" name="selfloanwithdraw" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Applicant Withdraws from Loan Application</h4>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>withdrawnOnDate</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">
POST https://DomainName/api/v1/self/loans/{loanId}?command=withdrawnByApplicant
</code>
<code class="method-request">
POST self/loans/1?command=withdrawnByApplicant
Content-Type: application/json
Request Body:
{
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "20 September 2011",
"note": "Reason loan applicant withdrew from application."
}
</code>
<code class="method-response">
{
"officeId": 1,
"clientId": 1,
"loanId": 2,
"resourceId": 2,
"changes": {
"status": {
"id": 400,
"code": "loanStatusType.withdrawn.by.client",
"value": "Withdrawn by applicant",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": false,
"closedRescheduled": false,
"closed": false,
"overpaid": false
},
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"withdrawnOnDate": "20 September 2011",
"closedOnDate": "20 September 2011"
}
}
</code>
</div>
</div>
<a id="selfloantransaction" name="selfloantransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan Transaction Details</h4>
<p>Example Request:</p>
<div class=apiClick>self/loans/5/transactions/3</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/loans/{loanId}/transactions/{transactionId}
</code>
<code class="method-response">
{
"id": 3,
"type": {
"id": 2,
"code": "loanTransactionType.repayment",
"value": "Repayment",
"disbursement": false,
"repaymentAtDisbursement": false,
"repayment": true,
"contra": false,
"waiveInterest": false,
"waiveCharges": false,
"writeOff": false,
"recoveryRepayment": false
},
"date": [
2012,
5,
14
],
"manuallyReversed": false,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 559.88,
"interestPortion": 559.88
}
</code>
</div>
</div>
<a id="selfloancharges" name="selfloancharges"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Loan Charges</h4>
<p>Example Requests:</p>
<div class=apiClick>self/loans/1/charges</div>
<br>
<br>
<div class=apiClick>self/loans/1/charges?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/loans/{loanId}/charges
</code>
<code class="method-response">
[
{
"id": 1,
"chargeId": 1,
"name": "Loan Processing fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
},
{
"id": 7,
"chargeId": 2,
"name": "Collection Fee",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2013,
3,
29
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
}
]
</code>
</div>
</div>
<a id="selfloancharge" name="selfloancharge"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Loan Charge</h4>
<p>Example Requests:</p>
<div class=apiClick>self/loans/1/charges/1</div>
<br>
<br>
<div class=apiClick>self/loans/1/charges/1?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/loans/{loanId}/charges/{chargeId}
</code>
<code class="method-response">
{
"id": 1,
"chargeId": 1,
"name": "Loan Processing fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.disbursement",
"value": "Disbursement"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
} </code>
</div>
</div>
<a id="selfsavings" name="selfsavings" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a savings account:</h4>
<h4>Arguments</h4>
<dl class="argument-list">
<dt>associations</dt>
<dd>optional, <span>a comma separated list of savings 'associations' (itemized below).</span></dd>
<dd><br>Associations are just extra pieces of data that you might or might not want to retrieve.<br><br></dd>
<dd><b>'transactions':</b> Gets data related to transactions on the account e.g. ?associations=transactions</dd>
<dd><b>'charges':</b>Savings Account charges data.</dd>
</dl>
<p>Example Requests : </p>
<div class=apiClick>self/savingsaccounts/1</div>
<br><br>
<div class=apiClick>self/savingsaccounts/1?associations=transactions</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/self/savingsaccounts/{accountId}</code>
<code class="method-response">
{
"id": 1,
"accountNo": "000000001",
"clientId": 1,
"clientName": "small business",
"savingsProductId": 1,
"savingsProductName": "Passbook Savings",
"fieldOfficerId": 0,
"status": {
"id": 100,
"code": "savingsAccountStatusType.submitted.and.pending.approval",
"value": "Submitted and pending approval",
"submittedAndPendingApproval": true,
"approved": false,
"rejected": false,
"withdrawnByApplicant": false,
"active": false,
"closed": false
},
"timeline": {
"submittedOnDate": [
2013,
3,
1
]
},
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"nominalAnnualInterestRate": 5,
"interestCompoundingPeriodType": {
"id": 1,
"code": "savings.interest.period.savingsCompoundingInterestPeriodType.daily",
"value": "Daily"
},
"interestPostingPeriodType": {
"id": 4,
"code": "savings.interest.posting.period.savingsPostingInterestPeriodType.monthly",
"value": "Monthly"
},
"interestCalculationType": {
"id": 1,
"code": "savingsInterestCalculationType.dailybalance",
"value": "Daily Balance"
},
"interestCalculationDaysInYearType": {
"id": 365,
"code": "savingsInterestCalculationDaysInYearType.days365",
"value": "365 Days"
},
"summary": {
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"accountBalance": 0
}
}
</code>
</div>
</div>
<a id="selfsavingstransaction" name="selfsavingstransaction" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Savings Account Transaction:</h4>
<p>Example Requests: </p>
<div class=apiClick>self/savingsaccounts/1/transactions/1</div>
<br/>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/self/savingsaccounts/{accountId}/transactions/{transactionId}
</code>
<code class="method-response">
{
"id": 1,
"transactionType": {
"id": 2,
"code": "savingsAccountTransactionType.withdrawal",
"value": "Withdrawal",
"deposit": false,
"withdrawal": true,
"interestPosting": false,
"feeDeduction": false
},
"accountId": 1,
"accountNo": "000000001",
"date": [
2013,
8,
7
],
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"inMultiplesOf": 0,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"paymentDetailData": {
"id": 62,
"paymentType": {
"id": 11,
"name": "cash"
},
"accountNumber": "",
"checkNumber": "",
"routingCode": "",
"receiptNumber": "",
"bankNumber": ""
},
"amount": 5000,
"runningBalance": 0,
"reversed": true
}
</code>
</div>
</div>
<a id="selfsavingscharges" name="selfsavingscharges"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>List Savings Charges</h4>
<p>Example Requests:</p>
<div class=apiClick>self/savingsaccounts/1/charges</div>
<br>
<div class=apiClick>self/savingsaccounts/1/charges?chargeStatus=inactive</div>
<br>
<div class=apiClick>self/savingsaccounts/1/charges?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/savingsaccounts/{accountId}/charges
</code>
<code class="method-response">
[
{
"id": 1,
"chargeId": 3,
"accountId": 57,
"name": "Savings account maintenance fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
},
{
"id": 2,
"chargeId": 4,
"accountId": 57,
"name": "Pass book Fee",
"chargeTimeType": {
"id": 2,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"dueDate": [
2013,
3,
29
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
},
{
"id": 9,
"chargeId": 4,
"accountId": 57,
"name": "Withdrawal fee percentage",
"chargeTimeType": {
"id": 5,
"code": "chargeTimeType.withdrawalFee",
"value": "Withdrawal Fee"
},
"chargeCalculationType": {
"id": 2,
"code": "chargeCalculationType.percent.of.amount",
"value": "% Amount"
},
"percentage": 0.25,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 0,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 0,
"amountOrPercentage": 0.25,
"penalty": false
},
{
"id": 10,
"chargeId": 6,
"accountId": 57,
"name": "Annual fee - INR",
"chargeTimeType": {
"id": 6,
"code": "chargeTimeType.annualFee",
"value": "Annual Fee"
},
"feeOnMonthDay": [
10,
9
],
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 50,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 50,
"amountOrPercentage": 50,
"penalty": false
}
]
</code>
</div>
</div>
<a id="selfsavingscharge" name="selfsavingscharge"
class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Savings account Charge</h4>
<p>Example Requests:</p>
<div class=apiClick>self/savingsaccounts/1/charges/5</div>
<br>
<br>
<div class=apiClick>self/savingsaccounts/1/charges/5?fields=name,amountOrPercentage</div>
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/api/v1/self/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}
</code>
<code class="method-response">
{
"id": 1,
"chargeId": 1,
"name": "Passbook fee",
"chargeTimeType": {
"id": 1,
"code": "chargeTimeType.specifiedDueDate",
"value": "Specified due date"
},
"chargeCalculationType": {
"id": 1,
"code": "chargeCalculationType.flat",
"value": "Flat"
},
"percentage": 0,
"amountPercentageAppliedTo": 0,
"currency": {
"code": "USD",
"name": "US Dollar",
"decimalPlaces": 2,
"displaySymbol": "$",
"nameCode": "currency.USD",
"displayLabel": "US Dollar ($)"
},
"amount": 100,
"amountPaid": 0,
"amountWaived": 0,
"amountWrittenOff": 0,
"amountOutstanding": 100,
"amountOrPercentage": 100,
"penalty": false
} </code>
</div>
</div>
<a id="selftransfertemplate" name="selftransfertemplate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Retrieve Account Transfer Template</h2>
<p>Returns list of loan/savings accounts that can be used for account transfer</p>
<p>Example Requests:</p>
<div class=apiClick>self/accounttransfers/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/self/accounttransfers/template
</code>
<code class="method-response">
{
"fromAccountOptions": [
{
"accountId": 1,
"accountNo": "00000001",
"accountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"clientId": 1,
"clientName": "ABC",
"officeId": 1,
"officeName": "HEAD OFFICE"
},
{
"accountId": 5,
"accountNo": "00000005",
"accountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"clientId": 2,
"clientName": "XYZ",
"officeId": 3,
"officeName": "REGIONAL OFFICE"
}
],
"toAccountOptions": [
{
"accountId": 1,
"accountNo": "00000001",
"accountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"clientId": 1,
"clientName": "ABC",
"officeId": 1,
"officeName": "HEAD OFFICE"
},
{
"accountId": 5,
"accountNo": "00000005",
"accountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"clientId": 2,
"clientName": "XYZ",
"officeId": 3,
"officeName": "REGIONAL OFFICE"
}
]
}
</code>
</div>
</div>
<a id="selftransfer" name="selftransfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Create new Transfer</h2>
<p>Ability to create new transfer of monetary funds from one account to another.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/self/accounttransfers</code>
<code class="method-request">POST self/accounttransfers/
Content-Type: application/json
No Request Body:
{
"fromOfficeId": 1,
"fromClientId": 1,
"fromAccountType": 2,
"fromAccountId": 1,
"toOfficeId": 1,
"toClientId": 1,
"toAccountType": 2,
"toAccountId": 2,
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transferDate": "01 August 2011",
"transferAmount": "112.45",
"transferDescription": "A description of the transfer"
}
</code>
<code class="method-response">
{
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<a id="selfbentemplate" name="selfbentemplate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Beneficiary Third Party Transfer Template</h2>
<p>Returns Account Type enumerations. Self User is expected to know office name and account number to be able to add beneficiary.</p>
<p>Example Requests:</p>
<div class=apiClick>/self/beneficiaries/tpt/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/self/beneficiaries/tpt/template
</code>
<code class="method-response">
{
"accountTypeOptions":
[
{
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
{
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
}
]
}
</code>
</div>
</div>
<a id="selfaddtpt" name="selfaddtpt" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Add TPT Beneficiary</h2>
<p>Api to add third party beneficiary linked to current user.</p>
<p>Parameter Definitions</p>
<p>name : Nick name for beneficiary, should be unique for an self service user</p>
<p>officeName : Office Name of beneficiary(not id)</p>
<p>accountNumber : Account Number of beneficiary(not id)</p>
<p>transferLimit : Each transfer initiated to this account will not exceed this amount</p>
<p>Example Requests:</p>
<div class=apiClick>/self/beneficiaries/tpt</div>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Mandatory Fields</div></td>
</tr>
<tr class=alt>
<td>name, officeName, accountNumber, accountType</td>
</tr>
</table>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>transferLimit
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/self/beneficiaries/tpt
</code>
<code class="method-request">
POST self/beneficiaries/tpt
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"name": "beneficiary nick name",
"officeName": "HEAD OFFICE",
"accountNumber": "0000001",
"accountType": 1,
"transferLimit": 1000
}
</code>
<code class="method-response">
{
"resourceId": 5
}
</code>
</div>
</div>
<a id="selfgettpt" name="selfgettpt" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Get All TPT Beneficiary</h2>
<p>Api to get all third party beneficiary linked to current user.</p>
<p>Example Requests:</p>
<div class=apiClick>/self/beneficiaries/tpt</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/self/beneficiaries/tpt
</code>
<code class="method-request">
GET self/beneficiaries/tpt
Content-Type: application/json
</code>
<code class="method-response">
{
[
{
"id": 1,
"name": "Client2Savings",
"officeName": "Test Office",
"clientName": "FN2 LN2",
"accountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"accountNumber": "000000002",
"transferLimit": 0
},
{
"id": 4,
"name": "Client2Loan",
"officeName": "Test Office",
"clientName": "FN2 LN2",
"accountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"accountNumber": "000000002",
"transferLimit": 1000
}]
}
</code>
</div>
</div>
<a id="selfputtpt" name="selfputtpt" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Update TPT Beneficiary</h2>
<p>Api to update third party beneficiary linked to current user.</p>
<p>Example Requests:</p>
<div class=apiClick>/self/beneficiaries/tpt/{beneficiaryId}</div>
<br/>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td><div class="fineractHeading2">Optional Fields</div></td>
</tr>
<tr class=alt>
<td>name, transferLimit
</td>
</tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://DomainName/api/v1/self/beneficiaries/tpt/{beneficiaryId}
</code>
<code class="method-request">
PUT self/beneficiaries/tpt/5
Content-Type: application/json
Request Body:
{
"name": "beneficiary nick name",
"transferLimit": 1000
}
</code>
<code class="method-response">
{
"resourceId": 5,
"changes": {
"transferLimit": 1000,
"name": "Client22"
}
}
</code>
</div>
</div>
<a id="selfdeletetpt" name="selfdeletetpt" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Delete TPT Beneficiary</h2>
<p>Api to delete third party beneficiary linked to current user.</p>
<p>Example Requests:</p>
<div class=apiClick>/self/beneficiaries/tpt/{beneficiaryId}</div>
</div>
<div class="method-example">
<code class="method-declaration">DELETE https://DomainName/api/v1/self/beneficiaries/tpt/{beneficiaryId}
</code>
<code class="method-request">
DELETE self/beneficiaries/tpt/5
Content-Type: application/json
</code>
<code class="method-response">
{
"resourceId": 5
}
</code>
</div>
</div>
<a id="selftpttransfertemplate" name="selftpttransfertemplate" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Third Party Account Transfer Template</h2>
<p>Returns list of loan/savings accounts that can be used for third party account transfer</p>
<p>Example Requests:</p>
<div class=apiClick>self/accounttransfers/template?type="tpt"</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://DomainName/api/v1/self/accounttransfers/template?type="tpt"
</code>
<code class="method-response">
{
"fromAccountOptions": [
{
"accountId": 1,
"accountNo": "00000001",
"accountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"clientId": 1,
"clientName": "ABC",
"officeId": 1,
"officeName": "HEAD OFFICE"
},
{
"accountId": 5,
"accountNo": "00000005",
"accountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"clientId": 2,
"clientName": "XYZ",
"officeId": 3,
"officeName": "REGIONAL OFFICE"
}
],
"toAccountOptions": [
{
"accountId": 2,
"accountNo": "00000002",
"accountType": {
"id": 2,
"code": "accountType.savings",
"value": "Savings Account"
},
"clientId": 2,
"clientName": "ABC",
"officeId": 1,
"officeName": "HEAD OFFICE"
},
{
"accountId": 6,
"accountNo": "00000006",
"accountType": {
"id": 1,
"code": "accountType.loan",
"value": "Loan Account"
},
"clientId": 3,
"clientName": "XYZ",
"officeId": 4,
"officeName": "REGIONAL OFFICE"
}
]
}
</code>
</div>
</div>
<a id="selftpttransfer" name="selftpttransfer" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h2>Third Party Account Transfer</h2>
<p>Ability to create new third party transfer of monetary funds from one account to another.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://DomainName/api/v1/self/accounttransfers?type="tpt"</code>
<code class="method-request">POST self/accounttransfers?type="tpt"
Content-Type: application/json
No Request Body:
{
"fromOfficeId": 1,
"fromClientId": 1,
"fromAccountType": 2,
"fromAccountId": 1,
"toOfficeId": 1,
"toClientId": 2,
"toAccountType": 2,
"toAccountId": 2,
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"transferDate": "01 August 2011",
"transferAmount": "112.45",
"transferDescription": "A description of the transfer"
}
</code>
<code class="method-response">
{
"savingsId": 1,
"resourceId": 1
}
</code>
</div>
</div>
<!-- end of Customer Self Service APIs-->
</div>
<!-- main-content-wrapper -->
<a id="fullapi_matrix" name="fullapi_matrix" class="old-syle-anchor">&nbsp;</a>
<br>
<br>
<br>
<div class=fullMatrixOuter>
<table width="80%">
<tr>
<td><h3>
Full API Matrix
</h3></td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><a href="#clients">Clients</a></td>
<td>clients</td>
<td><a href="#clients_create">Create a Client</a></td>
<td><a href="#clients_list">List Clients</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/template</td>
<td></td>
<td><a href="#clients_template">Retrieve Client Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}</td>
<td></td>
<td><a href="#clients_retrieve">Retrieve a Client</a></td>
<td><a href="#clients_update">Update a Client</a></td>
<td><a href="#clients_delete">Delete a Client</a></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=activate</td>
<td><a href="#clients_activate">Activate a Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=close</td>
<td><a href="#clients_close">Close a Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=assignStaff</td>
<td><a href="#clients_assignStaff">Assign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=unassignStaff</td>
<td><a href="#clients_unassignStaff">Unassign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/accounts</td>
<td></td>
<td><a href="#clients_loansummary">Retrieve client accounts overview</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=transfer</td>
<td><a href="#clients_transfer">Transfer Client</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}?command=updateSavingsAccount</td>
<td><a href="#clients_updateSavingsAccount">Update Default Savings Account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#client_identifiers">Client Identifiers</a></td>
<td>clients/{clientId}/identifiers</td>
<td><a href="#client_identifiers_create">Create an Identifier for a Client</a></td>
<td><a href="#client_identifiers_list">List all Identifiers for a Client</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>clients/{clientId}/identifiers/{identifierId}</td>
<td></td>
<td><a href="#client_identifiers_retrieve">Retrieve a Client Identifier</a></td>
<td><a href="#client_identifiers_update">Update a Client Identifier</a></td>
<td><a href="#client_identifiers_delete">Delete a Client Identifier</a></td>
</tr>
<tr>
<td><a href="#client_images">Client Images</a></td>
<td>clients/{clientId}/images</td>
<td><a href="#client_images_create">Upload an Image for a Client (as DATA URI)</a></td>
<td><a href="#client_images_retrieve">Get Client Image (DATA URI)</a></td>
<td><a href="#client_images_update">Update Client Image (DATA URI)</a></td>
<td><a href="#client_images_delete">Delete Client Image</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a href="#client_images_create_form">
Upload an Image for a Client (Multi-part form data)</a>
</td>
<td><a href="#client_images_retrieve_binary">Get Client Image (Binary file)</a></td>
<td><a href="#client_images_update_form">
Update Client Image (Multi-part form data)</a>
</td>
<td></td>
</tr>
<tr>
<td><a href="#standinginstruction">Standing Instructions</a></td>
<td>standinginstructions</td>
<td><a href="#standinginstruction_create">Create Standing Instruction</a></td>
<td><a href="#standinginstructions_list">List Standing Instructions</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>standinginstructions/{standingInstructionId}</td>
<td></td>
<td><a href="#standinginstructions_retrieve">Retrive a Standing Instruction</a></td>
<td><a href="#standinginstruction_update">Update Standing Instruction</a></td>
<td><a href="#standinginstruction_delete">Delete Standing Instruction(status change)</a></td>
</tr>
<tr>
<td></td>
<td>standinginstructionrunhistory</td>
<td></td>
<td><a href="#standinginstructions_history">Standinginstructions History</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>standinginstructions/template</td>
<td></td>
<td><a href="#standinginstruction_template">Retrive Standing Instruction Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#accounttransfers">Account Transfers</a></td>
<td>accounttransfers/</td>
<td><a href="#accounttransfers_create">Create new Transfer</a></td>
<td><a href="#accounttransfers_list">List Transfers</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounttransfers/template</td>
<td></td>
<td><a href="#accounttransfers_template">Retrieve Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accounttransfers/{transferId}</td>
<td></td>
<td><a href="#accounttransfers_retrieve">Retrieve Transfer</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#groups">Group</a></td>
<td>groups</td>
<td><a href="#groups_create">Create a Group</a></td>
<td><a href="#groups_list">List Groups</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/template</td>
<td></td>
<td><a href="#groups_template">Retrieve Group Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}</td>
<td></td>
<td><a href="#groups_retrieve">Retrieve a Group</a></td>
<td><a href="#groups_update">Update a Group</a></td>
<td><a href="#groups_delete">Delete a Group</a></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=activate</td>
<td><a href="#groups_activate">Activate a Group</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=associateClients</td>
<td><a href="#groups_associate_clients">Associate Clients</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=disassociateClients</td>
<td><a href="#groups_disassociate_clients">Disassociate Clients</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}/accounts</td>
<td></td>
<td><a href="#groups_accounts">Retrive Group accounts summary</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=transferClients</td>
<td><a href="#groups_transfer_clients">Bulk Transfer Clients across Groups</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=generateCollectionSheet</td>
<td><a href="#groups_generate_collectionsheet">Generate Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=saveCollectionSheet</td>
<td><a href="#groups_save_collectionsheet">Save Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=unassignStaff</td>
<td><a href="#groups_unassignStaff">Unassign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=assignStaff</td>
<td><a href="#groups_assignStaff">Assign Staff</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=close</td>
<td><a href="#groups_close">Close Group</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=assignRole</td>
<td><a href="#groups_assignRole">Assign Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=unassignRole</td>
<td><a href="#groups_unassignRole">Unassign Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>groups/{groupId}?command=updateRole</td>
<td><a href="#groups_updateRole">Update Role</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#centers">Center</a></td>
<td>centers</td>
<td><a href="#centers_create">Create a Center</a></td>
<td><a href="#centers_list">List Centers</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/template</td>
<td></td>
<td><a href="#centers_template">Retrieve Center Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}</td>
<td></td>
<td><a href="#centers_retrieve">Retrieve a Center</a></td>
<td><a href="#centers_update">Update a Center</a></td>
<td><a href="#centers_delete">Delete a Center</a></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=activate</td>
<td><a href="#centers_activate">Activate a Center</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=close</td>
<td><a href="#centers_close">Close Center</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=associateGroups</td>
<td><a href="#centers_associate_groups">Associate Groups</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=disassociateGroups</td>
<td><a href="#centers_disassociate_groups">Disassociate Groups</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}/accounts</td>
<td></td>
<td><a href="#centers_accounts">Retrive Center accounts summary</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=generateCollectionSheet</td>
<td><a href="#centers_generate_collectionsheet">Generate Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>centers/{centerId}?command=saveCollectionSheet</td>
<td><a href="#centers_save_collectionsheet">Save Collection Sheet</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loanproducts">Loan Product</a></td>
<td>loanproducts</td>
<td><a href="#loanproducts_create">Create a Loan Product</a></td>
<td><a href="#loanproducts_list">List Loan Products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loanproducts/template</td>
<td></td>
<td><a href="#loanproducts_template">Retrieve Loan Product Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loanproducts/{productId}</td>
<td></td>
<td><a href="#loanproducts_retrieve">Retrieve a Loan Product</a></td>
<td><a href="#loanproducts_update">Update a Loan Product</a></td>
<td></td>
</tr>
<tr>
<td><a href="#loanproductmix">Loan Product Mix</a></td>
<td>loanproducts/template?isProductMixTemplate=true</td>
<td></td>
<td><a href="#loanproductmix_template">Retrieve Loan Product Mix Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loanproducts?associations=productMixes</td>
<td></td>
<td><a href="#loanproductmix_list">List Loan Products Mix</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loanproducts/{productId}/productmix</td>
<td><a href="#loanproductmix_create">Create a Loan Product Mix</a></td>
<td><a href="#loanproductmix_retrieve">Retrieve Loan Products Mix</a></td>
<td><a href="#loanproductmix_update">Update Loan Product Mix</a></td>
<td><a href="#loanproductmix_delete">Delete Loan Products Mix</a></td>
</tr>
<tr>
<td><a href="#loans">Loans</a></td>
<td>loans?calculateLoanSchedule</td>
<td><a href="#loans_calculate">Calculate Loan Repayment Schedule</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans</td>
<td><a href="#loans_create">Submit a new Loan Application</a></td>
<td><a href="#loans_list">List Loans/Loan Applications</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/template?clientId={clientId}</td>
<td></td>
<td><a href="#loans_template">Retrieve Loan Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}</td>
<td></td>
<td><a href="#loans_retrieve">Retrieve a Loan</a></td>
<td></td>
<td><a href="#loans_delete">Delete a Loan Application</a></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=approve</td>
<td><a href="#loans_approve">Approve Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=undoApproval</td>
<td><a href="#loans_approve_undo">Undo Loan Application Approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=assignLoanOfficer</td>
<td><a href="#loans_assignLoanOfficer">Assign a Loan Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=unassignLoanOfficer</td>
<td><a href="#loans_unassignLoanOfficer">Unassign a Loan Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=reject</td>
<td><a href="#loans_reject">Reject Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=withdraw</td>
<td><a href="#loans_withdraw">Withdraw Loan Application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=disburse</td>
<td><a href="#loans_disburse">Disburse Loan</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=disburseToSavings</td>
<td><a href="#loans_disburse_to_savings">Disburse Loan To Savings Account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=undoDisbursal</td>
<td><a href="#loans_disburse_undo">Undo Loan Application Disbursal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}?command=recoverGuarantees</td>
<td><a href="#loans_recoverguarantee">Recover From Guarantors</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions/template</td>
<td></td>
<td><a href="#loans_repaymenttemplate_etc">Retrieve Loan Transaction Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loans_transactions">Loan Transactions</a></td>
<td>loans/{loanId}/transactions?command=repayment</td>
<td><a href="#loans_transaction_repayment">Enter a repayment</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions?command=waiveInterest</td>
<td><a href="#loans_transaction_waiveinterest">Waive Interest</a></td>
<td></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td>loans/{loanId}/transactions?command=writeoff</td>
<td><a href="#loans_transaction_write-off_loan">Write-off Loan</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</tr><tr>
<td></td>
<td>loans/{loanId}/transactions?command=recoverypayment</td>
<td><a href="#loans_transaction_recovery_payment">Make Recovery Payment</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</tr><tr>
<td></td>
<td>loans/{loanId}/transactions?command=undowriteoff</td>
<td><a href="#loans_transaction_undo_write-off_loan">Undo Loan Write-off Transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#loans_transaction_retrieve">Retrieve a transactions details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/transactions/{transactionId}</td>
<td><a href="#loans_transaction_adjust">Adjust a Transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loans_charges">Loan Charges</a></td>
<td>loans/{loanId}/charges</td>
<td><a href="#loans_charges_create">Add a Loan Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/charges/{loanChargeId}</td>
<td><a href="#loans_charges_pay">Pay Loan Charge from Linked Savings</a></td>
<td><a href="#loans_charges_retrieve">Retrieve a Loan Charge</a></td>
<td><a href="#loans_charges_update">Modify a Loan Charge</a></td>
<td><a href="#loans_charges_delete">Delete a Loan Charge</a></td>
</tr>
<tr>
<td><a href="#guarantors">Loan Guarantors</a></td>
<td>loans/{loanId}/guarantors</td>
<td><a href="#guarantors_create">Create a Guarantor
</a></td>
<td><a href="#guarantors_list">List Guarantors
</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/guarantors/{guarantorId}</td>
<td></td>
<td><a href="#guarantors_retrieve">Retrieve a Guarantor</a></td>
<td><a href="#guarantors_update">Update a Guarantor</a></td>
<td><a href="#guarantors_delete">Delete a Guarantor</a></td>
</tr>
<tr>
<td><a href="#collaterals">Loan Collateral</a></td>
<td>loans/{loanId}/collaterals</td>
<td><a href="#collaterals_create">Create a Collateral
</a></td>
<td><a href="#collaterals_list">List collaterals
</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>loans/{loanId}/collaterals/{collateralId}</td>
<td></td>
<td><a href="#collaterals_retrieve">Retrieve a Collateral</a></td>
<td><a href="#collaterals_update">Update a Collateral</a></td>
<td><a href="#collaterals_delete">Delete a Collateral</a></td>
</tr>
<tr>
<td><a href="#loan_rescheduling">Loan Rescheduling</a></td>
<td>rescheduleloans</td>
<td><a href="#loan_reschedule_request_create">Create a Loan Reschedule Request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}</td>
<td></td>
<td><a href="#loan_reschedule_request_retrieve">Retrieve a Loan Reschedule Request</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}?command=previewLoanReschedule</td>
<td></td>
<td><a href="#loan_reschedule_preview_retrieve">Retrieve a Preview of The New Loan Repayment Schedule</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}?command=reject</td>
<td><a href="#loan_reschedule_request_reject">Reject Loan Reschedule Request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>rescheduleloans/{requestId}?command=approve</td>
<td><a href="#loan_reschedule_request_approve">Approve Loan Reschedule Request</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#loan_term_variations">Loan Term Variations</a></td>
<td>/loans/{loanId}/schedule?command=calculateLoanSchedule</td>
<td><a href="#loans_calculate_with_exceptions">Calculate Schedule with Loan Term Variations</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>/loans/{loanId}/schedule?command=addVariations</td>
<td><a href="#loans_update_variations">Create Loan Term Variations</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>/loans/{loanId}/schedule?command=deleteVariations</td>
<td><a href="#loans_delete_variations">Remove All Loan Term Variations</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#glaccounts">General Ledger Account</a></td>
<td>glaccounts</td>
<td><a href="#glaccounts_create">Create a New Ledger Account</a></td>
<td><a href="#glaccounts_list">List Ledger Accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>glaccounts/{glaccountId}</td>
<td></td>
<td><a href="#glaccounts_retrieve">Retrieve a Ledger Account</a></td>
<td><a href="#glaccounts_update">Update a Ledger Account</a></td>
<td><a href="#glaccounts_delete">Delete a Ledger Account</a></td>
</tr>
<tr>
<td><a href="#glclosures">Accounting Closure</a></td>
<td>glclosures</td>
<td><a href="#glclosures_create">Create an Accounting Closure</a></td>
<td><a href="#glclosures_list">List Accounting Closures</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>glclosures/{glclosureId}</td>
<td></td>
<td><a href="#glclosures_retrieve">Retrieve an Accounting Closure</a></td>
<td><a href="#glclosures_update">Update an Accounting Closure</a></td>
<td><a href="#glclosures_delete">Delete an Accounting Closure</a></td>
</tr>
<tr>
<td><a href="#journalentries">Journal Entries</a></td>
<td>journalentries</td>
<td><a href="#journalentries_create">Create Journal Entries</a></td>
<td><a href="#journalentries_list">List Journal Entries</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>journalentries?command=updateRunningBalance</td>
<td><a href="#journalentries_updatebalance">Update Running Balance for Journal Entries</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>journalentries/{entryId}</td>
<td></td>
<td><a href="#journalentries_retrieve">Retrieve a single Entry</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>journalentries/{transactionId}/reversal</td>
<td><a href="#journalentries_reverse">Reverse Journal Entries</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#accountingrules">Accounting Rules</a></td>
<td>accountingrules</td>
<td><a href="#accountingrules_create">Create a Accounting Rule</a></td>
<td><a href="#accountingrules_list">List Accounting Rules</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>accountingrules/{accountingrulesId}</td>
<td></td>
<td><a href="#accountingrules_retrieve">Retrieve a Accounting Rule</a></td>
<td><a href="#accountingrules_update">Update a Accounting Rule</a></td>
<td><a href="#accountingrules_delete">Delete a Accounting Rule</a></td>
</tr>
<tr>
<td><a href="#reports">Report</a></td>
<td>reports</td>
<td><a href="#reports_create">Create a Report</a></td>
<td><a href="#reports_list">List Reports</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>reports/template</td>
<td></td>
<td><a href="#reports_template">Retrieve Report Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>reports/{id}</td>
<td></td>
<td><a href="#reports_retrieve">Retrieve a Report</a></td>
<td><a href="#reports_update">Update a Report</a></td>
<td><a href="#reports_delete">Delete a Report</a></td>
</tr>
<tr>
<td><a href="#runreports">Run Report</a></td>
<td>runreports/{reportName}</td>
<td></td>
<td><a href="#report_run">Run a Report</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#search">Search</a></td>
<td>search</td>
<td></td>
<td><a href="#search_resource">Search Resources</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#offices">Office</a></td>
<td>offices</td>
<td><a href="#offices_create">Create an Office</a></td>
<td><a href="#offices_list">List Offices</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>offices/template</td>
<td></td>
<td><a href="#offices_template">Retrieve Office Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>offices/{officeId}</td>
<td></td>
<td><a href="#offices_retrieve">Retrieve an Office</a></td>
<td><a href="#offices_update">Update an Office</a></td>
<td></td>
</tr>
<tr>
<td><a href="#configs">Currency</a></td>
<td>currencies</td>
<td></td>
<td><a href="#configs_currencyretrieve">Retrieve Currency
Configuration</a></td>
<td><a href="#configs_currencyupdate">Update Currency
Configuration</a></td>
<td></td>
</tr>
<tr>
<td><a href="#funds">Funds</a></td>
<td>funds</td>
<td><a href="#funds_create">Create a Fund</a></td>
<td><a href="#funds_retrieve">List Funds</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>funds/{fundId}</td>
<td></td>
<td><a href="#fund_retrieve">Retrieve a Fund</a></td>
<td><a href="#fund_update">Update a Fund</a></td>
<td></td>
</tr>
<tr>
<td><a href="#staff">Staff</a></td>
<td>staff</td>
<td><a href="#staff_create">Create a Staff</a></td>
<td><a href="#staff_list">List Staff</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>staff/{staffId}</td>
<td></td>
<td><a href="#staff_retrieve">Retrieve a Staff Member</a></td>
<td><a href="#staff_update">Update a Staff Member</a></td>
<td></td>
</tr>
<tr>
<td><a href="#client_images">Staff Images</a></td>
<td>staff/{staffId}/images</td>
<td><a href="#client_images_create">Upload an Image for a Staff Member (as DATA URI)</a></td>
<td><a href="#client_images_retrieve">Get Staff Image (DATA URI)</a></td>
<td><a href="#client_images_update">Update Staff Image (DATA URI)</a></td>
<td><a href="#client_images_delete">Delete Staff Image</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a href="#client_images_create_form">
Upload an Image for a Staff Member (Multi-part form data)</a>
</td>
<td><a href="#client_images_retrieve_binary">Get Staff Image (Binary file)</a></td>
<td><a href="#client_images_update_form">
Update Staff Image (Multi-part form data)</a>
</td>
<td></td>
</tr>
<tr>
<td><a href="#charges">Charges</a></td>
<td>charges</td>
<td><a href="#charges_create">Create a Charge</a></td>
<td><a href="#charges_list">List Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>charges/{chargeId}</td>
<td></td>
<td><a href="#charges_retrieve">Retrieve a Charge</a></td>
<td><a href="#charges_update">Update a Charge</a></td>
<td><a href="#charges_delete">Delete a Charge</a></td>
</tr>
<tr>
<td><a href="#datatables">Data Table</a></td>
<td>datatables</td>
<td><a href="#datatables_createTable">Create Data Table</a></td>
<td><a href="#datatables_list">List Data Tables</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>datatables/{datatable}</td>
<td></td>
<td><a href="#datatables_getTable">Retrieve Data Table Details</a></td>
<td><a href="#datatables_updateTable">Update Data Table</a></td>
<td><a href="#datatables_deleteTable">Delete Data Table</a></td>
</tr>
<tr>
<td></td>
<td>datatables/register/{datatable}/{apptable}</td>
<td><a href="#datatables_register">Register Data Table</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>datatables/deregister/{datatable}</td>
<td><a href="#datatables_deregister">Deregister Data Table</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>datatables/{datatable}/{apptableId}</td>
<td><a href="#datatables_create">Create Entry in Data
Table</a></td>
<td><a href="#datatables_retrieve">Retrieve Entry(s) from
Data Table</a></td>
<td><a href="#datatables_update">Update Entry in Data
Table (One to One)</a></td>
<td><a href="#datatables_delete">Delete Entry(s) in Data
Table</a></td>
</tr>
<tr>
<td></td>
<td>datatables/{datatable}/{apptableId}/{datatableId}</td>
<td></td>
<td><a href="#datatables_update_1M">Update Entry in Data
Table (One to Many)</a></td>
<td></td>
<td><a href="#datatables_delete_1M">Delete Entry in Data
Table (One to Many)</a></td>
</tr>
<tr>
<td><a href="#documents">Documents</a></td>
<td>{entityType}/{entityId}/documents</td>
<td><a href="#documents_create">Create a Document</td>
<td><a href="#documents_list">List All Document Details</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>{entityType}/{entityId}/documents/{documentId}</td>
<td></td>
<td><a href="#documents_retrieve">Retrieve a Documents Details</a></td>
<td><a href="#documents_update">Update a Document</a></td>
<td><a href="#documents_delete">Delete a Document</a></td>
</tr>
<tr>
<td></td>
<td>{entityType}/{entityId}/documents/{documentId}/attachment</td>
<td></td>
<td><a href="#documents_retrieve_file">Retrieve
binary file associated with a
Document</a>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#notes">Notes</a></td>
<td>{resource}/{resourceId}/notes</td>
<td><a href="#resources_addnote">Add a Resource Note</td>
<td><a href="#resource_notelist">Retrieve a Resource's Notes</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>{resource}/{resourceId}/notes/{noteId}</td>
<td></td>
<td><a href="#resources_retrievenote">List All
Notes for a Resource</a></td>
<td><a href="#resources_updatenote">Update a Resource Note</a></td>
<td><a href="#resources_deletenote">Delete a Resource Note</a></td>
</tr>
<tr>
<td><a href="#authentication">Authentication</a></td>
<td>authentication</td>
<td><a href="#authenticate_request">Verify Authentication</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#users">User</a></td>
<td>users</td>
<td><a href="#users_create">Create a User</a></td>
<td><a href="#users_list">List Users</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>users/template</td>
<td></td>
<td><a href="#users_template">Retrieve User Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>users/{userId}</td>
<td></td>
<td><a href="#users_retrieve">Retrieve a User</a></td>
<td><a href="#users_update">Update a User</a></td>
<td><a href="#users_delete">Delete a User</a></td>
</tr>
<tr>
<td><a href="#roles">Role</a></td>
<td>roles</td>
<td><a href="#roles_create">Create a New Role</a></td>
<td><a href="#roles_list">List Roles</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>roles/{roleId}</td>
<td></td>
<td><a href="#roles_retrieve">Retrieve a Role</a></td>
<td><a href="#roles_update">Update a Role</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>roles/{roleId}/permissions</td>
<td></td>
<td><a href="#rolespermissions_retrieve">Retrieve a Role's
Permissions</a></td>
<td><a href="#rolespermissions_update">Update a Role's
Permissions</a></td>
<td></td>
</tr>
<tr>
<td><a href="#permissions">Permission</a></td>
<td>permissions</td>
<td></td>
<td><a href="#permissions_list">List Application Permissions</a></td>
<td><a href="#permissions_update">Enable/Disable Permissions for Maker Checker</a></td>
<td></td>
</tr>
<tr>
<td><a href="#configs_global">Global Configuration</a></td>
<td>configurations</td>
<td></td>
<td><a href="#configs_globalconfig_retrieve">List Global Configuration</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>configurations/{configId}</td>
<td></td>
<td><a href="#configs_globalconfig_retrieve_one">Retrieve a Global Configuration</a></td>
<td><a href="#configs_globalconfig_update">Update Global Configuration</a></td>
<td></td>
</tr>
<tr class="alt">
<td></td>
<td></td>
<td></td>
<td><a href="#configs_globalconfig_retrieve_survey">Retrieve Surveys Global Configuration</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#configs_codes">Codes</a></td>
<td>codes</td>
<td><a href="#configs_codes_create">Create a Code</a></td>
<td><a href="#configs_codes_retrieve">List Codes</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>codes/{codeId}</td>
<td></td>
<td><a href="#configs_code_retrieve">Retrieve a Code</a></td>
<td><a href="#configs_code_update">Update a Code</a></td>
<td><a href="#configs_code_delete">Delete a Code</a></td>
</tr>
<tr>
<td><a href="#configs_codes_codevalues">Code Values</a></td>
<td>codes/{codeId}/codevalues</td>
<td><a href="#configs_codes_codevalues_create">Create a Code Value</a></td>
<td><a href="#configs_codes_codevalues_list">List Code Values</a></td>
<td></td>
<td></td>
</tr>
<tr >
<td></td>
<td>codes/{codeId}/codevalues/{codevalueId}</td>
<td></td>
<td><a href="#configs_codes_codevalues_retrieve">Retrieve a Code Value</a></td>
<td><a href="#configs_codes_codevalues_update">Update a Code Value</a></td>
<td><a href="#configs_codes_codevalues_delete">Delete a Code Value</a></td>
</tr>
<tr>
<td><a href="#audits">Audits</a></td>
<td>audits</td>
<td></td>
<td><a href="#audits_list">List Audits</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>audits/searchtemplate</td>
<td></td>
<td><a href="#audits_searchtemplate">Retrieve Audit Search Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>audits/{auditId}</td>
<td></td>
<td><a href="#audits_retrieve">Retrieve an Audit Entry</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#makercheckers">Makercheckers</a></td>
<td>makercheckers</td>
<td></td>
<td><a href="#makercheckers_list">List Maker Checker Entries</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>makercheckers/searchtemplate</td>
<td></td>
<td><a href="#makercheckers_searchtemplate">Retrieve Maker Checker Search Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>makercheckers/{auditId}</td>
<td></td>
<td></td>
<td></td>
<td><a href="#makercheckers_delete">Delete Maker Checker Entry</a></td>
</tr>
<tr>
<td></td>
<td>makercheckers/{auditId}?command=approve</td>
<td><a href="#makercheckers_approve">Approve Maker Checker Entry</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>makercheckers/{auditId}?command=reject</td>
<td><a href="#makercheckers_reject">Reject Maker Checker Entry</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#scheduler_jobs">Scheduler jobs</a></td>
<td>jobs</td>
<td></td>
<td><a href="#scheduler_jobs_list">List Scheduler jobs</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>jobs/{jobId}</td>
<td></td>
<td><a href="#retrieve_scheduler_job">Retrieve a job</a></td>
<td><a href="#update_scheduler_job">Update a job</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>jobs/{jobId}?command=executeJob</td>
<td><a href="#run_job">Run a job</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>jobs/{jobid}/runhistory?offset=0&limit=200</td>
<td></td>
<td><a href="#retrieve_job_runhistory">Retrieve job history</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>scheduler</td>
<td></td>
<td><a href="#retrieve_scheduler_status">Retrieve scheduler status</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>scheduler?command=start</td>
<td><a href="#activate_scheduler">Activate a scheduler service</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>scheduler?command=stop</td>
<td><a href="#suspend_scheduler">Suspend a scheduler service</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#savingsproducts">Savings Product</a></td>
<td>savingsproducts</td>
<td><a href="#savingsproducts_create">Create a Savings product</a></td>
<td><a href="#savingsproducts_list">List Savings products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingproducts/template</td>
<td></td>
<td><a href="#savingsproducts_template">Retrieve Savings Product Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsproducts/{productId}</td>
<td></td>
<td><a href="#savingsproducts_retrieve">Retrieve a savings product</a></td>
<td><a href="#savingsproducts_update">Update a savings product</a></td>
<td><a href="#savingsproducts_delete">Delete a savings product</a></td>
</tr>
<tr>
<td><a href="#savingsaccounts">Savings Accounts</a></td>
<td>savingsaccounts</td>
<td><a href="#savingsaccounts_create">Submit new savings application</a></td>
<td><a href="#savingsaccounts_list">List savings application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/template?clientId={clientId}</td>
<td></td>
<td><a href="#savingsaccounts_template">Retrieve savings template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}</td>
<td></td>
<td><a href="#savingsaccounts_retrieve">Retrieve a savings application/account</a></td>
<td><a href="#savingsaccounts_update">Modify a savings application</a></td>
<td><a href="#savingsaccounts_delete">Delete a savings application</a></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=updateWithHoldTax</td>
<td></td>
<td></td>
<td><a href="#savingsaccounts_withholdtaxupdate">Modify savings application withhold tax</a></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=approve</td>
<td><a href="#savingsaccounts_approve">Approve a savings application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=undoApproval</td>
<td><a href="#savingsaccounts_undoapproval">Undo savings application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=assignSavingsOfficer</td>
<td><a href="#savingsaccounts_assignSavingsOfficer">Assign Savings Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unassignSavingsOfficer</td>
<td><a href="#savingsaccounts_unassignSavingsOfficer">Unassign Savings Officer</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=reject</td>
<td><a href="#savingsaccounts_reject">Reject a savings application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=withdraw</td>
<td><a href="#savingsaccounts_withdrawbyapplicant">Withdraw savings application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=activate</td>
<td><a href="#savingsaccounts_activate">Activate a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=close</td>
<td><a href="#savingsaccounts_close">Close a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=calculateInterest</td>
<td><a href="#savingsaccounts_calculate_interest">Calculate interest on a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=postInterest</td>
<td><a href="#savingsaccounts_post_interest">Post interest on a savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=block</td>
<td><a href="#savingsaccounts_block">Block savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unblock</td>
<td><a href="#savingsaccounts_unblock">UnBlock savings account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=blockCredit</td>
<td><a href="#savingsaccounts_block_credit">Block Savings Account Credit transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unblockCredit</td>
<td><a href="#savingsaccounts_unblock_credit">Unblock Savings Account Credit transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=blockDebit</td>
<td><a href="#savingsaccounts_block_debit">Block Savings Account Debit transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}?command=unblockDebit</td>
<td><a href="#savingsaccounts_unblock_debit">Unblock Savings Account Debit transactions</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#savingsaccounts_transactions">Savings Transactions</a></td>
<td>savingsaccounts/{accountId}/transactions?command=deposit</td>
<td><a href="#savingsaccounts_deposit">Make a deposit</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions?command=withdrawal</td>
<td><a href="#savingsaccounts_withdrawal">Make a withdrawal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=undo</td>
<td><a href="#savingsaccounts_undotransaction">Undo transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=modify</td>
<td><a href="#savingsaccounts_adjusttransaction">Adjust transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=holdAmount</td>
<td><a href="#savingsaccounts_hold_amount">Hold Amount</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}?command=releaseAmount</td>
<td><a href="#savingsaccounts_release_amount">Release Amount</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/template</td>
<td></td>
<td><a href="#savingsaccounts_transactions_template">Retrieve savings account transaction template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#savingsaccounts_transaction">Retrieve savings account transaction</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#savings_charges">Savings Account Charges</a></td>
<td>savingsaccounts/{accountId}/charges</td>
<td><a href="#savings_charges_create">Add a Savings Account Charge</a></td>
<td><a href="#savings_charges_list">List Savings Account Charges</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}</td>
<td></td>
<td><a href="#savings_charges_retrieve">Retrieve a Savings Account Charge</a></td>
<td><a href="#savings_charges_update">Modify a Savings Account Charge</a></td>
<td><a href="#savings_charges_delete">Delete a Savings Account Charge</a></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=paycharge</td>
<td><a href="#savings_charges_pay">Pay a Savings Account Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=waive</td>
<td><a href="#savings_charges_waive">Waive a Savings Account Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>savingsaccounts/{accountId}/charges/{savingsAccountChargeId}?command=inactivate</td>
<td><a href="#savings_charges_inactivate">Inactivate a Savings Account Charge</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#fdproducts">Fixed Deposit Product</a></td>
<td>fixeddepositproducts</td>
<td><a href="#fdproducts_create">Create a Fixed Deposit product</a></td>
<td><a href="#fdproducts_list">List Fixed Deposit products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositproducts/{productId}</td>
<td></td>
<td><a href="#fdproducts_retrieve">Retrieve a Fixed Deposit product</a></td>
<td><a href="#fdproducts_update">Update a Fixed Deposit product</a></td>
<td><a href="#fdproducts_delete">Delete a Fixed Deposit product</a></td>
</tr>
<tr>
<td><a href="#fdaccounts">Fixed Deposit Accounts</a></td>
<td>fixeddepositaccounts</td>
<td><a href="#fdaccounts_create">Submit new fixed deposit application</a></td>
<td><a href="#fdaccounts_list">List fixed deposit application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}</td>
<td></td>
<td><a href="#fdaccounts_retrieve">Retrieve a fixed deposit application/account</a></td>
<td><a href="#fdaccounts_update">Modify a fixed deposit application</a></td>
<td><a href="#fdaccounts_delete">Delete a fixed deposit application</a></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=approve</td>
<td><a href="#fdaccounts_approve">Approve a fixed deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=undoApproval</td>
<td><a href="#fdaccounts_undoapproval">Undo fixed deposit application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=reject</td>
<td><a href="#fdaccounts_reject">Reject a fixed deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=withdraw</td>
<td><a href="#fdaccounts_withdrawbyapplicant">Withdraw fixed deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=activate</td>
<td><a href="#fdaccounts_activate">Activate a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=close</td>
<td><a href="#fdaccounts_close">Close a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=prematureClose</td>
<td><a href="#fdaccounts_prematureclose">Premature Close a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=calculatePrematureAmount</td>
<td><a href="#fdaccounts_calculate_premature_amount">Calculate Premature amount on a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=calculateInterest</td>
<td><a href="#fdaccounts_calculate_interest">Calculate interest on a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>fixeddepositaccounts/{accountId}?command=postInterest</td>
<td><a href="#fdaccounts_post_interest">Post interest on a fixed deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#rdproducts">Recurring Deposit Product</a></td>
<td>recurringdepositproducts</td>
<td><a href="#rdproducts_create">Create a Recurring Deposit product</a></td>
<td><a href="#rdproducts_list">List Recurring Deposit products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositproducts/{productId}</td>
<td></td>
<td><a href="#rdproducts_retrieve">Retrieve a Recurring Deposit product</a></td>
<td><a href="#rdproducts_update">Update a Recurring Deposit product</a></td>
<td><a href="#rdproducts_delete">Delete a Recurring Deposit product</a></td>
</tr>
<tr>
<td><a href="#rdaccounts">Recurring Deposit Accounts</a></td>
<td>recurringdepositaccounts</td>
<td><a href="#rdaccounts_create">Submit new recurring deposit application</a></td>
<td><a href="#rdaccounts_list">List recurring deposit application/accounts</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}</td>
<td></td>
<td><a href="#rdaccounts_retrieve">Retrieve a recurring deposit application/account</a></td>
<td><a href="#rdaccounts_update">Modify a recurring deposit application</a></td>
<td><a href="#rdaccounts_delete">Delete a recurring deposit application</a></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=approve</td>
<td><a href="#rdaccounts_approve">Approve a recurring deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=undoApproval</td>
<td><a href="#rdaccounts_undoapproval">Undo recurring deposit application approval</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=reject</td>
<td><a href="#rdaccounts_reject">Reject a recurring deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=withdraw</td>
<td><a href="#rdaccounts_withdrawbyapplicant">Withdraw recurring deposit application</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=activate</td>
<td><a href="#rdaccounts_activate">Activate a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=close</td>
<td><a href="#rdaccounts_close">Close a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=prematureClose</td>
<td><a href="#rdaccounts_prematureclose">Premature Close a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=calculatePrematureAmount</td>
<td><a href="#rdaccounts_calculate_premature_amount">Calculate Premature amount on a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=calculateInterest</td>
<td><a href="#rdaccounts_calculate_interest">Calculate interest on a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}?command=postInterest</td>
<td><a href="#rdaccounts_post_interest">Post interest on a recurring deposit account</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#recurringdepositaccounts_transactions">Recurring Deposit Transactions</a></td>
<td>recurringdepositaccounts/{accountId}/transactions?command=deposit</td>
<td><a href="#recurringdepositaccounts_deposit">Make a deposit</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions?command=withdrawal</td>
<td><a href="#recurringdepositaccounts_withdrawal">Make a withdrawal</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/{transactionId}?command=undo</td>
<td><a href="#recurringdepositaccounts_undotransaction">Undo transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/{transactionId}?command=modify</td>
<td><a href="#recurringdepositaccounts_adjusttransaction">Adjust transaction</a></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/template</td>
<td></td>
<td><a href="#recurringdepositaccounts_transactions_template">Retrieve Deposit account transaction template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>recurringdepositaccounts/{accountId}/transactions/{transactionId}</td>
<td></td>
<td><a href="#recurringdepositaccounts_transaction">Retrieve Deposit account transaction</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="#shareproducts">Share Product</a></td>
<td>shareproducts</td>
<td><a href="#shareproducts_create">Create a Share product</a></td>
<td><a href="#shareproducts_list">List Share products</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>shareproducts/template</td>
<td></td>
<td><a href="#shareproducts_template">Retrieve Share Product Template</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>shareproducts/{productId}</td>
<td></td>
<td><a href="#shareproducts_retrieve">Retrieve a share product</a></td>
<td><a href="#shareproducts_update">Update a share product</a></td>
</tr>
</table>
</div>
<a id="betaapi_matrix" name="betaapi_matrix" class="old-syle-anchor">&nbsp;</a>
<div class=fullMatrixOuter>
<table width="80%">
<tr>
<td><h3>Beta API Matrix</h3></td>
</tr>
</table>
<table class=matrixHeading>
<tr class="matrixHeadingBG">
<td colspan=2 valign="top"><div class="matrixHeadingVerbs">
<table>
<tr>
<td>RESOURCES</td>
</tr>
</table>
</div></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">POST</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>create/complex update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">GET</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>read</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">PUT</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>update</div></td>
</tr>
</table></td>
<td><table>
<tr>
<td><div class="matrixHeadingVerbs">DELETE</div></td>
</tr>
<tr>
<td><div class=matrixHeadingCommands>delete</div></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><a href="#cache">Cache</a></td>
<td>caches</td>
<td></td>
<td><a href="#caches_list">List Cache Types</a></td>
<td><a href="#caches_switch">Switch Cache</a></td>
<td></td>
</tr>
</table>
</div>
<a id="paymentapplicationlogic"
name="paymentapplicationlogic"
class="old-syle-anchor">&nbsp;</a>
<div class="fullMatrixOuter">
<h3>Payment Application Logic / Transaction Processing Strategy</h3>
<p>The way payments (transactions) are handled and the effect they have on the loan is an area that can differ widely from MFI to MFI. Mifos allows for <strong>transaction processing strategies</strong> to be developed that are associated with a loan product. Several approaches are provided out-of-the-box. If these approaches dont meet exactly your needs a custom approach can be developed and released with the platform.</p>
<p>In general the the following areas are handled by any given <strong>transaction processing strategy</strong>:
<ul>
<li><strong>Payment order</strong>: What component of a loan installment should be paid of frist interest, principal, fees, penalties?</li>
<li><strong>Early payment</strong>: What qualifies a payment as an early payment and what impact should this have on the loan schedule?</li>
<li><strong>On time payment</strong>: What qualifies a payment as on time?</li>
<li><strong>Late payment</strong>: What qualifies a payment as a late payment and what impact should this have on the loan schedule?</li>
</ul>
</p>
<h4>Penalties, Fees, Interest, Principal order</h4>
<p>
<strong>Payment order</strong>:
<ol>
<li>Overdue and due penalties</li>
<li>Overdue and due fees</li>
<li>Overdue and due interest</li>
<li>Overdue and due principal</li>
</ol>
</p>
<p><strong>Early payment</strong>: Any payment that pays off an installment that occurs before the due date of the installment. There is no incentive/advantage to making an early payment as theres no decrease in cost of the loan.</p>
<p><strong>On time payment</strong>: Any payment that pays off an installment that occurs exactly on the due date of the installment.</p>
<p><strong>Late payment</strong>: Any payment that pays off an installment that occurs after the due date of the installment. There is no penalization for late payment. The total cost of the loan does not automatically increase, no penalties are automatically applied to the loan.</p>
<h4>Principal Interest Penalties Fees Order</h4>
<p>The key aspect of this strategy is the payment order.</p>
<p>
<strong>Payment order</strong>:
<ol>
<li>Overdue and due principal</li>
<li>Overdue and due interest</li>
<li>Overdue and due penalties</li>
<li>Overdue and due fees</li>
</ol>
</p>
<p><strong>Early payment</strong>: Any payment that pays off an installment that occurs before the due date of the installment. There is no incentive/advantage to making an early payment as theres no decrease in cost of the loan.</p>
<p><strong>On time payment</strong>: Any payment that pays off an installment that occurs exactly on the due date of the installment.</p>
<p><strong>Late payment</strong>: Any payment that pays off an installment that occurs after the due date of the installment. There is no penalization for late payment. The total cost of the loan does not automatically increase, no penalties are automatically applied to the loan.</p>
<h4>Interest Principal Penalties Fees Order</h4>
<p>The key aspect of this strategy is the payment order.</p>
<p>
<strong>Payment order</strong>:
<ol>
<li>Overdue and due interest</li>
<li>Overdue and due principal</li>
<li>Overdue and due penalties</li>
<li>Overdue and due fees</li>
</ol>
</p>
<p><strong>Early payment</strong>: Any payment that pays off an installment that occurs before the due date of the installment. There is no incentive/advantage to making an early payment as theres no decrease in cost of the loan.</p>
<p><strong>On time payment</strong>: Any payment that pays off an installment that occurs exactly on the due date of the installment.</p>
<p><strong>Late payment</strong>: Any payment that pays off an installment that occurs after the due date of the installment. There is no penalization for late payment. The total cost of the loan does not automatically increase, no penalties are automatically applied to the loan.</p>
<h4>RBI (India)</h4>
<p>Per RBI regulations, all interest must be paid (both current and overdue) before principal is paid.</p>
<p>For example taking a loan with two installments due (one current and one overdue) of 220 each (200 principal + 20 interest) - A partial payment of 40 results in payment been broken up as 20 interest on installment #1 (200 principal remaining) and 20 payment to interest on installment #2 (200 principal remaining)</p>
<p>
<strong>Payment order</strong>:
<ol>
<li>Overdue and due interest</li>
<li>Overdue and due principal</li>
<li>Overdue and due penalties</li>
<li>Overdue and due fees</li>
</ol>
</p>
<p><strong>Early payment</strong>: Any payment that pays off an installment that occurs before the due date of the installment. There is no incentive/advantage to making an early payment as theres no decrease in cost of the loan.</p>
<p><strong>On time payment</strong>: Any payment that pays off an installment that occurs exactly on the due date of the installment.</p>
<p><strong>Late payment</strong>: Any payment that pays off an installment that occurs after the due date of the installment. There is no penalization for late payment. The total cost of the loan does not automatically increase, no penalties are automatically applied to the loan.</p>
<h4>Early Payment Strategy</h4>
<p>This strategy works similar to the Interest Principal Penalties Fees Order for on-time and late payments, i.e</p>
<p>
<strong>Payment order</strong>:
<ol>
<li>Overdue and due interest</li>
<li>Overdue and due principal</li>
<li>Overdue and due penalties</li>
<li>Overdue and due fees</li>
</ol>
</p>
<p><strong>Early payment</strong>: Any payment that pays off an installment that occurs before the due date of the installment. There is no incentive/advantage to making an early payment as theres no decrease in cost of the loan. However, early payments are allocated only towards principal payments of future installments. Interest and fees/penalties of future installments are not paid and may be waived
manually if required</p>
<p><strong>On time payment</strong>: Any payment that pays off an installment that occurs exactly on the due date of the installment.</p>
<p><strong>Late payment</strong>: Any payment that pays off an installment that occurs after the due date of the installment. There is no penalization for late payment. The total cost of the loan does not automatically increase, no penalties are automatically applied to the loan.</p>
</div>
<!-- end of page-wrapper div -->
</div>
<script>
$(document).ready(function() {
$('.apiClick').bind('click', function() {
clickAPILink($(this).text());
});
$('.apiClickNotPretty').bind('click', function() {
clickAPILinkNotPretty($(this).text());
});
baseURL = getBaseURL(window.location.href);
});
</script>
</body>
</html>