Files
cbsnexora-backend/api-docs/apiLive.htm
T

3351 lines
140 KiB
HTML

<!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="Mifos X API Docs" charset="utf-8"/>
<script type="text/javascript" src="jquery-1.7.min.js"></script>
<title>Mifos X API Documentation</title>
<script>
QueryParameters = (function()
{
var result = {};
if (window.location.search)
{
// split up the query string and store in an associative 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 getBaseURL(docURL)
{
var localhostUrl = "https://localhost:8443/mifosng-provider/api/v1/";
var openmfDemoUrl = "/mifosng-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/mifosng-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>API MENU</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">Mifos X 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="#errors">Errors</a></li>
<li><a href="#fullapi_matrix">Full API Matrix</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Core</h2>
<div 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 class="alt"><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></td></tr>
<tr class="alt"><td></td><td>clients/{clientId}/loans</td><td></td><td><a href="#clients_loansummary">Retrieve a Client's Loan Account Summary</a></td><td></td><td></td></tr>
<tr><td></td><td>clients/{clientId}/notes</td><td><a href="#clients_addnote">Add a Client Note</a></td><td><a href="#clients_notes">Retrieve a Client's Notes</a></td><td></td><td></td></tr>
<tr class="alt"><td></td><td>clients/{clientId}/notes/{noteId}</td><td></td><td><a href="#clients_retrievenote">Retrieve a Client Note</a></td><td><a href="#clients_updatenote">Update a Client Note</a></td><td></td></tr>
<tr><td><a href="#loans">LOAN</a></td><td>loans</td><td><a href="#loans_create">Create a New Loan / Submit a Loan Application</a></td><td></td><td></td><td></td></tr>
<tr class="alt"><td></td><td>loans/{loanId}</td><td><a href="#loans_approve_etc">Approve, Undo Approval, Disburse, Undo Disbursal, Reject a Loan or Withdraw a Loan Application</a></td><td><a href="#loans_retrieve">Retrieve a Loan</a></td><td></td><td><a href="#loans_delete">Delete a Loan</a></td></tr>
<tr class="alt"><td></td><td>loans/{loanId}/transactions</td><td><a href="#loans_repayment_etc">Make a Repayment / Loan Waiver</a></td><td></td><td></td><td></td></tr>
<tr><td></td><td>loans/{loanId}/transactions/{transactionId}</td><td><a href="#loans_repaymentadjust_etc">Adjust a Repayment or Waiver</a></td><td><a href="#loans_repaymentretrieve_etc">Retrieve a Repayment or Waiver Details</a></td><td></td><td></td></tr>
<tr class="alt"><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 class="alt"><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>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Configuration</h2>
<div id="toc-menu1" 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 class="alt"><td><a href="#configs">CONFIGURATION</a></td><td>configurations/currency</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>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Non-Core Data</h2>
<div id="toc-menu2" 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></td><td><a href="#datatables_list">List Data Tables</a></td><td></td><td></td></tr>
<tr class="alt"><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 class="alt"><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>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Report</h2>
<div id="toc-menu3" 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></td><td><a href="#reports_list">List Reports</a></td><td></td><td></td></tr>
<tr class="alt"><td></td><td>reports/{reportName}</td><td></td><td><a href="#report_run">Run a Report</a></td><td></td><td></td></tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">User Related</h2>
<div id="toc-menu4" 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="#authentication">AUTHENTICATION</a></td><td>authentication</td><td><a href="#authentication_permissions">Verify Authentication</a></td><td></td><td></td><td></td></tr>
<tr class="alt"><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 class="alt"><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 class="alt"><td><a href="#permissions">PERMISSION</a></td><td>permissions</td><td></td><td><a href="#permissions_list">List Application Permissions</a></td><td></td><td></td></tr>
</table>
</div>
</div>
</div>
<div class="flybar-nav">
<h2 class="flybar-button">Convenience</h2>
<div id="toc-menu5" class="flybar-menu-convenience">
<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 class="alt"><td>clients/template</td><td><a href="#clients_template">Retrieve Client Details Template</a></td></tr>
<tr><td>loans/template</td><td><a href="#loans_template">Retrieve Loan Details Template</a></td></tr>
<tr class="alt"><td>loans/{loanId}/transactions/template</td><td><a href="#loans_repaymenttemplate_etc">Retrieve Loan Repayment/Loan Waiver Template</a></td></tr>
<tr><td>offices/template</td><td><a href="#offices_template">Retrieve Office Details Template</a></td></tr>
<tr class="alt"><td>loanproducts/template</td><td><a href="#loanproducts_template">Retrieve Loan Product Details Template</a></td></tr>
<tr><td>users/template</td><td><a href="#users_template">Retrieve User Details Template</a></td></tr>
<tr class="alt"><td>roles/template</td><td><a href="#roles_template">Retrieve Role Details Template</a></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>Mifos X API Documentation</h3>
<p>Mifos X is a secure, multi-tenanted microfinance platform.</p>
<p>The goal of the Mifos X API is to empower developers to build apps on top of the Mifos X Platform.
The <a href="https://ec2-46-137-62-163.eu-west-1.compute.amazonaws.com:8443/IndividualLendingGeneralJavaScript/IndivLendHome.html?tenantIdentifier=default">
reference Individual Lending app</a> (user: 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">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/">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">Apigee "Web API Design" eBook/PDF</a> and the very good <a href="https://stripe.com/docs/api">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/">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 Convenience 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>Example Request: </p>
<div class=apiClick>offices/1?fields=id,name,parentName</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>
</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, they are sent as strings in POST and PUT requests.
If there are any dates in your POST or PUT requests, you need to provide the "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:
{
"dateFormat": "dd MMMM yyyy",
"openingDate": "01 July 2007"
}
{
"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 occurs via <a href="http://en.wikipedia.org/wiki/Basic_access_authentication">HTTP Basic Auth</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">
<code>
// A Javascript/Jquery example of how to login to Mifos X 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="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/keithwoodlock/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>
<!-- 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>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">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 client e.g. The ID another system uses.<br>
If provided, it must be unique.</td></tr>
</table>
</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>Example Requests: </p>
<div class=apiClick>clients</div>
<br><br>
<div class=apiClick>clients?fields=displayName,officeName,joinedDate</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/clients</code>
<code class="method-response">[ {
"officeId" : 2,
"officeName" : "sub branch 1",
"id" : 14,
"firstname" : "Patrick",
"lastname" : "Asare-Frimpong",
"displayName" : "Patrick Asare-Frimpong",
"externalId" : null,
"joinedDate" : [ 2012, 4, 18 ]
}, {
"officeId" : 5,
"officeName" : "Majmoua",
"id" : 13,
"firstname" : "firstMajmoua",
"lastname" : "client",
"displayName" : "firstMajmoua client",
"externalId" : null,
"joinedDate" : [ 2011, 12, 1 ]
}... ]
</code>
</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>
<p>Example Request: </p>
<div class=apiClick>clients/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/clients/template</code>
<code class="method-response">{
"joinedDate" : [ 2012, 5, 29 ],
"allowedOffices" : [ {
"id" : 1,
"name" : "Demo MFI Head Office"
}, {
"id" : 2,
"name" : "sub branch 1"
}, {
"id" : 8,
"name" : "moi aussi"
}, {
"id" : 3,
"name" : "sub branch 2"
}, {
"id" : 4,
"name" : "sub branch 3"
} ]
}
</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://Domain Name/api/v1/clients/{clientId}</code>
<code class="method-response">{
"officeId" : 1,
"officeName" : "Demo MFI Head Office",
"id" : 1,
"firstname" : "Patrick",
"lastname" : "O'Meara",
"displayName" : "Patrick O'Meara",
"externalId" : null,
"joinedDate" : [ 2009, 1, 4 ]
}
</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> You can enter either:<br>
firstname/lastname - for a person OR<br>
clientOrBusinessName - for a business or organisation (or person known by one name).<br><br>
If you use clientOrBusinessName, the value is placed in the lastname field when you retrieve clients.
</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>firstname and lastname OR clientOrBusinessName<br>, joiningDate, officeId</td></tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/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",
"joiningDate": "04 March 2009"
}
</code>
<code class="method-response">
{
"entityId":23
}
</code>
</div>
<div class="method-example">
<code class="method-request">POST clients
Content-Type: application/json
Request Body:
{
"officeId": 1,
"clientOrBusinessName": "New Business to Create",
"externalId": "one/78",
"dateFormat": "dd MMMM yyyy",
"joiningDate": "13 June 2006"
}
</code>
<code class="method-response">
{
"entityId":26
}
</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>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/clients/{clientId}</code>
<code class="method-request">PUT clients/23
Content-Type: application/json
Request Body:
{
"externalId": "786444UUUYYH7",
"dateFormat": "dd MMMM yyyy",
"joiningDate": "09 June 2006"
}
</code>
<code class="method-response">{ "entityId": 23}</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 a Client's Loan Account Summary</h4>
<p>
An example of how a loan portfolio summary can be provided. This one contains quite a bit of redundant data (like the counts) and is requested
in a specific use case of the Individual Lending User Interface.<br>
However, it is quite reasonable to add resources like this to simplify User Interface development.
</p>
<p>Example Requests: </p>
<div class=apiClick>clients/1/loans</div>
<br><br>
<div class=apiClick>clients/1/loans?fields=openLoans,%20closedLoans,activeLoanCount</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/clients/{clientId}/loans</code>
<code class="method-response">{
"pendingApprovalLoans" : [ ],
"awaitingDisbursalLoans" : [ {
"id" : 17,
"externalId" : null,
"loanProductId" : 1,
"loanProductName" : "Agricultural Loan",
"loanStatusId" : 200,
"pendingApproval" : false,
"waitingForDisbursal" : true,
"open" : false,
"closed" : false,
"lifeCycleStatusText" : "Approved",
"lifeCycleStatusDate" : null
} ],
"openLoans" : [ ],
"closedLoans" : [ {
"id" : 1,
"externalId" : null,
"loanProductId" : 1,
"loanProductName" : "Agricultural Loan",
"loanStatusId" : 600,
"pendingApproval" : false,
"waitingForDisbursal" : false,
"open" : false,
"closed" : true,
"lifeCycleStatusText" : "Closed",
"lifeCycleStatusDate" : null
} ],
"anyLoanCount" : 2,
"pendingApprovalLoanCount" : 0,
"awaitingDisbursalLoanCount" : 1,
"activeLoanCount" : 0,
"closedLoanCount" : 1
}
</code>
</div>
</div>
<a id="clients_notes" name="clients_notes" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client'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>clients/2/notes?fields=note,createdOn,createdByUsername</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/clients/{clientId}/notes</code>
<code class="method-response">[ {
"id" : 20,
"clientId" : 2,
"loanId" : null,
"loanTransactionId" : null,
"noteType" : {
"id" : 100,
"code" : "noteType.client",
"value" : "Client note"
},
"note" : "This is an extra note!",
"createdById" : 2,
"createdByUsername" : "super1",
"createdOn" : 1335066625000,
"updatedById" : 2,
"updatedByUsername" : "super1",
"updatedOn" : 1335066625000
}, {
"id" : 16,
"clientId" : 2,
"loanId" : null,
"loanTransactionId" : null,
"noteType" : {
"id" : 100,
"code" : "noteType.client",
"value" : "Client note"
},
"note" : "loan only 1/2 amount expected\r\nyes",
"createdById" : 2,
"createdByUsername" : "super1",
"createdOn" : 1334726104000,
"updatedById" : 2,
"updatedByUsername" : "super1",
"updatedOn" : 1335137893000
} ]
</code>
</div>
</div>
<a id="clients_addnote" name="clients_addnote" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Add a Client Note</h4>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/clients/{clientId}/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">{
"entityId": 40
}
</code>
</div>
</div>
<a id="clients_retrievenote" name="clients_retrievenote" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Client Note</h4>
<p>Example Requests: </p>
<div class=apiClick>clients/2/notes/20</div>
<br><br>
<div class=apiClick>clients/2/notes/20?fields=note,createdOn,createdByUsername</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/clients/{clientId}/notes/{noteId}</code>
<code class="method-response">{
"id" : 20,
"clientId" : 2,
"loanId" : null,
"loanTransactionId" : null,
"noteType" : {
"id" : 100,
"code" : "noteType.client",
"value" : "Client note"
},
"note" : "This is an extra note!",
"createdById" : 2,
"createdByUsername" : "super1",
"createdOn" : 1335066625000,
"updatedById" : 2,
"updatedByUsername" : "super1",
"updatedOn" : 1335066625000
}
</code>
</div>
</div>
<a id="clients_updatenote" name="clients_updatenote" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Update a Client Note</h4>
</div>
<div class="method-example">
<code class="method-declaration">PUT https://Domain Name/api/v1/clients/{clientId}/notes/{noteId}</code>
<code class="method-request">PUT clients/2/notes/20
Content-Type: application/json
Request Body:
{
"note": "and here the note is updated nicely."
}
</code>
<code class="method-response">{
"entityId": 20
}
</code>
</div>
</div>
<!-- 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>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">Field Descriptions</div></td></tr>
<tr class=alt><td>principal</td></tr>
<tr><td class=fielddesc>Loan amount.</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>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>numberOfRepayments</td></tr>
<tr><td class=fielddesc>Number of installments to repay.<br>
Used like: numberOfRepayments Every repaymentEvery repaymentFrequencyType<br>
e.g. <b>10</b> (repayments) Every 12 Weeks</td></tr>
<tr class=alt><td>interestRatePerPeriod</td></tr>
<tr><td class=fielddesc>Interest Rate.<br>
Used like: interestRatePerPeriod% interestRateFrequencyType - interestType<br>
e.g. <b>12.0000</b>% Per year - Declining Balance</td></tr>
<tr class=alt><td>repaymentEvery</td></tr>
<tr><td class=fielddesc>Used like: numberOfRepayments Every repaymentEvery repaymentFrequencyType<br>
e.g. 10 (repayments) Every <b>12</b> Weeks</td></tr>
<tr><td class=fieldtype>Each of the items below has an id, code and (english) value.<br>
Only the id (integer) is used when updating. All 3 are returned on GET (read) requests.<br>
The options are fully listed in <a href="#loanproducts_template">Retrieve Loan Product Details Template</a>.
</td></tr>
<tr class=alt><td>repaymentFrequencyType</td></tr>
<tr><td class=fielddesc>Used like: numberOfRepayments Every repaymentEvery repaymentFrequencyType<br>
e.g. 10 (repayments) Every 12 <b>Weeks</b>
<br><span>Example Values:</span> Days, Weeks, Months
</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> Per month, Per year</td></tr>
<tr class=alt><td>amortizationType</td></tr>
<tr><td class=fielddesc>
<span>Example Values:</span> Equal principle payments, Equal installments</td></tr></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> Declining Balance, Flat</td></tr></td></tr>
<tr class=alt><td>interestCalculationPeriodType</td></tr>
<tr><td class=fielddesc>
<span>Example Values:</span> Same as repayment period, Daily</td></tr></td></tr>
</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>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>loans/template?clientId=1&productId=1</div>
<br><br>
<div class=apiClick>loans/template?clientId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/loans/template</code>
<code class="method-response">{
"clientId" : 1,
"clientName" : "Patrick O'Meara",
"productId" : 1,
"productName" : "Agricultural Loan",
"selectedProduct" : {
"id" : 1,
"name" : "Agricultural Loan",
"description" : "An agricultural loan given to farmers to help buy crop, stock and machinery. With an arrears tolerance setting of 1,000 CFA, loans are not marked as 'in arrears' or 'in bad standing' if the amount outstanding is less than this. Interest rate is described using monthly percentage rate (MPR) even though the loan typically lasts a year and requires one repayment (typically at time when farmer sells crop)",
"principal" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 100000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "100000 CFA"
},
"inArrearsTolerance" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 1000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "1000 CFA"
},
"numberOfRepayments" : 1,
"repaymentEvery" : 12,
"interestRatePerPeriod" : 1.750000,
"annualInterestRate" : 21.000000,
"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"
},
"createdOn" : 1334232874000,
"lastModifedOn" : 1334232874000,
"currencyOptions" : [ {
"code" : "KES",
"name" : "Kenyan Shilling",
"decimalPlaces" : 2,
"displaySymbol" : "KSh",
"nameCode" : "currency.KES",
"displayLabel" : "Kenyan Shilling (KSh)"
}, {
"code" : "BND",
"name" : "Brunei Dollar",
"decimalPlaces" : 2,
"displaySymbol" : "BND",
"nameCode" : "currency.BND",
"displayLabel" : "Brunei Dollar (BND)"
}, {
"code" : "LBP",
"name" : "Lebanese Pound",
"decimalPlaces" : 2,
"displaySymbol" : "L£",
"nameCode" : "currency.LBP",
"displayLabel" : "Lebanese Pound (L£)"
}, {
"code" : "GHC",
"name" : "Ghana Cedi",
"decimalPlaces" : 2,
"displaySymbol" : "GHC",
"nameCode" : "currency.GHC",
"displayLabel" : "Ghana Cedi (GHC)"
}, {
"code" : "USD",
"name" : "US Dollar",
"decimalPlaces" : 2,
"displaySymbol" : "$",
"nameCode" : "currency.USD",
"displayLabel" : "US Dollar ($)"
}, {
"code" : "XOF",
"name" : "CFA Franc BCEAO",
"decimalPlaces" : 0,
"displaySymbol" : "CFA",
"nameCode" : "currency.XOF",
"displayLabel" : "CFA Franc BCEAO (CFA)"
} ],
"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"
} ],
"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"
} ]
},
"expectedDisbursementDate" : [ 2012, 6, 7 ],
"allowedProducts" : [ {
"id" : 1,
"name" : "Agricultural Loan"
}, {
"id" : 2,
"name" : "Brunei Loan"
}, {
"id" : 3,
"name" : "IL Loan"
}, {
"id" : 4,
"name" : "IBL Mabeshte"
}, {
"id" : 5,
"name" : "Salary Loan"
}, {
"id" : 6,
"name" : "daily-declining-balance"
}, {
"id" : 7,
"name" : "A new loan product for me"
} ]
}
</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>
<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>'summary':</b> Loan summary data.</dd>
<dd><b>'repaymentSchedule':</b> Loan Schedule data.</dd>
<dd><b>'loanRepayments':</b> Loan Repayment data.</dd>
<dd><b>'permissions':</b> Data that describes what things can happen to the loan in its current state.
Very specific to the needs of the current Individual Lending client application.</dd>
<dd><b>'convenienceData':</b> Some derived data that is specific to the needs of the current Individual Lending client application.</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><br>
<div class=apiClick>loans/1?fields=id,principal,annualInterestRate&associations=summary,repaymentSchedule</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/loans/{loanId}</code>
<code class="method-response">{
"id" : 1,
"externalId" : null,
"loanProductName" : "Agricultural Loan",
"submittedOnDate" : [ 2009, 1, 5 ],
"approvedOnDate" : [ 2009, 1, 8 ],
"expectedDisbursementDate" : [ 2009, 1, 15 ],
"actualDisbursementDate" : [ 2009, 1, 15 ],
"expectedFirstRepaymentOnDate" : null,
"interestChargedFromDate" : null,
"closedOnDate" : [ 2009, 11, 13 ],
"expectedMaturityDate" : [ 2009, 11, 15 ],
"principal" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 100000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "100000 CFA"
},
"inArrearsTolerance" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 1000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "1000 CFA"
},
"numberOfRepayments" : 1,
"repaymentEvery" : 10,
"interestRatePerPeriod" : 1.75,
"annualInterestRate" : 21.0,
"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"
},
"lifeCycleStatusText" : "Closed",
"lifeCycleStatusDate" : [ 2009, 11, 13 ]
}
</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>Create a New Loan / Submit a Loan Application</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>command</dt>
<dd>String<span> Optional, case-insensitive</span></dd>
<dd>The default action is to Submit a New Loan Application ("Submitted and awaiting approval" status).<br></dd>
<dd>If "?command=calculateLoanSchedule" is added to the URL then no update is made but the loan schedule (as would have been if the loan
had been submitted) is returned. This gives the ability to try out various loan options and 'preview' the schedule before committing
to it.</dd>
</dl>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>clientId, productId, inArrearsTolerance, submittedOnDate, principal,
repaymentFrequencyType, repaymentEvery, numberOfRepayments, interestRatePerPeriod, interestRateFrequencyType, amortizationType,
interestType, interestCalculationPeriodType, expectedDisbursementDate</td></tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/loans</code>
<code class="method-request">POST loans
Content-Type: application/json
Request Body:
{
"clientId": 1,
"productId": 1,
"locale": "en_GB",
"principal": "100,000.00",
"inArrearsTolerance": "1,000.00",
"repaymentFrequencyType": 2,
"repaymentEvery": "1",
"numberOfRepayments": "12",
"interestRatePerPeriod": "1.75",
"interestRateFrequencyType": 2,
"amortizationType": 1,
"interestCalculationPeriodType": 1,
"interestType": 0,
"dateFormat": "dd MMMM yyyy",
"expectedDisbursementDate": "01 July 2007",
"submittedOnDate": "25 June 2007"
}
</code>
<code class="method-response">{
"entityId": 42
}
</code>
</div>
</div>
<a id="loans_approve_etc" name="loans_approve_etc" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Approve, Undo Approval, Disburse, Undo Disbursal, Reject a Loan or Withdraw a Loan Application</h4>
<h5>Arguments</h5>
<dl class="argument-list">
<dt>command</dt>
<dd>String<span> Mandatory, case-insensitive</span></dd>
<dd>'approve' : Approve Loan</dd>
<dd>'disburse' : Disburse Loan</dd>
<dd>'reject' : Reject Loan</dd>
<dd>'withdrewbyclient' : Client Withdrew Loan Application</dd>
<dd>'undoapproval' : Undo Loan Approval</dd>
<dd>'undodisbursal' : Undo Loan Disbursal</dd>
</dl>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>eventDate</td></tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/loans/{loanId}</code>
<code class="method-request">POST loans/1?command=approve
Content-Type: application/json
Request Body:
{
"dateFormat": "dd MMMM yyyy",
"eventDate": "07 May 2012",
"note": "and event note is added"
} </code>
<code class="method-response">{
"entityId": 37
}
</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</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://Domain Name/api/v1/loans/{loanId}</code>
<code class="method-request">DELETE loans/1
Content-Type: application/json
No Request Body:
</code>
<code class="method-response">{
"entityId": 1
}
</code>
</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 Repayment/Loan Waiver 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>
</dl>
<p>Example Request: </p>
<div class=apiClick>loans/10/transactions/template?command=repayment</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/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,
"amount" : 471,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "471 CFA"
}
}
</code>
</div>
</div>
<a id="loans_repayment_etc" name="loans_repayment_etc" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Make a Repayment / Loan Waiver</h4>
<dl class="argument-list">
<dt>command</dt>
<dd>String<span> Optional, case-insensitive</span></dd>
<dd>'repayment' : Make Loan Repayment.</dd>
<dd>'waiver' : Loan Waiver.</dd>
</dl>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/loans/{loanId}/transactions</code>
<code class="method-request">POST loans/37/transactions?command=repayment
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "14 May 2012",
"transactionAmount": "559.88",
"note": "Repayment at branch"
}
</code>
<code class="method-response">{
"entityId": 37
}
</code>
</div>
</div>
<a id="loans_repaymentretrieve_etc" name="loans_repaymentretrieve_etc" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve a Repayment or Waiver Details</h4>
<p>Example Request: </p>
<div class=apiClick>loans/10/transactions/20</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/loans/{loanId}/transactions/{transactionId}</code>
<code class="method-response">{
"id" : 10,
"date" : [ 2009, 1, 29 ],
"principal" : null,
"interest" : null,
"total" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 300000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "300000 CFA"
},
"totalWaived" : null,
"overpaid" : null,
"transactionOffsetFromToday" : -1218
}
</code>
</div>
</div>
<a id="loans_repaymentadjust_etc" name="loans_repaymentadjust_etc" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Adjust a Repayment or Waiver</h4>
<p><b>Note:</b> there is no need to specify command={transactionType} parameter.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">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://Domain Name/api/v1/loans/{loanId}/transactions/{transactionId}</code>
<code class="method-request">POST loans/16/transactions/32
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"dateFormat": "dd MMMM yyyy",
"transactionDate": "25 May 2012",
"transactionAmount": "50,000.00",
"note": "adj note"
}
</code>
<code class="method-response">{
"entityId": 16
}
</code>
</div>
</div>
<!-- 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 hierarchial 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="mifosXHeading2">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://Domain Name/api/v1/offices</code>
<code class="method-response">[ {
"id" : 1,
"name" : "Demo MFI Head Office",
"externalId" : "1",
"openingDate" : [ 2009, 1, 1 ],
"hierarchy" : ".",
"parentName" : null,
"parentId" : null
}, {
"id" : 2,
"name" : "B1",
"externalId" : null,
"openingDate" : [ 2012, 4, 1 ],
"hierarchy" : ".2.",
"parentName" : "Demo MFI Head Office",
"parentId" : 1
}, {
"id" : 3,
"name" : "B2",
"externalId" : null,
"openingDate" : [ 2012, 4, 4 ],
"hierarchy" : ".3.",
"parentName" : "Demo MFI Head Office",
"parentId" : 1
} ]
</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://Domain Name/api/v1/offices/template</code>
<code class="method-response">{
"openingDate" : [ 2012, 5, 28 ],
"allowedParents" : [ {
"id" : 1,
"name" : "Demo MFI Head Office"
}, {
"id" : 2,
"name" : "B1"
}, {
"id" : 3,
"name" : "B2"
} ]
}
</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://Domain Name/api/v1/offices/1</code>
<code class="method-response">{
"id" : 1,
"name" : "Demo MFI Head Office",
"externalId" : "1",
"openingDate" : [ 2009, 1, 1 ],
"hierarchy" : ".",
"parentName" : null,
"parentId" : null
}
</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="mifosXHeading2">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://Domain Name/api/v1/offices</code>
<code class="method-request">POST offices
Content-Type: application/json
Request Body:
{
"name": "Example New Branch",
"dateFormat": "dd MMMM yyyy",
"openingDate": "01 July 2007",
"parentId": 2,
"externalId": "SYS54-88"
}
</code>
<code class="method-response">{
"entityId": 9
}
</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://Domain Name/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">{
"entityId": 1
}
</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="mifosXHeading2">Field Descriptions</div></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>principal</td></tr>
<tr><td class=fielddesc>Loan amount.</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>numberOfRepayments</td></tr>
<tr><td class=fielddesc>Number of installments to repay.<br>
Used like: numberOfRepayments Every repaymentEvery repaymentFrequencyType<br>
e.g. <b>10</b> (repayments) Every 12 Weeks</td></tr>
<tr class=alt><td>interestRatePerPeriod</td></tr>
<tr><td class=fielddesc>Interest Rate.<br>
Used like: interestRatePerPeriod% interestRateFrequencyType - interestType<br>
e.g. <b>12.0000</b>% Per year - Declining Balance</td></tr>
<tr class=alt><td>repaymentEvery</td></tr>
<tr><td class=fielddesc>Used like: numberOfRepayments Every repaymentEvery repaymentFrequencyType<br>
e.g. 10 (repayments) Every <b>12</b> Weeks</td></tr>
<tr><td class=fieldtype>Each of the items below has an id, code and (english) value.<br>
Only the id (integer) is used when updating. All 3 are returned on GET (read) requests.<br>
The options are fully listed in <a href="#loanproducts_template">Retrieve Loan Product Details Template</a>.
</td></tr>
<tr class=alt><td>repaymentFrequencyType</td></tr>
<tr><td class=fielddesc>Used like: numberOfRepayments Every repaymentEvery repaymentFrequencyType<br>
e.g. 10 (repayments) Every 12 <b>Weeks</b>
<br><span>Example Values:</span> Days, Weeks, Months
</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> Per month, Per year</td></tr>
<tr class=alt><td>amortizationType</td></tr>
<tr><td class=fielddesc>
<span>Example Values:</span> Equal principle payments, Equal installments</td></tr></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> Declining Balance, Flat</td></tr></td></tr>
<tr class=alt><td>interestCalculationPeriodType</td></tr>
<tr><td class=fielddesc>
<span>Example Values:</span> Same as repayment period, Daily</td></tr></td></tr>
</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://Domain Name/api/v1/loanproducts</code>
<code class="method-response">[ {
"id" : 1,
"name" : "Agricultural Loan",
"description" : "An agricultural loan given to farmers to help buy crop, stock and machinery. With an arrears tolerance setting of 1,000 CFA, loans are not marked as 'in arrears' or 'in bad standing' if the amount outstanding is less than this. Interest rate is described using monthly percentage rate (MPR) even though the loan typically lasts a year and requires one repayment (typically at time when farmer sells crop)",
"principal" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 100000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "100000 CFA"
},
"inArrearsTolerance" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 1000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "1000 CFA"
},
"numberOfRepayments" : 1,
"repaymentEvery" : 12,
"interestRatePerPeriod" : 1.750000,
"annualInterestRate" : 21.000000,
"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"
},
"createdOn" : 1334232874000,
"lastModifedOn" : 1334232874000
}, {
"id" : 2,
"name" : "Brunei Loan",
"description" : null,
"principal" : {
"currencyCode" : "BND",
"digitsAfterDecimal" : 2,
"amount" : 76000.00,
"defaultName" : "Brunei Dollar",
"nameCode" : "currency.BND",
"displaySymbol" : "BND",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "76000.00 BND"
},
"inArrearsTolerance" : {
"currencyCode" : "BND",
"digitsAfterDecimal" : 2,
"amount" : 50.00,
"defaultName" : "Brunei Dollar",
"nameCode" : "currency.BND",
"displaySymbol" : "BND",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "50.00 BND"
},
"numberOfRepayments" : 10,
"repaymentEvery" : 1,
"interestRatePerPeriod" : 6.000000,
"annualInterestRate" : 72.000000,
"repaymentFrequencyType" : {
"id" : 1,
"code" : "repaymentFrequency.periodFrequencyType.weeks",
"value" : "Weeks"
},
"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"
},
"createdOn" : 1334513601000,
"lastModifedOn" : 1334513601000
}...]
</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://Domain Name/api/v1/loanproducts/template</code>
<code class="method-response">{
"principal" : {
"currencyCode" : "KES",
"digitsAfterDecimal" : 2,
"amount" : 0.00,
"defaultName" : "Kenyan Shilling",
"nameCode" : "currency.KES",
"displaySymbol" : "KSh",
"zero" : true,
"greaterThanZero" : false,
"displaySymbolValue" : "0.00 KSh"
},
"inArrearsTolerance" : {
"currencyCode" : "KES",
"digitsAfterDecimal" : 2,
"amount" : 0.00,
"defaultName" : "Kenyan Shilling",
"nameCode" : "currency.KES",
"displaySymbol" : "KSh",
"zero" : true,
"greaterThanZero" : false,
"displaySymbolValue" : "0.00 KSh"
},
"interestRatePerPeriod" : 0,
"annualInterestRate" : 0,
"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"
},
"currencyOptions" : [ {
"code" : "KES",
"name" : "Kenyan Shilling",
"decimalPlaces" : 2,
"displaySymbol" : "KSh",
"nameCode" : "currency.KES",
"displayLabel" : "Kenyan Shilling (KSh)"
}, {
"code" : "BND",
"name" : "Brunei Dollar",
"decimalPlaces" : 2,
"displaySymbol" : "BND",
"nameCode" : "currency.BND",
"displayLabel" : "Brunei Dollar (BND)"
}, {
"code" : "LBP",
"name" : "Lebanese Pound",
"decimalPlaces" : 2,
"displaySymbol" : "L£",
"nameCode" : "currency.LBP",
"displayLabel" : "Lebanese Pound (L£)"
}, {
"code" : "GHC",
"name" : "Ghana Cedi",
"decimalPlaces" : 2,
"displaySymbol" : "GHC",
"nameCode" : "currency.GHC",
"displayLabel" : "Ghana Cedi (GHC)"
}, {
"code" : "USD",
"name" : "US Dollar",
"decimalPlaces" : 2,
"displaySymbol" : "$",
"nameCode" : "currency.USD",
"displayLabel" : "US Dollar ($)"
}, {
"code" : "XOF",
"name" : "CFA Franc BCEAO",
"decimalPlaces" : 0,
"displaySymbol" : "CFA",
"nameCode" : "currency.XOF",
"displayLabel" : "CFA Franc BCEAO (CFA)"
} ],
"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"
} ],
"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"
} ]
}
</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://Domain Name/api/v1/loanproducts/{productId}</code>
<code class="method-response">{
"id" : 1,
"name" : "Agricultural Loan",
"description" : "An agricultural loan given to farmers to help buy crop, stock and machinery. With an arrears tolerance setting of 1,000 CFA, loans are not marked as 'in arrears' or 'in bad standing' if the amount outstanding is less than this. Interest rate is described using monthly percentage rate (MPR) even though the loan typically lasts a year and requires one repayment (typically at time when farmer sells crop)",
"principal" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 100000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "100000 CFA"
},
"inArrearsTolerance" : {
"currencyCode" : "XOF",
"digitsAfterDecimal" : 0,
"amount" : 1000,
"defaultName" : "CFA Franc BCEAO",
"nameCode" : "currency.XOF",
"displaySymbol" : "CFA",
"zero" : false,
"greaterThanZero" : true,
"displaySymbolValue" : "1000 CFA"
},
"numberOfRepayments" : 1,
"repaymentEvery" : 12,
"interestRatePerPeriod" : 1.750000,
"annualInterestRate" : 21.000000,
"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"
},
"createdOn" : 1334232874000,
"lastModifedOn" : 1334232874000
}
</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>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>name, currencyCode, digitsAfterDecimal, principal, inArrearsTolerance, repaymentFrequencyType, repaymentEvery,
numberOfRepayments, interestRatePerPeriod, interestRateFrequencyType, amortizationType,
interestType, interestCalculationPeriodType</td></tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/loanproducts</code>
<code class="method-request">POST loanproducts
Content-Type: application/json
Request Body:
{
"name": "A new loan product for me",
"description": "A description not exceeding 500 characters.",
"currencyCode": "USD",
"digitsAfterDecimal": "2",
"locale": "en_GB",
"principal": "100,000.00",
"inArrearsTolerance": "1,000.00",
"repaymentFrequencyType": 2,
"repaymentEvery": "1",
"numberOfRepayments": "12",
"interestRatePerPeriod": "1.75",
"interestRateFrequencyType": 2,
"amortizationType": 1,
"interestType": 0,
"interestCalculationPeriodType": 1
}
</code>
<code class="method-response">{
"entityId": 9
}
</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">POST https://Domain Name/api/v1/loanproducts/{loanId}</code>
<code class="method-request">POST loanproducts/1
Content-Type: application/json
Request Body:
{
"locale": "en_GB",
"principal": "100,000.00",
"inArrearsTolerance": "5,000.00"
}
</code>
<code class="method-response">{
"entityId": 1
}
</code>
</div>
</div>
<!-- end of loan products 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>Configuration</h3>
<p>Application related configuration. For example, selecting 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>configurations/currency</div>
<br><br>
<div class=apiClick>configurations/currency?fields=selectedCurrencyOptions</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/configurations/currency</code>
<code class="method-response">{
"selectedCurrencyOptions" : [ {
"code" : "XOF",
"name" : "CFA Franc BCEAO",
"decimalPlaces" : 0,
"displaySymbol" : "CFA",
"nameCode" : "currency.XOF",
"displayLabel" : "CFA Franc BCEAO (CFA)"
}, {
"code" : "ETB",
"name" : "Ethiopian Birr",
"decimalPlaces" : 2,
"displaySymbol" : null,
"nameCode" : "currency.ETB",
"displayLabel" : "Ethiopian Birr [ETB]"
} ],
"currencyOptions" : [ {
"code" : "AED",
"name" : "UAE Dirham",
"decimalPlaces" : 2,
"displaySymbol" : null,
"nameCode" : "currency.AED",
"displayLabel" : "UAE Dirham [AED]"
}, {
"code" : "AFN",
"name" : "Afghanistan Afghani",
"decimalPlaces" : 2,
"displaySymbol" : null,
"nameCode" : "currency.AFN",
"displayLabel" : "Afghanistan Afghani [AFN]"
}, ...
]
}
</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://Domain Name/api/v1/configurations/currency</code>
<code class="method-request">PUT configurations/currency
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>
<!-- 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 Mifos X 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 Mifos X Reference App uses a JQuery plugin 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_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 Mifos X 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 Mifos X 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://Domain Name/api/v1/datatables</code>
<code class="method-response">[
{
"applicationTableName": "m_client",
"registeredTableName": "Additional Client Fields Data"
},
{
"applicationTableName": "m_client",
"registeredTableName": "Extra Family Details Data"
},
{
"applicationTableName": "m_loan",
"registeredTableName": "Additional Loan Fields Data"
}
]
</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 Mifos X Core application table. This allows the data table to be maintained through the API.
</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/datatables/register/{datatable}/{apptable}</code>
<code class="method-request">POST datatables/register/New Table/m_client
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">{
"entityId": null
}
</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://Domain Name/api/v1/datatables/deregister/{datatable}</code>
<code class="method-request">POST datatables/register/New Table
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">{
"entityId": null
}
</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://Domain Name/api/v1/datatables/{datatable}/{apptableId}</code>
<code class="method-request">POST datatables/Additional Client Fields Data/1
Content-Type: application/json
Request Body:
{
"Business Description": "Livestock sales",
Comment: "First comment\nmade",
Education_cv: "Trade",
Gender_cd: "21",
"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">{
"entityId": 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</span></dd>
<dd>If 'true' a Generic Result Set JSON format is returned.
This format is used by the default data tables UI functionality.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>datatables/Additional Client Fields Data/1</div>
<br><br>
<div class=apiClick>datatables/Extra Family Details Data/1?order=`Date of Birth` desc</div>
<br><br>
<div class=apiClick>datatables/Additional Client Fields Data/1?genericResultSet=true</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/datatables/{datatable}/{apptableId}</code>
<code class="method-response">[
{"client_id": 1,
"Business Description": "Livestock sales",
"Years in Business": 5,
"Gender_cd": "21",
"Education_cv": "Trade",
"Next Visit": [2012, 10, 1],
"Highest Rate Paid": 8.500000,
"Comment": "First comment
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://Domain Name/api/v1/datatables/{datatable}/{apptableId}</code>
<code class="method-request">PUT datatables/Additional Client Fields Data/1
Content-Type: application/json
Request Body:
{
"Business Description": "Livestock sales updated",
Comment: "First comment\nmade",
Education_cv: "Trade",
Gender_cd: "21",
"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">{
"entityId": 1
}
</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://Domain Name/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">{
"entityId": 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://Domain Name/api/v1/datatables/{datatable}/{apptableId}</code>
<code class="method-request">DELETE datatables/Additional Client Fields Data/1
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">{
"entityId": 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 Data Table (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://Domain Name/api/v1/datatables/{datatable}/{apptableId}/{datatableId}</code>
<code class="method-request">DELETE datatables/Extra Family Details Data/1/2
Content-Type: application/json
Request Body:
{
}
</code>
<code class="method-response">{
"entityId": 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>
The reports resource allows you to run and receive output from pre-defined Mifos X reports.
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 Mifos X Individual Lending client application uses a JQuery plugin called stretchyreporting which, itself, uses this reports resource to provide a pretty flexible reporting User Interface (UI).
</p>
</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. If a report has more than one parameter it will be listed the same number of times as it has parameters.
</p>
<h5>Arguments</h5>
<dl class="argument-list">
<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.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>reports</div>
<br><br>
<div class=apiClick>reports?exportCSV=true</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/reports</code>
<code class="method-response">{
"columnHeaders" : [ {
"columnName" : "report_id",
"columnType" : "INT",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "report_name",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "report_type",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "report_subtype",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "report_category",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "parameter_id",
"columnType" : "INT",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "report_parameter_name",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "parameter_name",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
} ],
"data" : [ {
"row" : [ "29", "Client Listing", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "42", "Client Listing - Additional and Unlikely", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "30", "Client Loans Listing", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "43", "Client Loans Listing - Additional", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "41", "Clients by Surname (a bit silly)", "Chart", "Pie", null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "39", "Loan Disbursals in Previous Year", "Chart", "Bar", null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "39", "Loan Disbursals in Previous Year", "Chart", "Bar", null, "7", null, "currencyIdSelectOne" ]
}, {
"row" : [ "40", "Loan Repayments in Previous Year", "Chart", "Bar", null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "40", "Loan Repayments in Previous Year", "Chart", "Bar", null, "7", null, "currencyIdSelectOne" ]
}, {
"row" : [ "34", "Loans - Active Loans Portfolio Status", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "34", "Loans - Active Loans Portfolio Status", "Table", null, null, "6", null, "currencyIdSelectAll" ]
}, {
"row" : [ "31", "Loans Awaiting Disbursal", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "35", "Portfolio at Risk", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "35", "Portfolio at Risk", "Table", null, null, "6", null, "currencyIdSelectAll" ]
}, {
"row" : [ "32", "Upcoming Repayments", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "32", "Upcoming Repayments", "Table", null, null, "6", null, "currencyIdSelectAll" ]
}, {
"row" : [ "38", "Upcoming Repayments Summary By Month, Currency and Loan Risk", "Table", null, null, "5", null, "selectOfficeId" ]
}, {
"row" : [ "38", "Upcoming Repayments Summary By Month, Currency and Loan Risk", "Table", null, null, "6", null, "currencyIdSelectAll" ]
} ]
}
</code>
</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>
Runs a report and returns the report output.
</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>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, CSV and PDF for html, Excel, CSV and PDF formats respectively.</dd>
<dd>Only applies to Pentaho reports.</dd>
</dl>
<p>Example Requests: </p>
<div class=apiClick>reports/Client%20Listing?R_officeId=1</div>
<br><br>
<div class=apiClick>reports/Client%20Listing?R_officeId=1&exportCSV=true</div>
<br><br>
<div class=apiClick>reports/selectOfficeId?R_officeId=1&ampparameterType=true</div>
<br><br>
<div class=apiClick>reports/selectOfficeId?R_officeId=1&ampparameterType=true&exportCSV=true</div>
<br><br>
<div class=apiClick>reports/Client Listing (Pentaho)?output-type=HTML&R_officeId=1</div>
<br><br>
<div class=apiClick>reports/Client Listing (Pentaho)?output-type=XLS&R_officeId=1</div>
<br><br>
<div class=apiClick>reports/Client Listing (Pentaho)?output-type=CSV&R_officeId=1</div>
<br><br>
<div class=apiClick>reports/Client Listing (Pentaho)?output-type=PDF&R_officeId=1</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/reports/{reportName}</code>
<code class="method-response">{
"columnHeaders" : [ {
"columnName" : "Office/Branch",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "Name",
"columnType" : "VARCHAR",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
}, {
"columnName" : "Joining Date",
"columnType" : "DATE",
"columnLength" : null,
"columnDisplayType" : null,
"columnValues" : [ ]
} ],
"data" : [ {
"row" : [ "Demo MFI Head Office", "O'Meara, Patrick", "2009-01-04" ]
}, {
"row" : [ "Demo MFI Head Office", "O'Meara, Dennis", "2009-01-04" ]
}, {
"row" : [ "Demo MFI Head Office", "Smith, John", "2009-01-11" ]
}, {
"row" : [ "Demo MFI Head Office", "O'Meara, Jimmy", "2009-01-11" ]
}, {
"row" : [ "Demo MFI Head Office", "Sunnyville vegetable growers Ltd", "2009-01-24" ]
}, {
"row" : [ "Demo MFI Head Office", "Traoré, Kalilou", "2009-02-04" ]
}, {
"row" : [ "Demo MFI Head Office", "Koné, Sidi", "2009-02-11" ]
}, {
"row" : [ "Demo MFI Head Office", "Yattabaré, Moustapha", "2009-02-18" ]
}, {
"row" : [ "Demo MFI Head Office", "Mali fruit sales ltd.", "2009-02-18" ]
}, {
"row" : [ "Demo MFI Head Office", "Djenne co-op group", "2009-02-25" ]
}, {
"row" : [ "Demo MFI Head Office", "test, test", "2012-04-19" ]
}, {
"row" : [ "Demo MFI Head Office", "Ziffle, Fred", "2012-04-21" ]
}, {
"row" : [ "Demo MFI Head Office", "omara, safik", "2012-04-24" ]
}, {
"row" : [ "Demo MFI Head Office", "HF Test", "2012-04-24" ]
}, {
"row" : [ "Demo MFI Head Office", "HF Test 2", "2012-04-24" ]
}, {
"row" : [ "Demo MFI Head Office", "Kumar, Shiva", "2011-10-01" ]
}, {
"row" : [ "Demo MFI Head Office", "Yton, Petra", "2006-06-09" ]
}, {
"row" : [ "Demo MFI Head Office", "Yton, Petra", "2006-06-09" ]
}, {
"row" : [ "sub branch 1", "Lee, Jacques", "2012-04-03" ]
}, {
"row" : [ "sub branch 1", "Asare-Frimpong, Patrick", "2012-04-18" ]
}, {
"row" : [ "sub branch 2", "t, test", "2012-04-18" ]
}, {
"row" : [ "Majmoua", "client, firstMajmoua", "2011-12-01" ]
}, {
"row" : [ "Intrasoft Technologies", "Said, Zayyad", "2012-04-02" ]
}, {
"row" : [ "Hugo technologies", "typical individual lending client", "2010-06-02" ]
} ]
}
</code>
</div>
</div>
<!-- start of authentication api docs -->
<a id="authentication" name="authentication" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h3>Authentication</h3>
<p>An API capability that allows client applications to verify authentication details.</p>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td><div class="mifosXHeading2">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="authentication_permissions" name="authentication_permissions" 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 of permissions allowed.</p>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/authentication?username={username}&password={password}</code>
<code class="method-request">POST authentication?username=super1&password=demo
Content-Type: application/json
No Request Body
</code>
<code class="method-response">{
"username": "super1",
"userId": 2,
"base64EncodedAuthenticationKey": "c3VwZXIxOmRlbW8=",
"authenticated": true,
"permissions": [
"USER_ADMINISTRATION_SUPER_USER_ROLE",
"REPORTING_SUPER_USER_ROLE",
"PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE",
"ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
]
}
</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 user administration.</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://Domain Name/api/v1/users</code>
<code class="method-response">[ {
"id" : 6,
"officeId" : 1,
"officeName" : "change super user",
"username" : "committee1",
"firstname" : "Committee",
"lastname" : "Member",
"email" : "fake@email.com"
}, {
"id" : 5,
"officeId" : 1,
"officeName" : "change super user",
"username" : "dataentry1",
"firstname" : "Data Entry",
"lastname" : "User",
"email" : "fake@email.com"
}...]
</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://Domain Name/api/v1/users/template</code>
<code class="method-response">{
"allowedOffices" : [ {
"id" : 1,
"name" : "Demo MFI Head Office"
}, {
"id" : 2,
"name" : "sub branch 1"
}, {
"id" : 8,
"name" : "moi aussi"
}, {
"id" : 3,
"name" : "sub branch 2"
}, {
"id" : 4,
"name" : "sub branch 3"
}],
"availableRoles" : [ {
"id" : 1,
"name" : "Super user",
"description" : "This role provides all application permissions.",
"availablePermissions" : [ ],
"selectedPermissions" : [ ]
}, {
"id" : 2,
"name" : "Field officer",
"description" : "A field officer role allows the user to add client and loans and view reports but nothing else.",
"availablePermissions" : [ ],
"selectedPermissions" : [ ]
}, {
"id" : 3,
"name" : "Data Entry (Portfolio only)",
"description" : "This role allows a user full permissions around client and loan functionality but nothing else.",
"availablePermissions" : [ ],
"selectedPermissions" : [ ]
}, {
"id" : 4,
"name" : "Credit Committe Member",
"description" : "This role allows a user to approve reject or withdraw loans (with reporting).",
"availablePermissions" : [ ],
"selectedPermissions" : [ ]
}, {
"id" : 5,
"name" : "Manager",
"description" : "This role allows a manager to do anything related to portfolio management and also view all reports.",
"availablePermissions" : [ ],
"selectedPermissions" : [ ]
} ]
}
</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://Domain Name/api/v1/users/1</code>
<code class="method-response">{
"id" : 1,
"officeId" : 1,
"officeName" : "Demo MFI Head Office",
"username" : "mifos",
"firstname" : "App",
"lastname" : "Administrator",
"email" : "demomfi@mifos.org",
"selectedRoles" : [ {
"id" : 1,
"name" : "Super user",
"description" : "This role provides all application permissions.",
"availablePermissions" : [ ],
"selectedPermissions" : [ {
"id" : 1,
"name" : "User administration ALL",
"description" : "An application user will have permission to execute all tasks related to user administration.",
"code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
}, {
"id" : 4,
"name" : "Reporting ALL",
"description" : "An application user will have permission to execute and view all reports.",
"code" : "REPORTING_SUPER_USER_ROLE"
}, {
"id" : 3,
"name" : "Portfolio management ALL",
"description" : "An application user will have permission to execute all tasks related to portfolio management.",
"code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
}, {
"id" : 2,
"name" : "Organisation adminsitration ALL",
"description" : "An application user will have permission to execute all tasks related to organisation administration.",
"code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
} ]
} ]
}
</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 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="mifosXHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>username, firstname, lastname, email, officeId, roles</td></tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/api/v1/users</code>
<code class="method-request">POST users
Content-Type: application/json
Request body:
{
"username": "Another New User zll",
"firstname": "Test",
"lastname": "User",
"email": "whatever@mifos.org",
"officeId": 1,
"roles": [2,3]
}
</code>
<code class="method-response">
{
"entityId": 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://Domain Name/api/v1/users/{userId)</code>
<code class="method-request">PUT users/3
Content-Type: application/json
Request body:
{
"firstname": "Test",
"roles": [2],
"password": "window75",
"repeatPassword": "window75"
}
</code>
<code class="method-response">
{
"entityId": 3
}
</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://Domain Name/api/v1/users/{userId}</code>
<code class="method-request">DELETE users/20
Content-Type: application/json
No Request Body
</code>
<code class="method-response">{
"entityId": 20
}
</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://Domain Name/api/v1/roles</code>
<code class="method-response">[ {
"id" : 1,
"name" : "Super user",
"description" : "This role provides all application permissions."
}, {
"id" : 2,
"name" : "Field officer",
"description" : "A field officer role allows the user to add client and loans and view reports but nothing else."
}, {
"id" : 3,
"name" : "Data Entry (Portfolio only)",
"description" : "This role allows a user full permissions around client and loan functionality but nothing else."
}, {
"id" : 4,
"name" : "Credit Committe Member",
"description" : "This role allows a user to approve reject or withdraw loans (with reporting)."
}, {
"id" : 5,
"name" : "Manager",
"description" : "This role allows a manager to do anything related to portfolio management and also view all reports."
} ]
</code>
</div>
</div>
<a id="roles_template" name="roles_template" class="old-syle-anchor">&nbsp;</a>
<div class="method-section">
<div class="method-description">
<h4>Retrieve Role 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>roles/template</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/roles/template</code>
<code class="method-response">{
"availablePermissions" : [ {
"id" : 1,
"name" : "User administration ALL",
"description" : "An application user will have permission to execute all tasks related to user administration.",
"code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
}, {
"id" : 2,
"name" : "Organisation adminsitration ALL",
"description" : "An application user will have permission to execute all tasks related to organisation administration.",
"code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
}, {
"id" : 3,
"name" : "Portfolio management ALL",
"description" : "An application user will have permission to execute all tasks related to portfolio management.",
"code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
}, {
"id" : 4,
"name" : "Reporting ALL",
"description" : "An application user will have permission to execute and view all reports.",
"code" : "REPORTING_SUPER_USER_ROLE"
}...]
}
</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?template=true</div>
<br><br>
<div class=apiClick>roles/1?fields=name,selectedPermissions</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/roles/{roleId}</code>
<code class="method-response">{
"id" : 1,
"name" : "Super user",
"description" : "This role provides all application permissions.",
"selectedPermissions" : [ {
"id" : 1,
"name" : "User administration ALL",
"description" : "An application user will have permission to execute all tasks related to user administration.",
"code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
}, {
"id" : 4,
"name" : "Reporting ALL",
"description" : "An application user will have permission to execute and view all reports.",
"code" : "REPORTING_SUPER_USER_ROLE"
}, {
"id" : 3,
"name" : "Portfolio management ALL",
"description" : "An application user will have permission to execute all tasks related to portfolio management.",
"code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
}, {
"id" : 2,
"name" : "Organisation adminsitration ALL",
"description" : "An application user will have permission to execute all tasks related to organisation administration.",
"code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
} ]
}
</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="mifosXHeading2">Mandatory Fields</div></td></tr>
<tr class=alt><td>name, description, permissions</td></tr>
</table>
</div>
<div class="method-example">
<code class="method-declaration">POST https://Domain Name/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.",
"permissions": [1, 2, 3]
}
</code>
<code class="method-response">{
"entityId": 8
}
</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://Domain Name/api/v1/roles/{roleId}</code>
<code class="method-request">PUT roles/8
Content-Type: application/json
Request body:
{
"name": "Updated Role Name",
"permissions": [1]
}
</code>
<code class="method-response">{
"entityId": 8
}
</code>
</div>
</div>
<!-- start of roles 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>
</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>
<p>Example Requests: </p>
<div class=apiClick>permissions</div>
<br><br>
<div class=apiClick>permissions?fields=id,code</div>
</div>
<div class="method-example">
<code class="method-declaration">GET https://Domain Name/api/v1/permissions</code>
<code class="method-response">[ {
"id" : 1,
"name" : "User administration ALL",
"description" : "An application user will have permission to execute all tasks related to user administration.",
"code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
}, {
"id" : 2,
"name" : "Organisation adminsitration ALL",
"description" : "An application user will have permission to execute all tasks related to organisation administration.",
"code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
}, {
"id" : 3,
"name" : "Portfolio management ALL",
"description" : "An application user will have permission to execute all tasks related to portfolio management.",
"code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
}, {
"id" : 4,
"name" : "Reporting ALL",
"description" : "An application user will have permission to execute and view all reports.",
"code" : "REPORTING_SUPER_USER_ROLE"
}, ... ]
</code>
</div>
</div>
</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</h4></td><td><h4>API Endpoint:</h5></td><td><h5>https://Domain Name/api</h5></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 class="alt"><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></td></tr>
<tr class="alt"><td></td><td>clients/{clientId}/loans</td><td></td><td><a href="#clients_loansummary">Retrieve a Client's Loan Account Summary</a></td><td></td><td></td></tr>
<tr><td></td><td>clients/{clientId}/notes</td><td><a href="#clients_addnote">Add a Client Note</a></td><td><a href="#clients_notes">Retrieve a Client's Notes</a></td><td></td><td></td></tr>
<tr class="alt"><td></td><td>clients/{clientId}/notes/{noteId}</td><td></td><td><a href="#clients_retrievenote">Retrieve a Client Note</a></td><td><a href="#clients_updatenote">Update a Client Note</a></td><td></td></tr>
<tr><td><a href="#loans">LOAN</a></td><td>loans</td><td><a href="#loans_create">Create a New Loan / Submit a Loan Application</a></td><td></td><td></td><td></td></tr>
<tr class="alt"><td></td><td>loans/{loanId}</td><td><a href="#loans_approve_etc">Approve, Undo Approval, Disburse, Undo Disbursal, Reject a Loan or Withdraw a Loan Application</a></td><td><a href="#loans_retrieve">Retrieve a Loan</a></td><td></td><td><a href="#loans_delete">Delete a Loan</a></td></tr>
<tr class="alt"><td></td><td>loans/{loanId}/transactions</td><td><a href="#loans_repayment_etc">Make a Repayment / Loan Waiver</a></td><td></td><td></td><td></td></tr>
<tr><td></td><td>loans/{loanId}/transactions/{transactionId}</td><td><a href="#loans_repaymentadjust_etc">Adjust a Repayment or Waiver</a></td><td><a href="#loans_repaymentretrieve_etc">Retrieve a Repayment or Waiver Details</a></td><td></td><td></td></tr>
<tr class="alt"><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 class="alt"><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 class="alt"><td><a href="#configs">CONFIGURATION</a></td><td>configurations/currency</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="#datatables">DATA TABLE</a></td><td>datatables</td><td></td><td><a href="#datatables_list">List Data Tables</a></td><td></td><td></td></tr>
<tr class="alt"><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 class="alt"><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 class="alt"><td><a href="#reports">REPORT</a></td><td>reports</td><td></td><td><a href="#reports_list">List Reports</a></td><td></td><td></td></tr>
<tr><td></td><td>reports/{reportName}</td><td></td><td><a href="#report_run">Run a Report</a></td><td></td><td></td></tr>
<tr class="alt"><td><a href="#authentication">AUTHENTICATION</a></td><td>authentication</td><td><a href="#authentication_permissions">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 class="alt"><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 class="alt"><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><a href="#permissions">PERMISSION</a></td><td>permissions</td><td></td><td><a href="#permissions_list">List Application Permissions</a></td><td></td><td></td></tr>
</table>
<br>
<table class=matrixHeading>
<tr class="matrixHeadingBG"><td valign="top"><div class="matrixHeadingVerbs"><table><tr><td>CONVENIENCE 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 class="alt"><td>clients/template</td><td><a href="#clients_template">Retrieve Client Details Template</a></td></tr>
<tr><td>loans/template</td><td><a href="#loans_template">Retrieve Loan Details Template</a></td></tr>
<tr class="alt"><td>loans/{loanId}/transactions/template</td><td><a href="#loans_repaymenttemplate_etc">Retrieve Loan Repayment/Loan Waiver Template</a></td></tr>
<tr><td>offices/template</td><td><a href="#offices_template">Retrieve Office Details Template</a></td></tr>
<tr class="alt"><td>loanproducts/template</td><td><a href="#loanproducts_template">Retrieve Loan Product Details Template</a></td></tr>
<tr><td>users/template</td><td><a href="#users_template">Retrieve User Details Template</a></td></tr>
<tr class="alt"><td>roles/template</td><td><a href="#roles_template">Retrieve Role Details Template</a></td></tr>
</table>
</div>
</div>
<script>
$(document).ready(function() {
$('.apiClick').bind('click', function() {
clickAPILink($(this).text());
});
baseURL = getBaseURL(window.location.href);
});
</script>
</body>
</html>