# Welcome

Welcome to Udara360 API Developer Documentation

## Introduction

Udara360 Core Banking is a modern solution to streamline banking operations and improve customer engagement. It is built on a microservice architecture, providing strong scalability, user-friendly interfaces, and valuable business insights.

#### Our Key Features

<details>

<summary><strong>Scalability</strong></summary>

Handles high transaction volumes with ease.

</details>

<details>

<summary><strong>Ease of Use:</strong></summary>

Intuitive interfaces for both clients and developers.

</details>

<details>

<summary><strong>Flexibility</strong></summary>

Easily customisable to fit specific business needs.

</details>

<details>

<summary><strong>High Uptime</strong></summary>

Ensures minimal downtime with advanced redundancy and failover mechanisms.

</details>

<details>

<summary><strong>Efficient EOD Processing</strong></summary>

Streamlines end-of-day processes for faster reconciliation

</details>

## Benefits of Using Udara360 APIs

* **Seamless User Experience:** Provide your customers with a smooth and intuitive digital banking experience.
* **Reduced Downtime:** Minimize technical issues and ensure minimal disruptions to your services.
* **Faster Development:** Accelerate the development of your digital banking products and services.
* **Scalability:** Easily handle growing customer bases and transaction volumes.

## Core API Endpoints

<table data-card-size="large" data-view="cards"><thead><tr><th data-card-target data-type="content-ref"></th><th data-hidden></th><th data-hidden></th><th data-hidden data-type="files"></th><th data-hidden></th></tr></thead><tbody><tr><td><a href="/pages/cEHgDv7NGBquDGHeLyQ4">/pages/cEHgDv7NGBquDGHeLyQ4</a></td><td><strong>Account API</strong></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/JGCbrAoivEHnzzvCGdmA">/pages/JGCbrAoivEHnzzvCGdmA</a></td><td><strong>Publish your docs</strong></td><td>Share your docs online</td><td><a href="/files/WqTZslyWgLz3XWQj63oY">/files/WqTZslyWgLz3XWQj63oY</a></td><td></td></tr><tr><td><a href="/pages/ZXxfwYY21Yz9PCv9X7ja">/pages/ZXxfwYY21Yz9PCv9X7ja</a></td><td><strong>Create And Manage Accounts</strong></td><td></td><td><a href="/files/vxs1ER5I8VkIA0IaOqfo">/files/vxs1ER5I8VkIA0IaOqfo</a></td><td></td></tr><tr><td><a href="/pages/doM5Yer9oLWKgz5CRVPS">/pages/doM5Yer9oLWKgz5CRVPS</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/51hAaEgj3W8T4Sy3M2Ds">/pages/51hAaEgj3W8T4Sy3M2Ds</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/fICRhK3homI2vbXbQLsg">/pages/fICRhK3homI2vbXbQLsg</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/ImPksjho8aGBZClrn7FU">/pages/ImPksjho8aGBZClrn7FU</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/ZXxfwYY21Yz9PCv9X7ja">/pages/ZXxfwYY21Yz9PCv9X7ja</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/xVmD1Cf0mBaYUubphmCq">/pages/xVmD1Cf0mBaYUubphmCq</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="/pages/00Lc2xeZyO6USSNQJkl9">/pages/00Lc2xeZyO6USSNQJkl9</a></td><td></td><td></td><td></td><td></td></tr></tbody></table>


# Authentication


# Auth Access

To access all the functionality for your API Core Banking operations, you must generate an access token using the [Get Access Token](/udara360-docs-1/getting-started/authentication/accesstoken) API. This token is essential for successfully carrying out all your requests.

#### Authorisation Header <a href="#authorisation-header" id="authorisation-header"></a>

The access token will be used as a bearer token for all your API requests. The access token you generate from the /GetToken request functions as the bearer for your authentication. Place your JWT token, obtained after successful authentication, in the Authorization header of each request you send to the API.

```
curl  https://openapi.test.udara360.io/api/../v1

    -H  "Accept:  application/JSON"
    -H  "Authorization:  Bearer  {access_token}"
```


# Get Access Token

To obtain an access token for the core banking application API, users need to follow the steps outlined below:\
\
1\. **Obtain Client Credentials**: To obtain an access token, users must first acquire a "`clientID`" And "`clientSecret`" from the API provider. These credentials serve as the client's unique identifier and are used to authenticate the client with the API.\
\
2\. **Pass Credentials to `/auth` Endpoint**: Once the `clientID` and `clientSecret` are obtained, they must be included in the request to the /auth endpoint. This endpoint is responsible for authenticating the client and generating an access token.\
\
**Body**

<table><thead><tr><th width="181">Name</th><th width="180">Data Type (Length)</th><th>Description</th><th data-hidden data-type="checkbox">Required</th></tr></thead><tbody><tr><td><code>clientID</code><mark style="color:red;">*</mark></td><td>string <a data-footnote-ref href="#user-content-fn-1">(100)</a></td><td>Client ID</td><td>true</td></tr><tr><td><code>clientSecret</code><mark style="color:red;">*</mark></td><td>string <a data-footnote-ref href="#user-content-fn-1">(100)</a></td><td>Client Secret</td><td>true</td></tr></tbody></table>

Here is a request and response with a sample payload sent to the endpoint in Curl format.

**Sample API Request**

{% tabs %}
{% tab title="Curl" %}

```javascript
const message = "hello world";
curl --location -g '{{baseurl}}/api/auth/v1/authenticate' \
--header 'Content-Type: application/json' \
--data '{
  "clientId": "string",
  "clientSecret": "string"
}
```

{% endtab %}
{% endtabs %}

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "accessToken": "string",
  "tokenType": "string",
  "expirationTime": "long",//EPOCH time
  "tokenValiditySec": "long" //Token validity in Seconds
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
It is crucial to securely store and manage the client credentials and access tokens to ensure the security of the API integration.
{% endhint %}

[^1]: This is the maximum number of characters allowed.


# Idempotency

Every request that creates or modifies data on the Udara360 API must include a unique request reference in the header. This is called idempotency, and it exists to prevent the same request from being processed more than once.

## How It Works

Include a unique reference in the header of every request that creates or modifies data:

```
Request-reference: {unique_reference}
```

Replace `{unique_reference}` with a unique string you generate for each request. The maximum length is 100 characters.

## What Makes a Good Unique Reference

Your unique reference can be any combination of letters, numbers, or symbols — as long as no two requests ever share the same value. A common approach is to combine the date, time, and transaction type:

```
Request-reference: TXN-20250115-093045-TRANSFER
Request-reference: ACC-20250115-094500-CREATEACCOUNT
Request-reference: LN-20250115-110000-DISBURSE
```

## Which Requests Require This Header

Any request that uses these methods requires the idempotency header:

| Method | Requires Idempotency Header  |
| ------ | ---------------------------- |
| POST   | Yes - creates new data       |
| PUT    | Yes - modifies existing data |
| GET    | No - only reads data         |
| DELETE | Yes - removes data           |

{% hint style="info" %}
:warning:**Important:** Never reuse a request reference across different requests. Each request must have its own unique reference. Reusing references may cause legitimate requests to be rejected as duplicates.
{% endhint %}

{% hint style="info" %}
:bulb:**Tip:** Generate your unique reference on your server side, never on the client side. This ensures the reference is truly unique and cannot be tampered with.
{% endhint %}


# Environment

### **Environments**

We utilise identical API endpoints for our test and Live environments for convenient testing and development with udara360. The sole distinction lies in the URL used for API calls.

<table><thead><tr><th width="172">Environment</th><th width="282">URL</th><th>Description</th><th data-hidden>Detail</th></tr></thead><tbody><tr><td>Test Base</td><td><a href="https://openapi.test.udara360.io">https://openapi.test.udara360.io</a></td><td>Udara360 Test base url</td><td></td></tr><tr><td>Production</td><td>------------------------------------</td><td>The base URL for live deployment on udara360.<br><br><mark style="color:orange;">This is only available upon request by the developer</mark></td><td></td></tr></tbody></table>

{% hint style="info" %}
**Note**: Production access requires IP Address whitelisting
{% endhint %}


# Request Structure

## Sample Request Structure

Here's an example of how to send an API request :

**Sample Request&#x20;*****(Curl)***

<pre data-title="Curl"><code><strong>curl --location -g '{<a data-footnote-ref href="#user-content-fn-1">baseurl</a>}/api/account/<a data-footnote-ref href="#user-content-fn-2">{version}</a>/create' \
</strong>--header 'Authorization: bearer <a data-footnote-ref href="#user-content-fn-3">{token}</a>' \
--header 'request-reference: <a data-footnote-ref href="#user-content-fn-4">{unique_reference</a>}' \
--header 'Content-Type: application/json' \
--data '{
}'
</code></pre>

<table><thead><tr><th>Name</th><th width="164">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>baseurl</code><mark style="color:red;">*</mark></td><td>string</td><td>This is the base URL section for your API request, which can be in staging or production.</td></tr><tr><td><code>token</code><mark style="color:red;">*</mark></td><td>string</td><td>The token will be the access token generated from your "<a href="/pages/CyH2xJQs9yWJ1S8BYNav">get access token</a>" API.</td></tr><tr><td><code>unique_reference</code><mark style="color:red;">*</mark></td><td>string</td><td><code>unique_reference</code> is a unique reference for your API calls, used for reference purposes and to track each request in the CBA database.</td></tr><tr><td><code>version</code></td><td>string</td><td>The API version. The version is currently at <code>v1</code>.</td></tr></tbody></table>

{% hint style="warning" %}
**Note**: Every request that creates or modifies data must include a unique request reference in the header with a maximum string length of 100 characters.
{% endhint %}

## Request Header

When making an API call, including the appropriate header for a successful API request is essential. Failing to pass the header correctly will result in an error. This header is necessary to authenticate the user making the request.

| Header                | Description                                                                                                                                      |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Authorization**     | Bearer token supplied to you on request                                                                                                          |
| **Request-Reference** | When creating or modifying data, ensure that the request header contains a unique reference. The maximum length of the string is 100 characters. |

## Date Format

When using an API, make sure to use the correct date format as specified in the documentation, such as "`YYYY`-`MM`-`DD`". For example, "`2025`-`01`-`31`" is a valid date format. You can always refer to this page to confirm the required date format for your API request.

## Amount Format&#x20;

When sending a parameter to an API request, use the amount in the smallest currency unit. For example, 100 naira should be passed as 10000 kobo. Our system supports multi-currency.

{% hint style="info" %}

## Optional Fields

For optional fields, pass null as the value or exclude the field from the payload.
{% endhint %}

[^1]: This is the base URL section for your API request, which can be in staging or production.

[^2]: The version is currently at `v1`.

[^3]: The token will be the access token generated from your "get access token" API.

[^4]: `unique_reference` is a unique reference for your API calls, used for reference purposes and to track each request in the CBA database.


# Response Structure

## Sample Response Structure

For **Successful** requests : 200 OK

**Sample Response in JSON**

```json
{
  "status": true,
  "message": "string",
  "data": T
}
```

<table><thead><tr><th>Name</th><th width="164">Type</th><th>Description</th></tr></thead><tbody><tr><td><pre><code>status
</code></pre></td><td>bool</td><td>The request status</td></tr><tr><td><pre><code>message
</code></pre></td><td>string</td><td>Successful response message</td></tr><tr><td><pre><code>data
</code></pre></td><td>object (optional)</td><td>Extra information feedback. For example, a create account request will return the account number and ID</td></tr></tbody></table>

{% hint style="warning" %}
**Note**: Postings include additional information in the response. Keep in mind that not every successful "OK" message indicates that the transaction was completed. For instance, a posting request might return a 200 OK (indicating technical success), but the posting response code could also indicate an Insufficient Funds error (a technical failure).
{% endhint %}

For **Failed** requests : 4XX and 5XX

**Sample Response in JSON**

```json
{
  "errors": [
    {
      "statusCode": 0,
      "errorCode": "string",
      "errorMessage": "string"
    }
  ]
}
```

<table><thead><tr><th>Name</th><th width="164">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>errors</code></td><td>Array</td><td>This is an array of errors returned</td></tr><tr><td><code>statusCode</code></td><td>int</td><td>The http status code. For example 401, 500 etc</td></tr><tr><td><code>errorCode</code></td><td>string</td><td>custom status code.</td></tr><tr><td><code>errorMessage</code></td><td>string</td><td>The reason for the error</td></tr></tbody></table>


# HTTP Response Code

## HTTP Response Code

Udara360 relies on standard HTTP response codes to signify the success or failure of API requests. A successful request will result in an HTTP status code of 200. Refer to the response code list below if troubleshooting is required, and double-check your parameters for spelling errors to prevent issues.

| Description             | Code  |
| ----------------------- | ----- |
| Successful              | `2XX` |
| Bad request from client | `4XX` |
| System error            | `5XX` |

## Postings Response code

When using the Transaction Posting API, it's crucial to understand the meaning of the posting response codes. Below is a list of all the response codes, along with their descriptions:

| Description                  | Code |
| ---------------------------- | ---- |
| Successful                   | `00` |
| General Error                | `06` |
| Model Validation Error       | `09` |
| Invalid Amount               | `13` |
| No Record Found              | `25` |
| Duplicate Record             | `26` |
| Force Debit Not Allowed      | `28` |
| Database Update Not Executed | `29` |
| Format Error                 | `30` |
| Insufficient Balance         | `51` |
| No Check Account             | `52` |
| Transaction Permission       | `57` |
| Security Violation           | `63` |
| Cut Off In Progress          | `90` |
| Exceeds Cash Limit           | `93` |
| Fatal Error                  | `96` |


# Bank List

Below is a list of all the banks and their identifiers for reference in our Core Banking Application APIs.

| Name                                          | Identifier |
| --------------------------------------------- | ---------- |
| 3Line Card Management Limited                 | 3LC        |
| 9 Payment Service Bank (9PSB)                 | 9PSB       |
| AB Microfinance Bank                          | ABK        |
| Abbey Building Society                        | ABS        |
| Abbey Mortgage Bank                           | ABB        |
| ABC Microfinance Bank                         | ABC        |
| ABU MICROFINANCE BANK                         | ABH        |
| ABUCOOP MFB                                   | ABU        |
| Accelerex Network Limited                     | ACE        |
| Access Bank                                   | ABP        |
| Access Bank PLC (Diamond)                     | DBP        |
| Access Mobile                                 | ACM        |
| Accion Microfinance Bank                      | ACC        |
| ADA MFB                                       | ADD        |
| ADDOSSER MICROFINANCE BANK                    | ADR        |
| AELLA CREDIT                                  | AEC        |
| AG Homes Mortgage                             | AGM        |
| AG Mortgate Bank                              | AGM        |
| AJOCARD                                       | AJO        |
| Al-Barakah MFB                                | ABM        |
| Al-Hayat Microfinance Bank                    | AHY        |
| ALPHA KAPITAL MICROFINANCE BANK               | AKM        |
| Amac Microfinance Bank                        | AMA        |
| Amergy MFB                                    | AMERGY     |
| AMML MFB                                      | AML        |
| Apeks Microfinance Bank                       | APK        |
| ASO Savings & Loans Microfinance Bank         | ASO        |
| Asset Matrix MFB                              | ASTMTRX    |
| Auchi Microfinance Bank                       | AMB        |
| Baobab Microfinance Bank                      | BAO        |
| Benysta Microfinance Bank                     | BENYSTA    |
| BestStar MFB                                  | BSTSTAR    |
| Bosak Microfinance Bank                       | BOK        |
| Branch International Financial Services       | BRANCHINTL |
| Brent Mortgage Bank                           | BMK        |
| CEMCS Microfinance Bank                       | CEC        |
| Changan RTS Microfinance Bank                 | CHANGANRTS |
| CIT Microfinance Bank                         | CIM        |
| Citi Bank                                     | CTB        |
| Consistent Trust MFB (CTMFB)                  | CNSTNT     |
| Consumer Microfinance Bank                    | COMB       |
| CoreStep MicroFinance Bank                    | SCSB       |
| Coronation Merchant Bank                      | CMEB       |
| Covenant MFB                                  | CVMFB      |
| Credit Afrique Microfinance Bank              | CAQ        |
| DOT MFB                                       | DOT        |
| Eagle Flight Microfinance Bank                | EGM        |
| Eartholeum                                    | EAR        |
| e-Barcs Microfinance Bank                     | EBS        |
| Ecobank Bank                                  | ECO        |
| Ecobank Xpress Account                        | EXA        |
| Ekondo MFB                                    | EKONDO     |
| Emeralds Microfinance Bank                    | EME        |
| Empire trust MFB                              | ETMFB      |
| Enterprise Bank                               | ENB        |
| eTranzact                                     | ETR        |
| EXCEL MFB                                     | EXLLNT     |
| EYOWO                                         | EYOWO      |
| FBN Mortgages Limited                         | FBD        |
| FBNQUEST Merchant Bank                        | FBQ        |
| FCMB                                          | FCM        |
| FCMB Easy Account                             | FEA        |
| FFS Microfinance Bank                         | FFS        |
| Fidelity Bank                                 | FBP        |
| FinaTrust Microfinance Bank                   | 90111      |
| Firmus Microfinance Bank                      | FSM        |
| First Apple Limited                           | 110004     |
| First Bank                                    | FBN        |
| First Generation Mortgage Bank                | 70014      |
| First Option MFB                              | 90285      |
| First Royal MFB                               | FYB        |
| Flutterwave Technology Solutions Limited      | 110002     |
| Fortis Microfinance Bank                      | 70002      |
| FortisMobile                                  | 100016     |
| FSDH Merchant Bank                            | FSDH       |
| Fullrange Microfinance Bank                   | 90145      |
| Futminna Microfinance Bank                    | 90438      |
| Futo Microfinance Bank                        | 90158      |
| Gashua Microfinance Bank                      | 90168      |
| Gateway Mortgage Bank                         | 70009      |
| Giginya Microfinance bank                     | 90411      |
| Girei Microfinance Bank                       | 90186      |
| Globus Bank                                   | GSB        |
| Glory Microfinance Bank                       | 90278      |
| GMB Microfinance Bank                         | 90408      |
| GoMoney                                       | GOM        |
| Gowans Microfinance Bank                      | 90122      |
| GreenBank Microfinance Bank                   | 90178      |
| Greenville Microfinance Bank                  | 90269      |
| Grooming Microfinance Bank                    | GRM        |
| GTBank Plc                                    | GTB        |
| GTI Microfinance Bank                         | 90385      |
| GTMobile                                      | GTE        |
| Hackman Microfinance Bank                     | HKM        |
| Haggai Mortgage Bank Limited                  | HAI        |
| Hasal Microfinance Bank                       | 90121      |
| Headway Microfinance Bank                     | 90363      |
| Hedonmark                                     | HED        |
| Highland Microfinance Bank                    | 90418      |
| HighStreet Microfinance Bank                  | 90175      |
| HopePSB                                       | 120002     |
| Ibeto Microfinance Bank                       | 90439      |
| IBILE Microfinance Bank                       | IBM        |
| Ikenne Microfinance Bank                      | 90324      |
| Ikire Microfinance Bank                       | 90279      |
| Ilisan Microfinance Bank                      | 90370      |
| Ilorin Microfinance Bank                      | 90350      |
| Imo State Microfinance Bank                   | IMS        |
| Imperial Homes Mortgage Bank                  | IHM        |
| Infinity Microfinance Bank                    | 90157      |
| Infinity Trust Mortgage Bank                  | 70016      |
| Innovectives Kesh                             | 100029     |
| Insight Microfinance Bank                     | 90434      |
| Intellifin                                    | INL        |
| Interland Microfinance Bank                   | 90386      |
| Interswitch Limited                           | 110003     |
| IRL Microfinance Bank                         | 90149      |
| Isaleoyo Microfinance Bank                    | 90377      |
| IZON Microfinance Bank                        | 90421      |
| JAIZ Bank                                     | JAIZ       |
| Jubilee-Life Mortgage Bank                    | 90003      |
| KadPoly Microfinance Bank                     | 90320      |
| KCMB Microfinance Bank                        | 90191      |
| Kegow                                         | KEG        |
| KEGOW(CHAMSMOBILE)                            | KEGOW      |
| Keystone Bank                                 | KSB        |
| Kontagora Microfinance Bank                   | 90299      |
| Kredimoney Microfinance Bank                  | KREDIM     |
| Kuda Microfinance Bank                        | KDB        |
| Lagos Building Investment Company             | 70012      |
| LandGold Microfinance Bank                    | 90422      |
| Lapo Microfinance Bank                        | 90177      |
| Lavender Microfinance Bank                    | 90271      |
| Legend Microfinance Bank                      | 90372      |
| Letshego microfinance Bank                    | 90420      |
| Links MFB                                     | LINKS      |
| Living Trust Morgage Bank Plc                 | LIVINTMG   |
| LOTUS BANK                                    | LTB        |
| Lovonus Microfinance Bank                     | LVU        |
| M36                                           | 100035     |
| Mainland Microfinance Bank                    | 90323      |
| Mainstreet Microfinance Bank                  | 90171      |
| Malachy Microfinance Bank                     | 90174      |
| Manny Microfinance bank                       | MANNY      |
| Maritime Microfinance Bank                    | 90410      |
| MayFair Microfinance Bank                     | 90321      |
| MayFresh Mortgage Bank                        | MAY        |
| Megapraise Microfinance Bank                  | 90280      |
| Mercury MFB                                   | MERCURY    |
| Midland Microfinance Bank                     | 90192      |
| Mint-Finex MFB                                | MINTFINEX  |
| MintFinex Microfinance Bank                   | 90281      |
| Mkudi                                         | MKU        |
| Molusi Microfinance Bank                      | MSM        |
| Money Trust Microfinance Bank                 | 90129      |
| MoneyBox                                      | MNX        |
| Moniepoint MFB                                | MONIEPT    |
| Mutual Benefits Microfinance Bank             | MBM        |
| Mutual Trust Microfinance Bank                | MTM        |
| Nagarta Microfinance Bank                     | NGM        |
| Navy Microfinance Bank                        | 90263      |
| Ndiorah Microfinance Bank                     | 90128      |
| Neptune Microfinance Bank                     | 90329      |
| NET MFB                                       | NET        |
| New Dawn Microfinance Bank                    | NDB        |
| New Golden Pastures Microfinance Bank         | 90378      |
| New Prudential Bank                           | 90108      |
| NIP Virtual Bank                              | 999999     |
| NIRSAL Microfinance Bank                      | NSM        |
| Nnew Women Microfinance Bank                  | 90283      |
| Nova Merchant Bank                            | NOV        |
| NPF MicroFinance Bank                         | NPF        |
| Nuture Microfinance Bank                      | 90364      |
| Nwannegadi Microfinance Bank                  | 90399      |
| Oakland Microfinace Bank                      | 90437      |
| Oche Microfinance Bank                        | 90333      |
| Ohafia Microfinance Bank                      | OHF        |
| Okpoga Microfinance Bank                      | 90161      |
| Olabisi Onabanjo University Microfinance Bank | 90272      |
| Olowolagba Microfinance Bank                  | 90404      |
| Omiye Microfinance Bank                       | 90295      |
| Omoluabi savings and loans                    | 70007      |
| One Finance                                   | 100026     |
| OPAY NIGERIA                                  | OPA        |
| Optimus Bank                                  | OPTMUS     |
| Oscotech Microfinance Bank                    | 90396      |
| Ospoly Microfinance Bank                      | 90456      |
| Paga                                          | PGA        |
| Page Financials                               | 70008      |
| PalmPay Limited                               | PLM        |
| Parallex Bank                                 | PRLLX      |
| Parkway-ReadyCash                             | 100003     |
| Parralex Microfinance bank                    | 90004      |
| PatrickGold Microfinance Bank                 | 90317      |
| PayAttitude Online                            | PAY        |
| Paycom(Opay)                                  | OPY        |
| Paystack Payment Limited                      | 110006     |
| Peace Microfinance Bank                       | 90402      |
| PecanTrust Microfinance Bank                  | 90137      |
| Pennywise Microfinance Bank                   | 90196      |
| Personal Trust Microfinance Bank              | PTB        |
| Petra Microfinance Bank                       | 90165      |
| Pillar Microfinance Bank                      | 90289      |
| Platinum Mortgage Bank                        | PMK        |
| POLARIS BANK                                  | SKY        |
| Polyunwana Microfinance Bank                  | PON        |
| Preeminent Microfinance Bank                  | 90412      |
| Premium Trust Bank                            | PRMTRST    |
| Prestige Microfinance Bank                    | 90274      |
| Providus Bank                                 | UMB        |
| Purplemoney Microfinance Bank                 | 90303      |
| Quickfund Microfinance Bank                   | 90261      |
| Rand Merchant Bank                            | RAN        |
| Refuge Mortgage Bank                          | 70011      |
| Regent Microfinance Bank                      | 90125      |
| Rehoboth Microfinance Bank                    | RHOB       |
| Reliance Microfinance Bank                    | 90173      |
| RenMoney Microfinance Bank                    | 90198      |
| Rephidim Microfinance Bank                    | 90322      |
| Richway Microfinance Bank                     | 90132      |
| Rolez Microfinance Bank                       | 90405      |
| Royal Exchange Microfinance Bank              | 90138      |
| Safe Haven MFB                                | SHB        |
| SafeTrust                                     | SSL        |
| Sagamu Microfinance Bank                      | SGM        |
| Seed Capital Microfinance Bank                | 90112      |
| Seedvest Microfinance Bank                    | SMFB       |
| Shepherd Trust Microfinance Bank              | 90401      |
| SLS MFB                                       | SLS        |
| Solid Allianze MFB                            | SLDALZ     |
| Sparkle                                       | 90325      |
| Spectrum MFB                                  | SPECTRUM   |
| Spectrum Microfinance Bank                    | 90436      |
| Stanbic IBTC @ease wallet                     | 100007     |
| StanbicIBTC Bank                              | IBT        |
| StandardChartered                             | SCB        |
| Stanford Microfinance Bak                     | 90162      |
| STB Mortgage Bank                             | 70022      |
| Stellas Microfinance Bank                     | 90262      |
| Sterling Bank                                 | SBP        |
| Stockcorp Microfinance Bank                   | 90340      |
| Sulspap Microfinance Bank                     | 90305      |
| Suntrust Bank                                 | SUN        |
| Support MFB                                   | SUPP       |
| TagPay                                        | TAG        |
| TAJ Bank                                      | TAJ        |
| Tangerine Money                               | TANGERINE  |
| TCF MFB                                       | TCF        |
| Teamapt Limited                               | TEP        |
| TeasyMobile                                   | TSM        |
| Think Finance Microfinance Bank               | 90373      |
| Titan Trust Bank                              | TTB        |
| Trident Microfinance Bank                     | 90146      |
| Trust Microfinance Bank                       | 90327      |
| Trustbond Mortgage Bank                       | 90005      |
| Trustfund Microfinance Bank                   | 90276      |
| U & C Microfinance Bank                       | 90315      |
| UNAAB Microfinance Bank                       | 90331      |
| Uniben Microfinance Bank                      | 90266      |
| Unical Microfinance Bank                      | 90193      |
| Uniilorin Microfinance Bank                   | 90341      |
| Unilag Microfinance Bank                      | 90452      |
| Union Bank                                    | UBN        |
| United Bank for Africa                        | UBA        |
| Unity Bank                                    | UBP        |
| UNN MFB                                       | UNA        |
| UZONDU MICROFINANCE BANK                      | UZONDU     |
| Verite Microfinance Bank                      | 90123      |
| VFD MFB                                       | VDM        |
| Virtue Microfinance Bank                      | 90150      |
| Visa Microfinance Bank                        | 90139      |
| VTNetworks                                    | 100012     |
| Waya Microfinance Bank                        | WAYA       |
| Wema Bank                                     | WMA        |
| Wetland Microfinance Bank                     | WTD        |
| Winview Microfinance Bank                     | 90419      |
| Winview Microfinance Bank                     | RYM        |
| Xslnce Microfinance Bank                      | 90124      |
| Yes Microfinance Bank                         | YMF        |
| Yobe Microfinance Bank                        | 90252      |
| ZENITH BANK PLC                               | ZIB        |
| Zenith Eazy Wallet                            | 100034     |
| ZenithMobile                                  |            |


# Amount Format

All amounts passed to the Udara360 API must be provided in their base currency unit. For Nigerian Naira, the base currency unit is **kobo,** not naira.

This applies to every endpoint that accepts or returns an amount value.

#### How It Works

Nigeria's currency has two units:

* **Naira:** the main unit (like how you'd write it on a receipt)
* **Kobo:** the smallest unit. There are 100 kobo in 1 naira.

The Udara360 API works exclusively in **kobo.** This means before passing any amount in a request, you must convert it from naira to kobo by multiplying by 100.

#### Conversion Formula

```
Amount in Kobo = Amount in Naira × 100
```

#### Examples

| Amount in Naira | Amount to Pass in API (Kobo) |
| --------------- | ---------------------------- |
| ₦5,000.50       | 500050                       |
| ₦1,000.00       | 100000                       |
| ₦250,000.00     | 25000000                     |
| ₦50.00          | 5000                         |
| ₦0.50           | 50                           |

**What This Looks Like in a Request**

If you want to transfer ₦5,000.50, your request body should look like this:

json

```json
{
  "amount": 500050
}
```

Not like this:

json

```json
{
  "amount": 5000.50
}
```

{% hint style="info" %}
:warning:**Important:** Passing amounts in naira instead of kobo is one of the most common integration errors. Always convert to kobo before sending any amount to the API. Passing the wrong format will result in incorrect transaction values.
{% endhint %}

{% hint style="info" %}
:bulb:**Tip:** Handle the conversion on your server side. Multiply the naira amount by 100 before passing it to any API request. When displaying amounts to end users, divide the kobo value by 100 to convert back to naira.
{% endhint %}


# Optional Fields

Some fields in a request payload are not required for the API to process your request successfully. These are optional fields.

When a field is optional and you have no value to send, you have two ways to handle it:

1. Pass `null` as the value.
2. Exclude the field entirely from the payload. /

Either approach is accepted, the API does not require optional fields to be present.

**Example**

If `middleName` is an optional field, both of these payloads are valid:

```json
// Option 1: explicit null
{
  "firstName": "Ada",
  "middleName": null,
  "lastName": "Obi"
}
```

json

```json
// Option 2: field excluded
{
  "firstName": "Ada",
  "lastName": "Obi"
}
```

{% hint style="info" %}
Required fields do not follow this rule, they must always be present in the payload with a valid value.
{% endhint %}


# Rate Limiting

API rate limits protect the platform from being overloaded by a single client, keeping the system stable and secure for everyone.

If you exceed your rate limit, you'll receive an HTTP **429** error response.

Rate limits are set at the API user level. If you're consistently hitting 429 errors, you can:

* Slow down the rate of your requests
* Spread requests out across minute intervals
* Spread requests across multiple API users

#### Common mistakes that lead to rate limit errors

* Not monitoring for 429 errors on the client
* Retrying failed calls blindly, without checking the error type
* Running too many parallel processes for batch operations
* Polling for transaction updates instead of using webhooks
* Generating a new token for every call instead of reusing it

{% hint style="info" %}
&#x20;**Note:** A 429 response means your rate limit has been temporarily exceeded, it isn't a permanent block. Slow the request rate and retry.
{% endhint %}


# IP Whitelisting (Production access)

Access to the production environment requires your server's IP address to be whitelisted.

To request this, send an email to <support@fintellia.com> with your production IP address(es), and our team will whitelist them for you.

{% hint style="info" %}
Production access will not work until your IP has been whitelisted. If you're integrating from multiple servers, include all relevant IP addresses in your request.
{% endhint %}


# Webhooks

## Webhook Events

Webhook allows your system to receive real-time event notifications. To create a Webhook, go to your Portal. From the **Main Menu**, navigate to **Operations** > **Webhook** and click on **Add Webhook**.\
\
Here is a list of webhook event types along with their event ID and information:

<table><thead><tr><th>Event Type</th><th width="137">Event ID</th><th>Description</th></tr></thead><tbody><tr><td>CREATE ACCOUNT</td><td>1</td><td>A notification to alert you when a customer account (Savings or Current) is created.</td></tr><tr><td>UPDATE ACCOUNT</td><td>2</td><td>A notification to alert you when a customer account (Savings or Current) is updated.</td></tr><tr><td>CREATE CUSTOMER</td><td>3</td><td>A notification to alert you when a customer (Individual, Group or Organisation) is created.</td></tr><tr><td>UPDATE CUSTOMER</td><td>4</td><td>A notification to alert you when a customer (Individual, Group or Organisation) is updated.</td></tr><tr><td>TRANSACTION SUCCESSFUL</td><td>5</td><td>A notification to alert you when a transaction is successful.</td></tr><tr><td>TRANSACTION REVERSED</td><td>6</td><td>A notification to alert you when a transaction is reversed.</td></tr></tbody></table>

## Webhook Fault Tolerance

When sending a POST request to your webhook URL, we will make five retry attempts if we do not receive a 2XX response code. The retry time will follow an exponential back-off pattern, starting with 2 seconds and doubling after each attempt (2² times). If the maximum number of attempts is reached and the request fails, it will be logged and can be retried manually on the portal.&#x20;

We advise using the entity's ID to check for duplicates in your system to ensure proper event handling. For secure communication, using HTTPS for all interactions is highly recommended.<br>

{% hint style="info" %}
Authenticated calls are supported. We accept a Basic Authentication Type in which you supply a Username and Password for Authorisation.
{% endhint %}


# Account API


# Create Customer Information And Account

## Create Customer Information And Account

<mark style="color:green;">`POST`</mark> `/api/account/v1/createcustomeraccount`

To create a new account with customer information, you must construct the complete endpoint by including the necessary URL path parameters. After that, you should make a POST request by passing additional required payloads in the request body, like `firstName` , `lastName` , `productCode` and  `branchCode`.\
\
A successful request will return the `accountNumber`, `customerID`, and `customerInformationID` for reference and a success message in the response.\
\
This process will allow you to create both customer profiles and customer accounts.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body Parameters**

<table><thead><tr><th width="186">Name</th><th width="175">Data Type (length)</th><th width="102" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>firstName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>Customer's first name</td></tr><tr><td><code>lastName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>Customer's last name or surname</td></tr><tr><td><code>otherNames</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The customer's other names</td></tr><tr><td><code>gender</code></td><td>integer</td><td>false</td><td><p>The customer's gender.</p><p>The enumerations are: </p><p><code>1</code> = Female,</p><p><code>2</code> = Male</p></td></tr><tr><td><code>title</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>false</td><td>Customer's title (e.g., Mr, Mrs, Miss) </td></tr><tr><td><code>address</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(300)</em></a></td><td>false</td><td>The customer's residential address</td></tr><tr><td><code>maritalStatus</code></td><td>integer</td><td>false</td><td><p>The customer's marital status. The enumerations are: </p><p><code>1</code> = Married,</p><p><code>2</code> = Single,<br><code>3</code> = Divorced,<br><code>4</code> = Widow,<br><code>5</code> = Widower</p></td></tr><tr><td><code>maidenName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The customer's maiden name (if applicable)</td></tr><tr><td><code>religion</code></td><td>integer</td><td>false</td><td><p>The customer's religion. <br>The enumerations are: </p><p><code>1</code> = Christianity,</p><p><code>2</code> = Islamic,<br><code>3</code> = Others</p></td></tr><tr><td><code>phoneNumber</code></td><td>string  <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Customer's phone number. </td></tr><tr><td><code>email</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Customer's email address</td></tr><tr><td><code>hometown</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's hometown</td></tr><tr><td><code>dateOfBirth</code></td><td>Date</td><td>false</td><td>The customer's Date of birth. The format should be <code>YYYY</code>-<code>MM</code>-<code>DD</code> (e.g., <code>2025</code>-<code>30</code>-<code>12</code>)</td></tr><tr><td><code>nationality</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's nationality</td></tr><tr><td><code>state</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's state of origin</td></tr><tr><td><code>lga</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(200)</em></a></td><td>false</td><td>Local government area</td></tr><tr><td><code>meansOfIdentification</code></td><td>integer</td><td>false</td><td><p>Means of identification (e.g., 1 for ID card)<br>The enumerations are: </p><p><code>1</code> = Drivers License,</p><p><code>2</code> = Voters Card,<br><code>3</code> = International Passport</p></td></tr><tr><td><code>meansOfIdentificationNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>ID number of the chosen identification</td></tr><tr><td><code>nokName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Next of kin's full name</td></tr><tr><td><code>nokAddress</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Next of kin's residential address</td></tr><tr><td><code>nokGender</code></td><td>integer</td><td>false</td><td><p>Next of kin's gender.<br>The enumerations are: </p><p><code>1</code> = Female,</p><p><code>2</code> = Male</p></td></tr><tr><td><code>nokRelationship</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Relationship to next of kin (e.g., Sister, Brother, Mother...)</td></tr><tr><td><code>nokPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Next of kin's phone number</td></tr><tr><td><code>nokEmail</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Next of kin's email address</td></tr><tr><td><code>occupation</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Customer's occupation</td></tr><tr><td><code>employerName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Employer's name</td></tr><tr><td><code>employerAddress</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(300)</em></a></td><td>false</td><td>Employer's residential address</td></tr><tr><td><code>officePhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>The customer's office phone number</td></tr><tr><td><code>accountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(250)</em></a></td><td>true</td><td>The customer's account name</td></tr><tr><td><code>accountType</code></td><td>integer</td><td>false</td><td><p>Type of account. <br><br>The enumerations are: </p><p><code>1</code> = Saving (Default),</p><p><code>2</code> = Current</p></td></tr><tr><td><code>accountStatus</code></td><td>integer</td><td>false</td><td><p>Status of the account.<br><br>The enumerations are: </p><p><code>1</code> = Active (Default),</p><p><code>2</code> = Dormant,<br><code>3</code> = Closed,<br><code>4</code> = PND (Post No Debit),<br><code>5</code> = PNC (Post No Credit),<br><code>6</code> = Inactive,<br><code>7</code> = Frozen<br></p></td></tr><tr><td><code>branchCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>The customer's bank account branch code. <br><br><em><mark style="color:orange;">The branch code must be active and exist on the CBA Portal.</mark></em></td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>The customer's savings/current account product code.<br><br><em><mark style="color:orange;">The product code must be active and exist on the CBA Portal.</mark></em></td></tr><tr><td><code>accountOfficerStaffID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>Account officer's staff ID. <br><br><em><mark style="color:orange;">The account officer code must be active and exist on the CBA Portal. CBA setup already comes with a default account officer if you don't have one.</mark></em></td></tr><tr><td><code>accountTierLevel</code></td><td>integer</td><td>false</td><td><p>Account tier level.<br><br>The enumerations are: </p><p><code>1</code> = Tier 1 (default),</p><p><code>2</code> = Tier 2,<br><code>3</code> = Tier 3</p></td></tr><tr><td><code>accessLevel</code></td><td>integer</td><td>false</td><td>The customer's access level enables restriction of balance and transaction amounts when viewed by users with lower access levels on the CBA portal.<br><br><em>Access levels range from <code>1</code> to <code>5</code></em> </td></tr><tr><td><code>enableEmailNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send email notifications to customers</td></tr><tr><td><code>enableSMSNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send SMS notifications to customers</td></tr><tr><td><code>minimumBalanceRequired</code></td><td>integer</td><td>false</td><td>Minimum balance required.<br><br><em>The product settings will apply if not supplied.</em></td></tr><tr><td><code>referee1CustomerID</code></td><td>string</td><td>false</td><td>Referee 1's customer ID: This is an individual customer's ID already in the system.</td></tr><tr><td><code>referee2CustomerID</code></td><td>string</td><td>false</td><td>Referee 2's customer ID: This is an individual customer's ID already in the system.</td></tr><tr><td><code>categoryOfAccount</code></td><td>String</td><td>false</td><td><p>Category of account.<br><br>The enumerations are: </p><p><code>1</code> = Bank Staff,</p><p><code>2</code> = Bank Director,<br><code>3</code> = Other Customers,<br><code>4</code> = Private,<br><code>5</code> = Public</p></td></tr><tr><td><code>sectorCode</code></td><td>string</td><td>false</td><td><p>Sector code of customer's work type. <br><br>The enumerations are: </p><p>40100 = Agriculture, Forestry, and Fishing </p><p>40200 = Mining and Quarrying 40300 = Manufacturing </p><p>40500 = Real Estate Activities 40700 = General Commerce 40800 = Transportation and Storage </p><p>40900 = Finance and Insurance 41000 = General </p><p>41200 = Governments </p><p>41300 = Water Supply, Sewage, Waste Management, and Remediation Activities </p><p>41400 = Construction </p><p>41500 = Information and Communication </p><p>41600 = Professional, Scientific, and Technical Activities </p><p>41700 = Administrative and Support Service Activities </p><p>41800 = Education </p><p>41900 = Human Health and Social Work Activities </p><p>42000 = Arts, Entertainment, and Recreation</p><p>42100 = Activities of Extra-Territorial Organizations and Bodies </p><p>42200 = Power and Energy 42300 = Capital Market </p><p>42400 = Oil and Gas</p></td></tr><tr><td><code>tin</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td>Tax Identification Number (TIN)</td></tr><tr><td><code>pep</code></td><td>boolean</td><td>false</td><td>Politically Exposed Person (PEP). Set <code>True</code> for yes and <code>False</code> for now. </td></tr><tr><td> <code>bvn</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>Bank Verification Number (BVN)</td></tr><tr><td><code>nin</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>National Idenfication Number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/account/v1/createcustomeraccount' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--data '{
  "title": "string",
  "lastName": "string",
  "firstName": "string",
  "otherNames": "string",
  "gender": 1,
  "address": "string",
  "maritalStatus": 1,
  "maidenName": "string",
  "religion": 1,
  "phoneNumber": "string",
  "email": "string",
  "hometown": "string",
  "dateOfBirth": "2000-01-01",
  "nationality": "string",
  "state": "string",
  "lga": "string",
  "meansOfIdentification": 1,
  "meansOfIdentificationNumber": "string",
  "nokName": "string",
  "nokAddress": "string",
  "nokGender": 1,
  "nokRelationship": "string",
  "nokPhoneNumber": "string",
  "nokEmail": "string",
  "occupation": "string",
  "employerName": "string",
  "employerAddress": "string",
  "officePhoneNumber": "string",
  "accountName": "string",
  "accountType": 1,
  "accountStatus": 1,
  "branchCode": "string",
  "productCode": "string",
  "accountOfficerStaffID": "string",
  "accountTierLevel": 0,
  "accessLevel": 0,
  "enableEmailNotification": true,
  "enableSMSNotification": true,
  "minimumBalanceRequired": 0,
  "referee1CustomerID": "string",
  "referee2CustomerID": "string",
  "categoryOfAccount": "string",
  "sectorCode": "string",
  "tin": "string",
  "pep": true,
  "bvn": "string"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "string",
    "customerID": "string",
    "customerInformationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "documentIdentifier": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Create Account

Create an individual customer account by passing the required parameters along with the account settings.

<mark style="color:green;">`POST`</mark> `/api/account/v1/createaccount`

Upon successful request, the customer's account number will be generated and included in the response payload.&#x20;

{% hint style="info" %}
The `createaccount` endpoint creates a customer account only without adding additional customer profile information.
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table data-full-width="false"><thead><tr><th width="213">Name</th><th width="175">Data Type (length)</th><th width="105" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>customerID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The identifier of an existing customer Individual. <br><br><em><mark style="color:orange;">This is not the customers Guid</mark></em></td></tr><tr><td><code>accountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(250)</em></a></td><td>true</td><td>The customer's account name</td></tr><tr><td><code>referenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Reference number for the account. <br><br><br><em><mark style="color:orange;">This should be passed as a unique value which can be mapped to the customer's account number on the CBA an external account.</mark></em></td></tr><tr><td><code>accountType</code></td><td>integer</td><td>false</td><td><p>Type of account. <br><br>The enumerations are: </p><p><code>1</code> = Saving (Default),</p><p><code>2</code> = Current</p></td></tr><tr><td><code>accountStatus</code></td><td>integer</td><td>false</td><td><p>Status of the account.<br><br>The enumerations are: </p><p><code>1</code> = Active (Default),</p><p><code>2</code> = Dormant,<br><code>3</code> = Closed,<br><code>4</code> = PND (Post No Debit),<br><code>5</code> = PNC (Post No Credit),<br><code>6</code> = Inactive,<br><code>7</code> = Frozen<br></p></td></tr><tr><td><code>branchCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>The customer's bank account branch code. <br><br><em><mark style="color:orange;">The branch code must be active and exist on the CBA Portal.</mark></em></td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>The customer's savings/current account product code.<br><br><em><mark style="color:orange;">The product code must be active and exist on the CBA Portal.</mark></em></td></tr><tr><td><code>accountOfficerStaffID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>Account officer's staff ID. <br><br><em><mark style="color:orange;">The account officer code must be active and exist on the CBA Portal. CBA setup already comes with a default account officer if you don't have one.</mark></em></td></tr><tr><td><code>accountTierLevel</code></td><td>integer</td><td>false</td><td><p>Account tier level.<br><br>The enumerations are: </p><p><code>1</code> = Tier 1 (default),</p><p><code>2</code> = Tier 2,<br><code>3</code> = Tier 3</p></td></tr><tr><td><code>accessLevel</code></td><td>integer</td><td>false</td><td>The customer's access level enables restriction of balance and transaction amounts when viewed by users with lower access levels on the CBA portal.<br><br><em>Access levels range from <code>1</code> to <code>5</code></em> </td></tr><tr><td><code>enableEmailNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send email notifications to customers</td></tr><tr><td><code>enableSMSNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send SMS notifications to customers</td></tr><tr><td><code>statementDeliveryMode</code></td><td>integer</td><td>false</td><td><p>Mode of statement delivery (e.g., 1 for email)<br><br>The enumerations are: </p><p><code>1</code> = Handpicked,</p><p><code>2</code> = Email,<br><code>3</code> = Postage</p></td></tr><tr><td><code>statementDeliveryFrequency</code></td><td>integer</td><td>false</td><td><p>Frequency of statement delivery (e.g., 1 for monthly)<br><br>The enumerations are: </p><p><code>1</code> = Weekly</p><p><code>2</code> = Monthly</p></td></tr><tr><td><code>minimumBalanceRequired</code></td><td>integer</td><td>false</td><td>Minimum balance required for the account</td></tr><tr><td><code>categoryOfAccount</code></td><td>integer</td><td>false</td><td><p>Category of account.<br><br>The enumerations are: </p><p><code>1</code> = Bank Staff,</p><p><code>2</code> = Bank Director,<br><code>3</code> = Other Customers,<br><code>4</code> = Private,<br><code>5</code> = Public</p></td></tr><tr><td><code>sectorCode</code></td><td>string</td><td>false</td><td><p>Sector code of customer's work type. <br><br>The enumerations are: </p><p>40100 = Agriculture, Forestry, and Fishing </p><p>40200 = Mining and Quarrying 40300 = Manufacturing </p><p>40500 = Real Estate Activities 40700 = General Commerce 40800 = Transportation and Storage </p><p>40900 = Finance and Insurance 41000 = General </p><p>41200 = Governments </p><p>41300 = Water Supply, Sewage, Waste Management, and Remediation Activities </p><p>41400 = Construction </p><p>41500 = Information and Communication </p><p>41600 = Professional, Scientific, and Technical Activities </p><p>41700 = Administrative and Support Service Activities </p><p>41800 = Education </p><p>41900 = Human Health and Social Work Activities </p><p>42000 = Arts, Entertainment, and Recreation</p><p>42100 = Activities of Extra-Territorial Organizations and Bodies </p><p>42200 = Power and Energy 42300 = Capital Market </p><p>42400 = Oil and Gas</p></td></tr><tr><td><code>refereeInformation.referee1CustomerID</code></td><td>string (8)</td><td>false</td><td>Referee 1's customer ID: This is an individual customer's ID already in the system.</td></tr><tr><td><code>refereeInformation.referee2CustomerID</code></td><td>string (8)</td><td>false</td><td>Referee 2's customer ID: This is an individual customer's ID already in the system.</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/account/v1/createaccount' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--data '{
    "customerID": "00002109",
    "accountName": " ",
    "referenceNumber": "",
    "accountType": 1,
    "accountStatus": 1,
    "branchCode": "101",
    "productCode": "301",
    "accountOfficerStaffID": "ST1311",
    "accountTierLevel": 2,
    "accessLevel": 5,
    "enableEmailNotification": true,
    "enableSMSNotification": true,
    "statementDeliveryMode": 1,
    "statementDeliveryFrequency": 1,
    "minimumBalanceRequired": 0,
    "categoryOfAccount": 3,
    "sectorCode": "40100",
    "refereeInformation": {
        "referee1CustomerID": "00002110",
        "referee2CustomerID": "00002111"
    }
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Create Virtual Account

This endpoint provides a unique virtual customer account for processing transactions for existing customers.\
\ <mark style="color:green;">`POST`</mark> `/api/account/v1/createvirtualaccount`

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="165">Name</th><th width="172">Data Type (length)</th><th width="102" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>true</td><td>Name associated with the account</td></tr><tr><td><code>lastName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>true</td><td>Customer's last name</td></tr><tr><td><code>firstName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>true</td><td>Customer's first name</td></tr><tr><td><code>otherNames</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's other names</td></tr><tr><td><code>phoneNumber</code></td><td>string</td><td>true</td><td>Customer's phone number</td></tr><tr><td><code>email</code></td><td>string</td><td>true</td><td>Customer's email address</td></tr><tr><td><code>ignorePrefix</code></td><td>boolean</td><td>false</td><td>This flag indicates whether an account should be prefixed by a custom alias configured by the financial institution.<br><br>Set <code>true</code> for active and <code>false</code> for inactive. <em>The default value is active.</em></td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>The customer's savings account product code</td></tr><tr><td><code>bvn</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>Bank Verification Number (BVN)</td></tr><tr><td><code>nin</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>National Identification Number (NIN)</td></tr><tr><td><code>maritalStatus</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>false</td><td><p>The customer's marital status. The enumerations are: </p><p><code>1</code> = Married,</p><p><code>2</code> = Single,<br><code>3</code> = Divorced,<br><code>4</code> = Widow,<br><code>5</code> = Widower</p></td></tr><tr><td><code>religion</code></td><td>string<a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>false</td><td><p>The customer's religion. <br>The enumerations are: </p><p><code>1</code> = Christianity,</p><p><code>2</code> = Islamic,<br><code>3</code> = Others</p></td></tr><tr><td><code>hometown</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's hometown</td></tr><tr><td><code>dateOfBirth</code></td><td>date</td><td>false</td><td>The customer's Date of birth. The format should be <code>YYYY</code>-<code>MM</code>-<code>DD</code> (e.g., <code>2025</code>-<code>30</code>-<code>12</code>)</td></tr><tr><td><code>nationality</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Customer's nationality</td></tr><tr><td><code>state</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Customer's state of residence</td></tr><tr><td><code>lga</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Local Government Area (LGA)</td></tr><tr><td><code>identificationType</code></td><td>string</td><td>false</td><td><p>Type of identification (e.g., driver's license, passport)<br><br>The enumerations are: </p><p><code>1</code> = National ID <em>(Default)</em>,</p><p><code>2</code> = Drivers License,<br><code>3</code> = Voters Card,<br><code>4</code> =  International Passport<br></p></td></tr><tr><td><code>identificationNumber</code></td><td>integer</td><td>false</td><td>Identification number for the chosen identification type.<br><br><em>The product settings will apply if not supplied.</em></td></tr><tr><td><code>pep</code></td><td>boolean</td><td>false</td><td>Politically Exposed Person (PEP) status. Set true for yes and <code>false</code> for no</td></tr><tr><td><code>tin</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Tax Identification Number (TIN)</td></tr><tr><td><code>employeeID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Employee ID if the account is related to employment</td></tr><tr><td><code>address</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(250)</em></a></td><td>false</td><td>Customer's residential address</td></tr><tr><td><code>documentIdentifier</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(120)</em></a></td><td>false</td><td>This is an identifier that will link all documents associated with the user. It can be a Guid value or any valid string with no special characters. Guid is recommended</td></tr><tr><td><code>isBusinessAccount</code></td><td>boolean</td><td>false</td><td>Set <code>true</code> if the account is for business purposes and <code>false</code> if it's not</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
// Some codecurl --location -g '{{baseurl}}/api/account/v1/createvirtualaccount' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--data-raw '{
  "accountName": "",
  "lastName": "",
  "firstName": "",
  "otherNames": "Bertram_Maggio36",
  "phoneNumber": "",
  "email": ".@gmail.com",
  "ignorePrefix": true,
  "productCode": "301",
  "bvn": "string",
  "nin": "string",
  "maritalStatus": "string",
  "religion": "Christianity",
  "hometown": "Ikorodu",
  "dateOfBirth": "2000-01-01",
  "nationality": "Nigerian",
  "state": "Lagos",
  "lga": "Ikorodu",
  "identificationType": "DriversLicense",
  "identificationNumber": "string",
  "pep": true,
  "tin": "string",
  "employeeID": "",
  "address": "5, Bajulaiye road, Isolo",
  "documentIdentifier": "",
  "isBusinessAccount": true
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Close Account

Use this endpoint for closing a customer's account by passing the `accountNumber` and `closureReason` in the request body. <br>

<mark style="color:green;">`POST`</mark> `/api/postings/v1/closeaccount`

{% hint style="info" %}
You can also pass a GUID to the `instrumentNumber` parameter, but a generated GUID reference will be created by default if you don't provide one. \
\
This request does not deactivate a customer account. To deactivate a customer account, use the [Deactivate Customer Account](/udara360-docs-1/customer/customer-api/deactivate-customer-account) API.
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique_reference}` |

**Body**

<table><thead><tr><th width="194">Name</th><th width="173">Data Type (length)</th><th width="100" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>The account number that needs to be closed</td></tr><tr><td><code>closureReason</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>The reason for closing the account.<br><br><em>Suggested Options:</em><br><em>i. Customer's request</em> <br><em>ii. Regulatory requirement</em> <br><em>iii. Fraud related concern</em> <br><em>iv. Court order</em> <br><em>v. Duplication</em> <br><em>vi. Management discretion</em></td></tr><tr><td><code>instrumentNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Instrument number for tranasction status associated with the account closure<br><br><em>If empty, a globally unique identifier (GUID) is generated by default</em></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/postings/v1/closeaccount' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--data '{
  "accountNumber": "string",
  "closureReason": "string",
  "instrumentNumber": "string"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string",
    "duration": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Update Customer Account

Update an existing customer account by providing the unique id of the customer account you want to update to request body.

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/updatecustomeraccount`\
\
The `id` of the customer is the GUID returned when creating a customer or when running the [Search Account](/udara360-docs-1/account/editor/search-account) API request.

{% hint style="info" %}
The other fields allow you to update `accountName`, `accountTierLevel`, `categoryOfAccount` and `SectorCode.`
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th>Name</th><th>Data Type (length)</th><th width="133" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>Unique identifier for the customer's account (GUID format)</td></tr><tr><td><code>AccountName</code></td><td>String <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The customer's account name</td></tr><tr><td><code>accountTierLevel</code></td><td>integer</td><td>false</td><td><p>Account tier level.<br><br>The enumerations are: </p><p><code>1</code> = Tier 1 (default),</p><p><code>2</code> = Tier 2,<br><code>3</code> = Tier 3</p></td></tr><tr><td><code>categoryOfAccount</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td><p>Category of the account (e.g., private, staff)<br><br>The enumerations are: </p><p><code>1</code> = Bank Staff,</p><p><code>2</code> = Bank Director,<br><code>3</code> = Other Customers,<br><code>4</code> = Private,<br><code>5</code> = Public</p></td></tr><tr><td><code>sectorCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td><p>Code representing the sector of the account<br><br>The enumerations are: </p><p>40100 = Agriculture, Forestry, and Fishing </p><p>40200 = Mining and Quarrying 40300 = Manufacturing </p><p>40500 = Real Estate Activities 40700 = General Commerce 40800 = Transportation and Storage </p><p>40900 = Finance and Insurance 41000 = General </p><p>41200 = Governments </p><p>41300 = Water Supply, Sewage, Waste Management, and Remediation Activities </p><p>41400 = Construction </p><p>41500 = Information and Communication </p><p>41600 = Professional, Scientific, and Technical Activities </p><p>41700 = Administrative and Support Service Activities </p><p>41800 = Education </p><p>41900 = Human Health and Social Work Activities </p><p>42000 = Arts, Entertainment, and Recreation</p><p>42100 = Activities of Extra-Territorial Organizations and Bodies </p><p>42200 = Power and Energy 42300 = Capital Market </p><p>42400 = Oil and Gas</p></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/updatecustomeraccount' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "accountTierLevel": 0,
  "categoryOfAccount": "string",
  "sectorCode": "string"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string"
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Search Account

Get all customer account information using the search account endpoint. The customer's `accountNumber` is required for this request and must be passed as a query request.<br>

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/api/account/v1/SearchAccount`

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Query Parameter**

<table data-full-width="false"><thead><tr><th width="181">Name</th><th width="172">Data Type (length)</th><th width="98" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr><tr><td><code>customerID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td>The identifier of an existing customer (Individual, group or corporate). <br><br><em><mark style="color:orange;">This is not the customer Guid</mark></em></td></tr><tr><td><code>accountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(250)</em></a></td><td>false</td><td>The customer's account name</td></tr><tr><td><code>referenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Reference number for the account. </td></tr><tr><td><code>accountType</code></td><td>integer</td><td>false</td><td><p>Type of account. <br><br>The enumerations are: </p><p><code>1</code> = Saving (Default),</p><p><code>2</code> = Current</p></td></tr><tr><td><code>accountStatus</code></td><td>integer</td><td>false</td><td><p>Status of the account.<br><br>The enumerations are: </p><p><code>1</code> = Active (Default),</p><p><code>2</code> = Dormant,<br><code>3</code> = Closed,<br><code>4</code> = PND (Post No Debit),<br><code>5</code> = PNC (Post No Credit),<br><code>6</code> = Inactive,<br><code>7</code> = Frozen<br></p></td></tr><tr><td><code>branchCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The customer's bank account branch code. </td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The customer's savings/current account product code.</td></tr><tr><td><code>accountOfficerStaffID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>Account officer's staff ID. </td></tr><tr><td><code>accountTierLevel</code></td><td>integer</td><td>false</td><td><p>Account tier level.<br><br>The enumerations are: </p><p><code>1</code> = Tier 1 (default),</p><p><code>2</code> = Tier 2,<br><code>3</code> = Tier 3</p></td></tr><tr><td>accessLevel</td><td>integer</td><td>false</td><td>The customer's access level enables restriction of balance and transaction amounts when viewed by users with lower access levels on the CBA portal.<br><br><em>Access levels range from <code>1</code> to <code>5</code></em> </td></tr><tr><td><code>enableEmailNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send email notifications to customers</td></tr><tr><td><code>enableSMSNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send SMS notifications to customers</td></tr><tr><td><code>statementDeliveryMode</code></td><td>integer</td><td>false</td><td><p>Mode of statement delivery (e.g., 1 for email)<br><br>The enumerations are: </p><p><code>1</code> = Handpicked,</p><p><code>2</code> = Email,<br><code>3</code> = Postage</p></td></tr><tr><td><code>statementDeliveryFrequenc</code></td><td>integer</td><td>false</td><td><p>Frequency of statement delivery (e.g., 1 for monthly)<br><br>The enumerations are: </p><p><code>1</code> = Weekly</p><p><code>2</code> = Monthly</p></td></tr><tr><td><code>minimumBalanceRequired</code></td><td>integer</td><td>false</td><td>Minimum balance required for the account</td></tr><tr><td><code>applicableFee</code></td><td>integer</td><td>false</td><td>Customer's applicable fee</td></tr><tr><td><code>applicableInterest</code></td><td>integer</td><td>false</td><td>Customer's applicable fee interest</td></tr><tr><td><code>accountCreationChannel</code></td><td>string</td><td>false</td><td><p>The customer's account creation channel <br>The enumerations are:<br><code>1</code> = Web,<br><code>2</code> = OpenAPI,</p><p><code>3</code> = InternetBanking</p></td></tr><tr><td><code>PageNumber</code></td><td>Integer</td><td>false</td><td>Page number for pagination purposes</td></tr><tr><td><code>PageSize</code></td><td>Integer</td><td>false</td><td>Number of items per page for pagination</td></tr><tr><td><code>SortColumn</code></td><td>string</td><td>false</td><td>Column by which you want to sort the results: (e.g., <code>accountName</code>, <code>accountType</code>, <code>accesslevel</code>)</td></tr><tr><td><code>Direction</code></td><td>string</td><td>false</td><td>Sort the query result direction in the following order:<br>- <code>ascending</code><br>- <code>descending</code></td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/account/v1/SearchAccount?AccountNumber=1100029938&CustomerID=1000192&AccountName=Test%2520Account&BranchCode=001&ProductCode=005&AccountStatus=Active&AccountTierLevel=2&AccountCreationChannel=OpenAPI&StartDate=2022-10-10&EndDate=2022-10-10&DateCreatedFinancialFrom=2022-10-10&DateCreatedFinancialTo=2022-10-10&PageNumber=1&PageSize=10&SortColumn=AccountName&Direction=asc&PhoneNumber=2349000000001&Email=abc%40123.com' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Response : <code>200</code></summary>

```
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountNumber": "string",
        "customerID": "string",
        "customerName": "string",
        "accountName": "string",
        "accountType": "string",
        "branchCode": "string",
        "branchName": "string",
        "productCode": "string",
        "productName": "string",
        "accountOfficerID": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountOfficerName": "string",
        "accountStatus": "string",
        "accountTierLevel": 0,
        "accessLevel": 0,
        "enableEmailNotification": true,
        "enableSMSNotification": true,
        "statementDeliveryMode": "string",
        "statementDeliveryFrequency": "string",
        "minimumBalanceRequired": 0,
        "accountCreationChannel": "string",
        "overrideProductApplicableFee": true,
        "applicableFee": 0,
        "overrideProductApplicableInterest": true,
        "applicableInterest": 0,
        "mandateRuleIndex": "string",
        "ledgerBalance": 0,
        "availableBalance": 0,
        "withdrawableBalance": 0,
        "overdraftLimit": 0,
        "isGroupAccount": true,
        "categoryOfAccount": "string",
        "sectorCode": "string",
        "firstName": "Adebayo",
        "lastName": "Olufemi",
        "otherNames": "Emmanuel",
        "address": "XYZ Acme road",
        "phoneNumber": "0800000000",
        "bvn": null,
        "email": "xyz@gmail.com",
        "dateOfBirth": "2001-01-01T00:00:00"
      }
    ],
    "recordCount": 0
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Get Accounts By PhoneNumber

Retrieve all accounts linked to a given phone number.

**GET** `{{baseurl}}/api/account/v1/GetAccountsByPhoneNumber?PhoneNumber={{PhoneNumber}}`

This endpoint uses the phone number supplied to return all accounts tied to it.

**Headers**

| Name              | Value               | Description              |
| ----------------- | ------------------- | ------------------------ |
| Content-Type      | application/json    |                          |
| Authorization     | bearer {token}      | Authorization header     |
| request-reference | {unique\_reference} | Unique request reference |

**Params**

| Name         | Data Type | Description                            |
| ------------ | --------- | -------------------------------------- |
| Phone Number | String    | The phone number to search accounts by |

**Sample API Request**

{% tabs %}
{% tab title="Curl" %}

```javascript
curl --location -g '{{baseurl}}/api/account/v1/GetAccountsByPhoneNumber?PhoneNumber={{PhoneNumber}}' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

{% endtab %}
{% endtabs %}

**Response**

{% tabs %}
{% tab title="Json" %}

```javascript
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "accountNumber": "string",
        "customerID": "string",
        "accountName": "string",
        "accountType": "string",
        "accountStatus": "string",
        "firstName": "Adebayo",
        "lastName": "Olufemi",
        "otherNames": "Emmanuel",
        "address": "XYZ Acme road",
        "email": "xyz@gmail.com"
      }
    ],
    "recordCount": 0
  }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
&#x20;`data.data` is an array, it returns one entry per account linked to the phone number. `recordCount` shows the total number of accounts matched.
{% endhint %}


# Place Post No Debit (PND) On Account

This places a Post-No-Debit restriction on the provided account, preventing withdrawal transactions.

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/placepnd`

To restrict a customer's account with Post-No-Debit, you must pass the required `accountNumber` to the request body of the PND endpoint.&#x20;

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/placepnd' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000730"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Remove Post No Debit (PND) On Account

This revokes a Post-No-Debit restriction on the provided account, allowing customers to perform withdrawal transactions.

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/removepnd`

To remove PND on a customer's account, you must pass the required `accountNumber` to the request body of the PND endpoint.&#x20;

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/removepnd' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000730"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Place Post No Credit (PNC) On Account

This places a Post-No-Credit (PNC) restriction on the provided account, which affects the receiving of incoming transactions.

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/placepnc`

To restrict a customer's account with PNC, you must pass the required `accountNumber` to the request body of the PNC endpoint.&#x20;

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/placepnc' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000730"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Remove Post No Credit (PNC) On Account

This revokes a Post-No-Credit (PNC) restriction on the provided account, allowing customers to receive incoming transactions.

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/removepnc`

To remove a PNC on a customer account, you must pass the required `accountNumber` to the request body.&#x20;

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/removepnc' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000730"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Freeze Customer Account

This endpoint is used to limit activity on a customer's account, such as debit and credit.\
\ <mark style="color:orange;">`PUT`</mark> `/api/account/v1/freeze`

To freeze a customer's account, you need to pass `accountNumber` in the request body to the freeze account endpoint. <br>

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/freeze' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000730"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Unfreeze Customer Account

This endpoint unfreezes a customer's account, allowing them to perform debit and credit transactions.<br>

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/unfreeze`

To unfreeze a customer's account, you need to pass `accountNumber` in the request body to the freeze account endpoint. You need to make sure the <br>

{% hint style="warning" %}
To avoid an error response on your request, make sure the `accountNumber` is a previously frozen account.&#x20;
{% endhint %}

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/unfreeze' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000730"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Get Balance By Account Number

This request retrieves the customer's account balance based on the provided account number. You will need to pass the customer's `accountNumber` in the request query.

<mark style="color:blue;">`GET`</mark> `/api/account/v1/getbyaccountnumber`

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Query Parameter**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/account/v1/getbyaccountnumber?AccountNumber=1100029938' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Response : <code>200</code></summary>

```
{
  "status": true,
  "message": "Successful",
  "data": {
    "accountNumber": "string",
    "ledgerBalance": 0,
    "availableBalance": 0,
    "withdrawableBalance": 0,
    "lienAmount": 0
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Lien API


# Place Account Lien

\
To place a lien on an account, you need to make a POST request to the designated API endpoint with the required URL path parameters. The request body should include specific payloads, such as `accountNumber`, `formOfLien`, and `referenceNumber`.\
\ <mark style="color:green;">`POST`</mark> `/api/accountlien/v1/placelien`\
\
A successful request will return a confirmation message along with the lien `ID` for future reference in the response.\
\
This process enables you to securely place liens on accounts, providing important financial safeguards.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="174">Data Type (length)</th><th width="101" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The account number to be placed on the lien</td></tr><tr><td><code>formOfLien</code></td><td>string</td><td>true</td><td>The form or type of lien. Lien type can be a flat amount or a percentage<br><br>The enumerations are:<br><code>1</code> = FlatAmount<br><code>2</code> = Percentage </td></tr><tr><td><code>referenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(500)</em></a></td><td>true</td><td>A unique reference number for the lien<br><br><em><mark style="color:orange;">"This is necessary when processing a transaction that requires the automatic release of the lien."</mark></em></td></tr><tr><td><code>amount</code></td><td>integer</td><td>false</td><td>The amount of money to be held as a lien<br><br><em><mark style="color:orange;">The amount should be sent in the base unit of the currency. For example,</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>1000</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">naira will be sent as</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>1000</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">*</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>100</code></mark><mark style="color:orange;">. (nullable)</mark></em></td></tr><tr><td><code>percentage</code></td><td>integer</td><td>false</td><td>The percentage of the account balance to be held as a lien</td></tr><tr><td><code>description</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Description/reason for placing the lien <br><br><em><mark style="color:orange;">The percentage should be shown with a maximum of three decimal places. (nullable)</mark></em></td></tr><tr><td><code>tenure</code></td><td>integer</td><td>false</td><td>The duration of the lien in months</td></tr><tr><td><code>commencementDate</code></td><td>date</td><td>false</td><td>The date when the lien will start</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/accountlien/v1/placelien' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "accountNumber": "string",
  "formOfLien": "string",
  "referenceNumber": "string",
  "amount": 0,
  "percentage": 0,
  "description": "string",
  "tenure": 0,
  "commencementDate": "2023-01-20T23:38:50.196Z"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "referenceNumber": "string"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Update Account Lien

The request body should include specific payloads such as a required `id` and other parameters like `FormOfLien`, and `amount`, allowing you to modify and update existing lien information.

<mark style="color:green;">`POST`</mark> `/api/accountlien/v1/updatelien`\
\
A successful request will return a confirmation message indicating that the lien has been updated along with any relevant details.\
\
This process allows for the secure and efficient updating of liens on accounts, ensuring that accurate and current financial information is maintained.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="168">Name</th><th width="173">Data Type (length)</th><th width="113" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>The unique identifier of the lien (GUID)</td></tr><tr><td><code>formOfLien</code></td><td>string</td><td>false</td><td>The form or type of lien. Lien type can be a flat amount or a percentage<br><br>The enumerations are:<br><code>1</code> = FlatAmount<br><code>2</code> = Percentage </td></tr><tr><td><code>amount</code></td><td>integer</td><td>false</td><td>The amount of money to be held as a lien<br><br><em><mark style="color:orange;">The amount should be sent in the base unit of the currency. For example,</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>1000</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">naira will be sent as</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>1000</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">*</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>100</code></mark><mark style="color:orange;">. (nullable)</mark></em></td></tr><tr><td><code>percentage</code></td><td>integer</td><td>false</td><td>The updated percentage of the account balance to be held<br><br><em><mark style="color:orange;">The percentage must be rounded to a maximum of three decimal places.</mark></em></td></tr><tr><td><code>description</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Updated description or reason for the lien</td></tr><tr><td><code>tenure</code></td><td>integer</td><td>false</td><td>Updated duration of the lien in months</td></tr><tr><td><code>commencementDate</code></td><td>date</td><td>false</td><td>Updated start date of the lien</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/accountlien/v1/updatelien' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "formOfLien": "string",
  "amount": 0,
  "percentage": 0,
  "description": "string",
  "tenure": 0,
  "commencementDate": "2023-01-20T23:39:49.208Z"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "referenceNumber": "string"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Unplace Account Lien

<mark style="color:green;">`POST`</mark> `/api/accountlien/v1/unplacelien`\
\
The request body should include the required lien `id` or the `referenceNumber`.\
\
A successful request will return a confirmation message indicating that the lien has been removed along with any relevant details.\
\
This process allows for the secure and efficient removal of liens on accounts, ensuring that accurate and updated financial information is maintained while adhering to regulatory requirements.

{% hint style="info" %}
To remove a lien on an account, either the `id` or the `referenceNumber` must be used.
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="168">Name</th><th width="173">Data Type (length)</th><th width="113" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>The unique identifier of the lien (GUID)</td></tr><tr><td><code>referenceNumber</code></td><td>string (<a data-footnote-ref href="#user-content-fn-1"><em>500)</em></a></td><td>false</td><td>A unique reference number for the lien, if available<br></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/accountlien/v1/unplacelien' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string"
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Account Officer

The "Search Account Officer" API request retrieves comprehensive information on account officers from the CBA system, including names, contact details, roles, and relevant identifiers.

<mark style="color:blue;">`GET`</mark> `/api/account/v1/SearchAccountOfficers`

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/account/v1/SearchAccountOfficers' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Response : <code>200</code></summary>

```
{
  "data": {
    "data": [
      {
        "id": "c48e0d12-d7e0-4be5-b460-9200ba8eb80c",
        "name": "Officer Default",
        "gender": "Male",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "099",
        "phoneNumber": "080000000",
        "address": "Cedrus HQ",
        "status": "InActive",
        "accessLevel": 1,
        "dateCreated": "2024-04-30T11:46:13.2333333",
        "linkedUser": "default@cedrusmfb.com",
        "supervisor": "Oladimeji.shogbola@cedrusmfb.com",
        "supervisorName": null
      },
      {
        "id": "9695cc50-72d0-4d7c-a882-e4418f71c51a",
        "name": "Ezeka Chidi",
        "gender": "Female",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "0243",
        "phoneNumber": "08034632793",
        "address": "122 Block 24 Ogba",
        "status": "InActive",
        "accessLevel": 1,
        "dateCreated": "2024-03-01T16:04:17.1733333",
        "linkedUser": "chidiebere.ezeka@gmail.com",
        "supervisor": "lastsamurai@x.com",
        "supervisorName": null
      },
      {
        "id": "38665a91-4181-49f0-b8ed-fe143a27f55f",
        "name": "Igbojionu Isabella",
        "gender": "Female",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "9890",
        "phoneNumber": "09039413344",
        "address": "1 Fintellia avenue",
        "status": "Active",
        "accessLevel": 3,
        "dateCreated": "2024-02-08T08:42:43.7066667",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      },
      {
        "id": "61d584a4-9802-4c35-8327-a102d21ba586",
        "name": "Oyetubo Olabamiji",
        "gender": "Female",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "0008",
        "phoneNumber": "08000000000",
        "address": "Head Office",
        "status": "InActive",
        "accessLevel": 5,
        "dateCreated": "2023-11-11T12:25:34.3633333",
        "linkedUser": "olabamiji.oyetubo@fintellia.com",
        "supervisor": "kolawole.idiaro@netmfb.com",
        "supervisorName": null
      },
      {
        "id": "5680bda6-42d5-4889-a4d4-c99e7b6d4146",
        "name": " ",
        "gender": "Male",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "100009",
        "phoneNumber": "08035591009",
        "address": "Lagos",
        "status": "Active",
        "accessLevel": 2,
        "dateCreated": "2023-01-24T15:21:53.56",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      },
      {
        "id": "b984af8e-ced1-48bd-a57f-ac8ef1c12c5f",
        "name": "Default Officer",
        "gender": "Female",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "0",
        "phoneNumber": "0800000",
        "address": "No Address",
        "status": "Active",
        "accessLevel": 5,
        "dateCreated": "2022-12-02T23:17:04.86",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      },
      {
        "id": "a26006df-35ab-4077-8627-099b159a1d82",
        "name": "Martin Copehn",
        "gender": "Female",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "23231",
        "phoneNumber": "08088989",
        "address": "London Hill",
        "status": "Active",
        "accessLevel": 2,
        "dateCreated": "2022-04-29T14:54:46.1",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      },
      {
        "id": "b7505c1f-46d6-4f90-8ec8-5af4a590d18a",
        "name": "Elon Musk",
        "gender": "Male",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "6789hg",
        "phoneNumber": "0908765666",
        "address": "Lekki P1",
        "status": "Active",
        "accessLevel": 3,
        "dateCreated": "2022-04-17T09:41:09.3066667",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      },
      {
        "id": "cb4fe78e-c0bb-4d7a-b2ac-101bb8afedd8",
        "name": "Moth Evans",
        "gender": "Male",
        "branchCode": "906",
        "branchName": "Benson",
        "staffID": "34232",
        "phoneNumber": "0878724",
        "address": "Test",
        "status": "InActive",
        "accessLevel": 3,
        "dateCreated": "2022-04-13T20:41:31.1466667",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      },
      {
        "id": "736875c5-6312-4405-89c7-9edd88b0326f",
        "name": "Dan Tester",
        "gender": "Female",
        "branchCode": "101",
        "branchName": "Head Office Branch",
        "staffID": "722",
        "phoneNumber": "089898232",
        "address": "test officer",
        "status": "Active",
        "accessLevel": 2,
        "dateCreated": "2022-03-11T10:16:35.6633333",
        "linkedUser": null,
        "supervisor": null,
        "supervisorName": null
      }
    ],
    "recordCount": 31
  },
  "status": true,
  "message": "Request successful"
}
```

</details>


# Customer API


# Create A Group Customer Information

The *"create group of customer information"* endpoint enables the creation of corporate or business account profiles and grouping already existing customer accounts on the CBA. Members can be added by passing `customerID` and `isSignatory` along with other required parameters.\
\ <mark style="color:green;">`POST`</mark> `/api/Account/v1/CreateGroupCustomerInformation`

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="168">Name</th><th width="172">Data Type (length)</th><th width="98" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td>string</td><td>true</td><td>Name of the business</td></tr><tr><td><code>address</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(300)</em></a></td><td>false</td><td>Business residential address</td></tr><tr><td><code>businessPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Business phone number</td></tr><tr><td><code>contactPersonName</code></td><td>string<a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Name of the contact person</td></tr><tr><td><code>contactPersonPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Phone number of the contact person</td></tr><tr><td><code>countryOfOperation</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Country where the business operates</td></tr><tr><td><code>description</code></td><td>string </td><td>false</td><td>Brief description of the business</td></tr><tr><td><code>industrialSector</code></td><td>integer</td><td>false</td><td><p>Code representing the industrial sector<br><br>The enumerations are: </p><p>40100 = Agriculture, Forestry, and Fishing </p><p>40200 = Mining and Quarrying 40300 = Manufacturing </p><p>40500 = Real Estate Activities 40700 = General Commerce 40800 = Transportation and Storage </p><p>40900 = Finance and Insurance 41000 = General </p><p>41200 = Governments </p><p>41300 = Water Supply, Sewage, Waste Management, and Remediation Activities </p><p>41400 = Construction </p><p>41500 = Information and Communication </p><p>41600 = Professional, Scientific, and Technical Activities </p><p>41700 = Administrative and Support Service Activities </p><p>41800 = Education </p><p>41900 = Human Health and Social Work Activities </p><p>42000 = Arts, Entertainment, and Recreation</p><p>42100 = Activities of Extra-Territorial Organizations and Bodies </p><p>42200 = Power and Energy 42300 = Capital Market </p><p>42400 = Oil and Gas</p></td></tr><tr><td><code>lga</code></td><td>string</td><td>false</td><td>Local Government Area (LGA)</td></tr><tr><td><code>natureOfBusiness</code></td><td>string</td><td>false</td><td>Nature of the business (e.g., Manufacturing)</td></tr><tr><td><code>stateOfOperation</code></td><td>string</td><td>false</td><td>State where the business operates</td></tr><tr><td><code>customerType</code></td><td>integer</td><td>false</td><td><p>Type of customer (e.g., 5 for corporate)</p><p><br>The enumerations are:<br><code>1</code> = Individual,<br><code>2</code> = Group,<br><code>3</code> = Corporate,<br><code>4</code> = GroupJoint,<br><code>5</code> = GroupSME</p></td></tr><tr><td><code>registrationDate</code></td><td>string</td><td>false</td><td>Date of business registration (e.g., 2023-02-27)</td></tr><tr><td><code>incorporationDate</code></td><td>string</td><td>false</td><td>Date of business incorporation (e.g., 2023-02-27)</td></tr><tr><td><code>registrationNumber</code></td><td>string</td><td>false</td><td>Business registration number</td></tr><tr><td><code>email</code></td><td>string</td><td>false</td><td>Business email address</td></tr><tr><td><code>tin</code></td><td>string</td><td>false</td><td>Tax Identification Number (TIN)</td></tr><tr><td><code>groupMembers.customerID</code></td><td>string (8)</td><td>false</td><td>Customer ID of a group member</td></tr><tr><td><code>groupMembers.isSignatory</code></td><td>boolean</td><td>false</td><td>Set <code>true</code> if the group member is a signatory and <code>false</code> if it's not</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Account/v1/CreateGroupCustomerInformation' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data-raw '{
    "address": "6, Kano street, Egbeda",
    "businessPhoneNumber": "09034852395",
    "contactPersonName": "07036866841",
    "contactPersonPhoneNumber": "08025725265",
    "countryOfOperation": "Nigeria",
    "description": "Making sure you stay healthy",
    "industrialSector": 40100,
    "lga": "Kosofe",
    "name": "Nuels_Health",
    "natureOfBusiness": "Manufacturing",
    "stateOfOperation": "Oyo",
    "customerType": 5,
    "registrationDate": "2023-02-27",
    "incorporationDate": "2023-02-27",
    "registrationNumber": "1097367902398",
    "email": "nuelshealth@gmail.com",
    "tin": "049874985",
    "groupMembers": [
        {
            "customerID": "00002112",
            "isSignatory": true
        },
        {
            "customerID": "00002113",
            "isSignatory": true
        }
    ]
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "string",
    "customerID": "string",
    "customerInformationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "documentIdentifier": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Update Group Customer Information

Update an existing customer corporate/business account profile information by providing the unique `id` of the account you want to update to request body.

<mark style="color:orange;">`PUT`</mark> `/api/Account/v1/UpdateGroupCustomerInformation`

The `id` of the customer is the GUID returned when creating a customer or when running the [Search Account](/udara360-docs-1/account/editor/search-account) API request. This `id` is different from the 8-digit Customer ID.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="168">Name</th><th width="172">Data Type (length)</th><th width="98" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>Unique identifier for the group or business account (GUID format)</td></tr><tr><td><code>name</code></td><td>string</td><td>false</td><td>Name of the business</td></tr><tr><td><code>address</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(300)</em></a></td><td>false</td><td>Business residential address</td></tr><tr><td><code>businessPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Business phone number</td></tr><tr><td><code>contactPersonName</code></td><td>string<a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Name of the contact person</td></tr><tr><td><code>contactPersonPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Phone number of the contact person</td></tr><tr><td><code>countryOfOperation</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Country where the business operates</td></tr><tr><td><code>description</code></td><td>string </td><td>false</td><td>Brief description of the business</td></tr><tr><td><code>industrialSector</code></td><td>integer</td><td>false</td><td><p>Code representing the industrial sector<br><br>The enumerations are: </p><p>40100 = Agriculture, Forestry, and Fishing </p><p>40200 = Mining and Quarrying 40300 = Manufacturing </p><p>40500 = Real Estate Activities 40700 = General Commerce 40800 = Transportation and Storage </p><p>40900 = Finance and Insurance 41000 = General </p><p>41200 = Governments </p><p>41300 = Water Supply, Sewage, Waste Management, and Remediation Activities </p><p>41400 = Construction </p><p>41500 = Information and Communication </p><p>41600 = Professional, Scientific, and Technical Activities </p><p>41700 = Administrative and Support Service Activities </p><p>41800 = Education </p><p>41900 = Human Health and Social Work Activities </p><p>42000 = Arts, Entertainment, and Recreation</p><p>42100 = Activities of Extra-Territorial Organizations and Bodies </p><p>42200 = Power and Energy 42300 = Capital Market </p><p>42400 = Oil and Gas</p></td></tr><tr><td><code>lga</code></td><td>string</td><td>false</td><td>Local Government Area (LGA)</td></tr><tr><td><code>natureOfBusiness</code></td><td>string</td><td>false</td><td>Nature of the business (e.g., Manufacturing)</td></tr><tr><td><code>stateOfOperation</code></td><td>string</td><td>false</td><td>State where the business operates</td></tr><tr><td><code>customerType</code></td><td>integer</td><td>false</td><td>Type of customer (e.g., 5 for corporate)<br><br>The enumerations are:<br><code>1</code> = Individual,<br><code>2</code> = Group,<br><code>3</code> = Corporate,<br><code>4</code> = GroupJoint,<br><code>5</code> = GroupSME</td></tr><tr><td><code>registrationDate</code></td><td>string</td><td>false</td><td>Date of business registration (e.g., 2023-02-27)</td></tr><tr><td><code>incorporationDate</code></td><td>string</td><td>false</td><td>Date of business incorporation (e.g., 2023-02-27)</td></tr><tr><td><code>registrationNumber</code></td><td>string</td><td>false</td><td>Business registration number</td></tr><tr><td><code>email</code></td><td>string</td><td>false</td><td>Business email address</td></tr><tr><td><code>tin</code></td><td>string</td><td>false</td><td>Tax Identification Number (TIN)</td></tr><tr><td><code>groupMembers.customerID</code></td><td>string (8)</td><td>false</td><td>Customer ID of a group member</td></tr><tr><td><code>groupMembers.isSignatory</code></td><td>boolean</td><td>false</td><td>Set <code>true</code> if the group member is a signatory and <code>false</code> if it's not</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/Account/v1/UpdateGroupCustomerInformation' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data-raw '{
    "id": "f86185c1-d2ce-4d50-89bf-1b27b7b76bbc",
    "customerType": 2,
    "name": "Bell Cuisine",
    "description": "Restaurant and bar",
    "address": "6, Olatunji Street, Ota",
    "businessPhoneNumber": "09062452677",
    "natureOfBusiness": "Food",
    "industrialSector": 40100,
    "registrationDate": "2023-02-28T23:46:30.262Z",
    "incorporationDate": "2023-02-28T23:46:30.262Z",
    "registrationNumber": "294892384393",
    "email": "bleeacuisine@gmail.com",
    "contactPersonName": "09036738632",
    "contactPersonPhoneNumber": "08173986209",
    "countryOfOperation": "Nigeria",
    "stateOfOperation": "Ogun",
    "lga": "Ota LGA",
    "tin": "0985674395",
    "pep": true,
    "groupMembers": [
        {
            "customerID": "00002121",
            "isSignatory": true
        },
        {
            "customerID": "00002126",
            "isSignatory": true
        }
    ]
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "string",
    "customerID": "string",
    "customerInformationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "documentIdentifier": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Activate Customer Account

The request reactivates a customer's account by passing the `accountNumber` to the request body.\
\ <mark style="color:orange;">`PUT`</mark> `/api/account/v1/activate` &#x20;

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/activate' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000637"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Deactivate Customer Account

The request deactivates a customer's account from your financial institution. Customer's `accountNumber` must be passed to the request body for deactivation.&#x20;

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/deactivate`

{% hint style="info" %}
You can also reactivate a customer's account. See [Activate Customer](/udara360-docs-1/customer/customer-api/activate-customer-account) API to reactivate the account.&#x20;
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/deactivate' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data '{
  "accountNumber": "1000000637"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
//request successful
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Update Customer Information

Update an existing customer account information by providing the unique `id` or `customerID` of the customer account you want to update to request body. \
\
The `id` of the customer is the GUID returned when creating a customer or when running the [Search Account](/udara360-docs-1/account/editor/search-account) API request. This `id` is different from the 8-digit Customer ID.

<mark style="color:orange;">`PUT`</mark> `/api/account/v1/UpdateCustomerInformation`

{% hint style="warning" %}
Other fields are optional, allowing for a partial update. If optional fields are not included in the payload or are passed as null, they will not be updated.
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body Parameters**

<table><thead><tr><th width="186">Name</th><th width="175">Data Type (length)</th><th width="102" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>Unique identifier for the customer's account (GUID format)</td></tr><tr><td><code>customerID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(8)</em></a></td><td>true</td><td>The unique 8 digit customer ID of the customer's account</td></tr><tr><td><code>firstName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Customer's first name</td></tr><tr><td><code>lastName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Customer's last name or surname</td></tr><tr><td><code>otherNames</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The customer's other names</td></tr><tr><td><code>gender</code></td><td>integer</td><td>false</td><td><p>The customer's gender.</p><p>The enumerations are: </p><p><code>1</code> = Female,</p><p><code>2</code> = Male</p></td></tr><tr><td><code>title</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>false</td><td>Customer's title (e.g., Mr, Mrs, Miss) </td></tr><tr><td><code>address</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(300)</em></a></td><td>false</td><td>The customer's residential address</td></tr><tr><td><code>maritalStatus</code></td><td>integer</td><td>false</td><td><p>The customer's marital status. The enumerations are: </p><p><code>1</code> = Married,</p><p><code>2</code> = Single,<br><code>3</code> = Divorced,<br><code>4</code> = Widow,<br><code>5</code> = Widower</p></td></tr><tr><td><code>maidenName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The customer's maiden name (if applicable)</td></tr><tr><td><code>religion</code></td><td>integer</td><td>false</td><td><p>The customer's religion. <br>The enumerations are: </p><p><code>1</code> = Christianity,</p><p><code>2</code> = Islamic,<br><code>3</code> = Others</p></td></tr><tr><td><code>phoneNumber</code></td><td>string  <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Customer's phone number. </td></tr><tr><td><code>email</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Customer's email address</td></tr><tr><td><code>hometown</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's hometown</td></tr><tr><td><code>dateOfBirth</code></td><td>Date</td><td>false</td><td>The customer's Date of birth. The format should be <code>YYYY</code>-<code>MM</code>-<code>DD</code> (e.g., <code>2025</code>-<code>30</code>-<code>12</code>)</td></tr><tr><td><code>nationality</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's nationality</td></tr><tr><td><code>state</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Customer's state of origin</td></tr><tr><td><code>lga</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(200)</em></a></td><td>false</td><td>Local government area</td></tr><tr><td><code>meansOfIdentification</code></td><td>integer</td><td>false</td><td><p>Means of identification (e.g., 1 for ID card)<br>The enumerations are: </p><p><code>1</code> = Drivers License,</p><p><code>2</code> = Voters Card,<br><code>3</code> = International Passport</p></td></tr><tr><td><code>meansOfIdentificationNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>ID number of the chosen identification</td></tr><tr><td><code>nokName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Next of kin's full name</td></tr><tr><td><code>nokAddress</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Next of kin's residential address</td></tr><tr><td><code>nokGender</code></td><td>integer</td><td>false</td><td><p>Next of kin's gender.<br>The enumerations are: </p><p><code>1</code> = Female,</p><p><code>2</code> = Male</p></td></tr><tr><td><code>nokRelationship</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>Relationship to next of kin (e.g., Sister, Brother, Mother...)</td></tr><tr><td><code>nokPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Next of kin's phone number</td></tr><tr><td><code>nokEmail</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Next of kin's email address</td></tr><tr><td><code>occupation</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Customer's occupation</td></tr><tr><td><code>employerName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Employer's name</td></tr><tr><td><code>employerAddress</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(300)</em></a></td><td>false</td><td>Employer's residential address</td></tr><tr><td><code>officePhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>The customer's office phone number</td></tr><tr><td><code>accountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(250)</em></a></td><td>false</td><td>The customer's account name</td></tr><tr><td><code>accountType</code></td><td>integer</td><td>false</td><td><p>Type of account. <br><br>The enumerations are: </p><p><code>1</code> = Saving (Default),</p><p><code>2</code> = Current</p></td></tr><tr><td><code>accountStatus</code></td><td>integer</td><td>false</td><td><p>Status of the account.<br><br>The enumerations are: </p><p><code>1</code> = Active (Default),</p><p><code>2</code> = Dormant,<br><code>3</code> = Closed,<br><code>4</code> = PND (Post No Debit),<br><code>5</code> = PNC (Post No Credit),<br><code>6</code> = Inactive,<br><code>7</code> = Frozen<br></p></td></tr><tr><td><code>branchCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The customer's bank account branch code. <br><br><em><mark style="color:orange;">The branch code must be active and exist on the CBA Portal.</mark></em></td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The customer's savings/current account product code.<br><br><em><mark style="color:orange;">The product code must be active and exist on the CBA Portal.</mark></em></td></tr><tr><td><code>accountOfficerStaffID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>Account officer's staff ID. <br><br><em><mark style="color:orange;">The account officer code must be active and exist on the CBA Portal. CBA setup already comes with a default account officer if you don't have one.</mark></em></td></tr><tr><td><code>accountTierLevel</code></td><td>integer</td><td>false</td><td><p>Account tier level.<br><br>The enumerations are: </p><p><code>1</code> = Tier 1 (default),</p><p><code>2</code> = Tier 2,<br><code>3</code> = Tier 3</p></td></tr><tr><td><code>accessLevel</code></td><td>integer</td><td>false</td><td>The customer's access level enables restriction of balance and transaction amounts when viewed by users with lower access levels on the CBA portal.<br><br><em>Access levels range from <code>1</code> to <code>5</code></em> </td></tr><tr><td><code>enableEmailNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send email notifications to customers</td></tr><tr><td><code>enableSMSNotification</code></td><td>boolean</td><td>false</td><td>This enable the system to send SMS notifications to customers</td></tr><tr><td><code>minimumBalanceRequired</code></td><td>integer</td><td>false</td><td>Minimum balance required.<br><br><em>The product settings will apply if not supplied.</em></td></tr><tr><td><code>referee1CustomerID</code></td><td>string</td><td>false</td><td>Referee 1's customer ID: This is an individual customer's ID already in the system.</td></tr><tr><td><code>referee2CustomerID</code></td><td>string</td><td>false</td><td>Referee 2's customer ID: This is an individual customer's ID already in the system.</td></tr><tr><td><code>categoryOfAccount</code></td><td>String</td><td>false</td><td><p>Category of account.<br><br>The enumerations are: </p><p><code>1</code> = Bank Staff,</p><p><code>2</code> = Bank Director,<br><code>3</code> = Other Customers,<br><code>4</code> = Private,<br><code>5</code> = Public</p></td></tr><tr><td><code>sectorCode</code></td><td>string</td><td>false</td><td><p>Sector code of customer's work type. <br><br>The enumerations are: </p><p>40100 = Agriculture, Forestry, and Fishing </p><p>40200 = Mining and Quarrying 40300 = Manufacturing </p><p>40500 = Real Estate Activities 40700 = General Commerce 40800 = Transportation and Storage </p><p>40900 = Finance and Insurance 41000 = General </p><p>41200 = Governments </p><p>41300 = Water Supply, Sewage, Waste Management, and Remediation Activities </p><p>41400 = Construction </p><p>41500 = Information and Communication </p><p>41600 = Professional, Scientific, and Technical Activities </p><p>41700 = Administrative and Support Service Activities </p><p>41800 = Education </p><p>41900 = Human Health and Social Work Activities </p><p>42000 = Arts, Entertainment, and Recreation</p><p>42100 = Activities of Extra-Territorial Organizations and Bodies </p><p>42200 = Power and Energy 42300 = Capital Market </p><p>42400 = Oil and Gas</p></td></tr><tr><td><code>tin</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td>Tax Identification Number (TIN)</td></tr><tr><td><code>pep</code></td><td>boolean</td><td>false</td><td>Politically Exposed Person (PEP). Set <code>True</code> for yes and <code>False</code> for now. </td></tr><tr><td> <code>bvn</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>Bank Verification Number (BVN)</td></tr><tr><td><code>nin</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>National Idenfication Number</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/account/v1/UpdateCustomerInformation' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;' \
--data-raw '{
    "customerID": "00002120",
    "id": "ae6f8e44-c80b-4cb9-8c6b-745bbba223bf",
    "title": "MRS",
    "lastName": "Dawson",
    "firstName": "Helen",
    "otherNames": "kalu",
    "Gender": 1,
    "address": "1 Akinjobi Street, Ketu",
    "maidenName": "",
    "religion": 1,
    "phoneNumber": "09011142299",
    "email": "Dawson.Helen@gmail.com",
    "hometown": "Lekki",
    "dateOfBirth": "2001-01-01",
    "nationality": "Nigerian",
    "state": "Lagos",
    "lga": "Eyi-Osa",
    "meansOfIdentification": 1,
    "meansOfIdentificationNumber": "8474387461",
    "nokName": "",
    "nokAddress": "",
    "nokGender": 1,
    "nokRelationship": "Brother",
    "nokPhoneNumber": "09062356377",
    "nokEmail": "",
    "occupation": "",
    "employerName": "",
    "employerAddress": "",
    "officePhoneNumber": "",
    "accountName": "Olufemi Adebayo",
    "accountType": 1,
    "MaritalStatus": 1,
    "accountStatus": 1,
    "branchCode": "101",
    "productCode": "301",
    "accountOfficerStaffID": "ST1311",
    "accountTierLevel": 3,
    "accessLevel": 5,
    "enableEmailNotification": true,
    "enableSMSNotification": true,
    "minimumBalanceRequired": 0,
    "referee1CustomerID": "",
    "referee2CustomerID": "",
    "categoryOfAccount": "",
    "sectorCode": "",
    "tin": "0985674395",
    "pep": true,
    "bvn": "22237461166"
}'
```

</details>

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "string",
    "customerID": "string",
    "customerInformationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "documentIdentifier": "string"
  }
}
```

{% endtab %}
{% endtabs %}

[^1]: This is the maximum number of characters allowed.


# Search Individual Customer

Search for an existing customer account profile information by providing the unique `id` of the account you want to update to request a query.

<mark style="color:blue;">`GET`</mark> `/api/Account/v1/SearchIndividualCustomers`

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Query Parameter**

<table><thead><tr><th width="215">Name</th><th width="118">Data Type</th><th>Description</th><th data-hidden data-type="checkbox">Required</th></tr></thead><tbody><tr><td>ID</td><td>uuid</td><td>Unique identifier for the customer (UUID format)</td><td>false</td></tr><tr><td>CustomerID</td><td>string </td><td>Unique identifier for the customer</td><td>false</td></tr><tr><td>OldCustomerID</td><td>string</td><td>Previous customer identifier, if applicable</td><td>false</td></tr><tr><td>Title</td><td>string</td><td>Title of the customer (e.g., Mr, Mrs, Miss)</td><td>false</td></tr><tr><td>CustomerType</td><td>string</td><td>Type of customer (e.g., individual, corporate)</td><td>false</td></tr><tr><td>Name</td><td>string</td><td>Full name of the customer</td><td>false</td></tr><tr><td>FirstName</td><td>string</td><td>First name of the customer</td><td>false</td></tr><tr><td>LastName</td><td>string</td><td>Last name of the customer</td><td>false</td></tr><tr><td>OtherNames</td><td>string</td><td>Other names of the customer</td><td>false</td></tr><tr><td>HouseAddress</td><td>string</td><td>Residential address of the customer</td><td>false</td></tr><tr><td>MaritalStatus</td><td>string</td><td>Marital status of the customer</td><td>false</td></tr><tr><td>MaidenName</td><td>string</td><td>Maiden name of the customer</td><td>false</td></tr><tr><td>Religion</td><td>string</td><td>Religion of the customer</td><td>false</td></tr><tr><td>PhoneNumber</td><td>string</td><td>Phone number of the customer</td><td>false</td></tr><tr><td>Email</td><td>string</td><td>Email address of the customer</td><td>false</td></tr><tr><td>Hometown</td><td>string</td><td>Hometown of the customer</td><td>false</td></tr><tr><td>DateOfBirth</td><td>dateTime</td><td>Date of birth of the customer</td><td>false</td></tr><tr><td>Nationality</td><td>string</td><td>Nationality of the customer</td><td>false</td></tr><tr><td>State</td><td>string</td><td>State of origin or residence</td><td>false</td></tr><tr><td>LGA</td><td>string</td><td>Local Government Area (LGA)</td><td>false</td></tr><tr><td>MeansOfIdentification</td><td>string</td><td>Type of identification used</td><td>false</td></tr><tr><td>IDNumber</td><td>string</td><td>Identification number for the provided ID</td><td>false</td></tr><tr><td>NOKName</td><td>string</td><td>Next of kin's name</td><td>false</td></tr><tr><td>NOKAddress</td><td>string</td><td>Next of kin's address</td><td>false</td></tr><tr><td>NOKGender</td><td>string</td><td>Next of kin's gender</td><td>false</td></tr><tr><td>NOKRelationship</td><td>string</td><td>Relationship of the next of kin to the customer</td><td>false</td></tr><tr><td>NOKPhoneNumber</td><td>string</td><td>Next of kin's phone number</td><td>false</td></tr><tr><td>NOKEmail</td><td>string</td><td>Next of kin's email address</td><td>false</td></tr><tr><td>Occupation</td><td>string</td><td>Occupation of the customer</td><td>false</td></tr><tr><td>EmployerName</td><td>string</td><td>Employer's name</td><td>false</td></tr><tr><td>EmployerAddress</td><td>string</td><td>Employer's address</td><td>false</td></tr><tr><td>OfficePhoneNumber</td><td>string</td><td>Office phone number of the customer</td><td>false</td></tr><tr><td>Description</td><td>string</td><td>Description of the customer or account</td><td>false</td></tr><tr><td>OfficialAddress</td><td>string</td><td>Official address of the customer</td><td>false</td></tr><tr><td>BusinessPhoneNumber</td><td>string</td><td>Business phone number</td><td>false</td></tr><tr><td>NatureOfBusiness</td><td>string</td><td>Nature of the business</td><td>false</td></tr><tr><td>IndustrialSector</td><td>string</td><td>Code representing the industrial sector</td><td>false</td></tr><tr><td>RegistrationDate</td><td>dateTime</td><td>Date of business registration</td><td>false</td></tr><tr><td>IncorporationDate</td><td>dateTime</td><td>Date of business incorporation</td><td>false</td></tr><tr><td>RegistrationNumber</td><td>string</td><td>Business registration number</td><td>false</td></tr><tr><td>ContactPersonName</td><td>string</td><td>Name of the contact person</td><td>false</td></tr><tr><td>ContactPersonPhoneNumber</td><td>string</td><td>Phone number of the contact person</td><td>false</td></tr><tr><td>CountryOfOperation</td><td>string</td><td>Country where the business operates</td><td>false</td></tr><tr><td>StateOfOperation</td><td>string</td><td>State where the business operates</td><td>false</td></tr><tr><td>StartDate</td><td>dateTime</td><td>Start date for the business or activity</td><td>false</td></tr><tr><td>EndDate</td><td>dateTime</td><td>End date for the business or activity</td><td>false</td></tr><tr><td>PageNumber</td><td>integer</td><td>Page number for pagination purposes</td><td>false</td></tr><tr><td>PageSize</td><td>integer</td><td>Number of items per page for pagination</td><td>true</td></tr><tr><td>SortColumn</td><td>string</td><td>Column by which you want to sort the results: (e.g., <code>accountName</code>, <code>accountType</code>, <code>accesslevel</code>)</td><td>true</td></tr><tr><td>Direction</td><td>string</td><td>Direction of the sort (e.g., <code>ascending</code>, <code>descending</code>)</td><td>true</td></tr><tr><td>BVN</td><td>string</td><td>Bank Verification Number (BVN)</td><td>true</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Account/v1/SearchIndividualCustomers' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;'
```

</details>

<details>

<summary>Response : <code>200</code></summary>

```
//request successful
```

</details>


# Customer Balance Inquiry

This request retrieves the account balance based on the provided account number. You will need to pass the customer's `accountNumber` in the request query, you also provide a `request-refrence` to the query.

<mark style="color:blue;">`GET`</mark> `/api/account/v1/getaccountbalancebyaccountnumber`

\
This endpoint is valuable for applications requiring real-time account balance data access and is particularly useful for financial systems and account management tools.

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Query Parameter**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>Customer's account number</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/account/v1/getaccountbalancebyaccountnumber?AccountNumber=1100029938' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Response : <code>200</code></summary>

```
{
  "status": true,
  "message": "string",
  "data": {
    "accountNumber": "string",
    "ledgerBalance": 0,
    "availableBalance": 0,
    "withdrawableBalance": 0,
    "lienAmount": 0
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Search Group Customer

\
\
This API endpoint allows users to search for a customer's business/corporate account. by providing a unique `id` or `customerID` of the account you want to use to request a query. \
\ <mark style="color:blue;">`GET`</mark> `/api/Account/v1/SearchGroupCustomers`\
\
It retrieves information about customers in a specific group (business/corporate), facilitating efficient group management and customer relationship tracking within the banking system.<br>

**Headers**

<table><thead><tr><th width="368">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td><code>application/json</code></td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td><code>Bearer &#x3C;token></code></td></tr><tr><td>Request-Reference</td><td><code>{unique-reference}</code></td></tr></tbody></table>

**Query Parameter**

<table><thead><tr><th width="207">Name</th><th width="117">Data Type </th><th>Description</th><th data-hidden data-type="checkbox">Required</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>Name of the business or entity</td><td>true</td></tr><tr><td>id</td><td>string</td><td>Unique identifier for the entity (UUID format)</td><td>false</td></tr><tr><td>customerID</td><td>string </td><td>Unique identifier for the customer</td><td>false</td></tr><tr><td>oldCustomerID</td><td>string</td><td>Previous customer identifier, if applicable</td><td>false</td></tr><tr><td>customerType</td><td>string</td><td>Type of customer (e.g., individual, business)</td><td>false</td></tr><tr><td>email</td><td>string</td><td>Email address of the business or entity</td><td>false</td></tr><tr><td>description</td><td>string</td><td>Description of the business or entity</td><td>false</td></tr><tr><td>OfficialAddress</td><td>string</td><td>Official address of the business</td><td>false</td></tr><tr><td>LGA</td><td>string</td><td>Local Government Area (LGA)</td><td>false</td></tr><tr><td>BusinessPhoneNumber</td><td>string</td><td>Business phone number</td><td>false</td></tr><tr><td>NatureOfBusiness</td><td>string</td><td>Nature of the business</td><td>false</td></tr><tr><td>IndustrialSector</td><td>string</td><td>Code representing the industrial sector</td><td>false</td></tr><tr><td>RegistrationDate</td><td>date</td><td>Date of business registration</td><td>false</td></tr><tr><td>IncorporationDate</td><td>date</td><td>Date of business incorporation</td><td>false</td></tr><tr><td>RegistrationNumber</td><td>string</td><td>Business registration number</td><td>false</td></tr><tr><td>ContactPersonName</td><td>string</td><td>Name of the contact person</td><td>false</td></tr><tr><td>ContactPersonPhoneNumber</td><td>string</td><td>Phone number of the contact person</td><td>false</td></tr><tr><td>CountryOfOperation</td><td>string</td><td>Country where the business operates</td><td>false</td></tr><tr><td>StateOfOperation</td><td>string</td><td>State where the business operates</td><td>false</td></tr><tr><td>StartDate</td><td>date</td><td>Start date for the business or activity</td><td>false</td></tr><tr><td>EndDate</td><td>date</td><td>End date for the business or activity</td><td>false</td></tr><tr><td>PageNumber</td><td>integer</td><td>Page number for pagination purposes</td><td>false</td></tr><tr><td>PageSize</td><td>integer</td><td>Number of items per page for pagination</td><td>false</td></tr><tr><td>SortColumn</td><td>string</td><td>Column by which you want to sort the results: (e.g., <code>email</code>, <code>stateOfOperation</code>)</td><td>false</td></tr><tr><td>Direction</td><td>string</td><td>Direction of the sort (e.g., <code>ascending</code>, <code>descending</code>)</td><td>false</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Account/v1/SearchGroupCustomers?Name=Bell%20Cuisine' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer ' \
--header 'request-reference;'
```

</details>

<details>

<summary>Response : <code>200</code></summary>

```
//request successful
```

</details>


# Savings


# Fixed Deposits API

***


# Add Fixed Deposit

The "Add Fixed Deposit" endpoint allows customers to add a fixed deposit account. \
\ <mark style="color:green;">`POST`</mark> `/api/fixeddepositaccount/v1/add`\
\
To create a new fixed deposit account, you need to provide the necessary body parameters, such as `referenceNumber`, `liquidationAccount`, `principalAmount`, and other relevant details.\ <br>

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="174">Name</th><th width="174">Data Type (length)</th><th width="100" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidationAccountType</code></td><td>string</td><td>false</td><td><p>The type of account where funds will be liquidated </p><p><br>The enumerations are: <br><code>1</code> = SavingsAndCurrent <em>(Default)</em><br><code>2</code> = GeneralLedgerAccount</p></td></tr><tr><td><code>liquidationAccount</code></td><td>string <em>(1</em><a data-footnote-ref href="#user-content-fn-1"><em>0)</em></a></td><td>true</td><td>The account number where funds will be liquidated</td></tr><tr><td><code>customerID</code></td><td>string <em>(1</em><a data-footnote-ref href="#user-content-fn-1"><em>0)</em></a></td><td>false</td><td>The unique identifier of the customer (individual or group), is only <strong>optional</strong> if the <code>liquidationType</code> is <code>SavingsAndCurrent</code><br><br><em><mark style="color:orange;">It must be a</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>customerID</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">that exists on the CBA portal.</mark></em></td></tr><tr><td><code>referenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(500)</em></a></td><td>true</td><td>A unique reference number for the fixed deposit account</td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td><p>The product code associated with the fixed deposit account</p><p><br><em><mark style="color:orange;">The</mark></em> <em><mark style="color:orange;"><code>productCode</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">must exist on the CBA portal.</mark></em></p></td></tr><tr><td><code>branchCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The branch code where the fixed deposit account is being created is only <strong>optional</strong> if the <code>liquidationType</code> is <code>SavingsAndCurrent</code><br><br><em><mark style="color:orange;">The</mark></em> <em><mark style="color:orange;"><code>branchCode</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">must exist on the CBA portal. The system will use the account branch if empty or null</mark>.</em></td></tr><tr><td><code>principalAmount</code></td><td>integer</td><td>true</td><td>The principal amount being deposited into the fixed deposit account<br><br><em><mark style="color:orange;">The amount should be sent in the base unit of the currency. For example, <code>1000</code> naira will be sent as <code>1000</code> * <code>100</code>.</mark></em> </td></tr><tr><td><code>tenure</code></td><td>integer</td><td>true</td><td>The tenure or duration of the fixed deposit in months</td></tr><tr><td><code>commencementDate</code></td><td>date</td><td>true</td><td>The start date of the fixed deposit</td></tr><tr><td><code>useProductInterestRate</code></td><td>boolean</td><td>false</td><td>Set <code>true</code> to use the default interest rate of the product and false for no</td></tr><tr><td><code>applicableInterestCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The interest code should be applied if you are not using the product's default interest rate.</td></tr><tr><td><code>applicableInterestRate</code></td><td>integer</td><td>true</td><td>The interest rate to apply if not using the product's default<br><br><em><mark style="color:orange;">The percentage must be rounded to a maximum of three decimal places.</mark></em></td></tr><tr><td><code>partLiquidationCharge</code></td><td>integer</td><td>false</td><td>The charge applied if the fixed deposit is partially liquidated<br><br><em><mark style="color:orange;">The percentage must be rounded to a maximum of three decimal places.</mark></em></td></tr><tr><td><code>holdFundAtMaturity</code></td><td>boolean</td><td>false</td><td>Indicates whether to hold the funds in the account at maturity, Set true  for <code>yes</code> and <code>false</code> for no</td></tr><tr><td><code>applyRollover</code></td><td>boolean</td><td>false</td><td>Indicates whether to apply rollover at maturity</td></tr><tr><td><code>rolloverOption</code></td><td>string</td><td>false</td><td>The rollover option to apply <br><br>The enumerations are:<br><code>1</code> = RolloverPrincipalOnly<br><code>2</code> = RolloverPrincipalAndInterest</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/fixeddepositaccount/v1/add' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "liquidationAccountType": "string",
  "liquidationAccount": "string",
  "customerID": "string",
  "referenceNumber": "string",
  "productCode": "string",
  "branchCode": "string",
  "principalAmount": 0,
  "tenure": 0,
  "commencementDate": "2023-01-20T23:43:25.269Z",
  "useProductInterestRate": true,
  "applicableInterestCode": "string",
  "applicableInterestRate": 0,
  "partLiquidationCharge": 0,
  "holdFundAtMaturity": true,
  "applyRollover": true,
  "rolloverOption": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Update Fixed Deposit

To update an existing fixed deposit account, you need to make a POST request to the specified endpoint, including the necessary URL path parameters. Additionally, you should pass the required payload in the request body, such as the existing fixed deposit `id` , `applicableInterestRate`,  and any other relevant fields that need to be updated.

<mark style="color:orange;">`PUT`</mark>` ``/api/fixeddepositaccount/v1/update`\
\
A successful request will return a confirmation message in the response.\
\
This process allows you to modify the details of an existing fixed deposit account.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="174">Name</th><th width="174">Data Type (length)</th><th width="100" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>The unique identifier for the fixed deposit (Guid)</td></tr><tr><td><code>useProductInterestRate</code></td><td>boolean</td><td>false</td><td>Set <code>true</code> to use the default interest rate of the product and false for no</td></tr><tr><td><code>applicableInterestCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>The interest code should be applied if you are not using the product's default interest rate.</td></tr><tr><td><code>applicableInterestRate</code></td><td>integer</td><td>true</td><td>The interest rate to apply if not using the product's default<br><br><em><mark style="color:orange;">The percentage must be rounded to a maximum of three decimal places.</mark></em></td></tr><tr><td><code>partLiquidationCharge</code></td><td>integer</td><td>false</td><td>The charge applied if the fixed deposit is partially liquidated<br><br><em><mark style="color:orange;">The percentage must be rounded to a maximum of three decimal places.</mark></em></td></tr><tr><td><code>holdFundAtMaturity</code></td><td>boolean</td><td>false</td><td>Indicates whether to hold the funds in the account at maturity, Set true  for <code>yes</code> and <code>false</code> for no</td></tr><tr><td><code>applyRollover</code></td><td>boolean</td><td>false</td><td>Indicates whether to apply rollover at maturity</td></tr><tr><td><code>rolloverOption</code></td><td>string</td><td>false</td><td>The rollover option to apply <br><br>The enumerations are:<br><code>1</code> = RolloverPrincipalOnly<br><code>2</code> = RolloverPrincipalAndInterest</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/fixeddepositaccount/v1/update' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "useProductInterestRate": true,
  "applicableInterestCode": "string",
  "applicableInterestRate": 0,
  "partLiquidationCharge": 0,
  "holdFundAtMaturity": true,
  "applyRollover": true,
  "rolloverOption": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string"
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Search Fixed Deposit Account

To search for an existing fixed deposit account, you need to make a GET request to the specified endpoint:

<mark style="color:blue;">`GET`</mark> `/api/FixedDepositAccount/v1/Search`\
\
This process allows you to retrieve information about existing fixed deposit accounts based on specific search parameters.

\
A successful request will return the details of the fixed deposit account that matches the search criteria.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="196">Name</th><th width="177">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The unique number identifying the account</td><td></td></tr><tr><td><code>customerID</code></td><td>string</td><td>The unique identifier of the customer associated with the account</td><td></td></tr><tr><td><code>accountName</code></td><td>string</td><td>The name associated with the account</td><td></td></tr><tr><td><code>productCode</code></td><td>string</td><td>The code of the product associated with the account</td><td></td></tr><tr><td><code>accountOfficerCode</code></td><td>string</td><td>The code of the account officer managing the account</td><td></td></tr><tr><td><code>accountStatus</code></td><td>string</td><td>The current status of the account (e.g., Active, Inactive)</td><td></td></tr><tr><td><code>hasDisbursed</code></td><td>boolean</td><td>Indicates whether funds have been disbursed from the account using <code>true</code> or <code>false</code></td><td></td></tr><tr><td><code>startDate</code></td><td>date</td><td>The start date of the account activity</td><td></td></tr><tr><td><code>endDate</code></td><td>date</td><td>The end date of the account activity</td><td></td></tr><tr><td><code>pageNumber</code></td><td>integer</td><td>The current page number for pagination</td><td></td></tr><tr><td><code>pageSize</code></td><td>integer</td><td>The number of records per page</td><td></td></tr><tr><td><code>sortColumn</code></td><td>string</td><td>The column by which the results are sorted</td><td></td></tr><tr><td><code>direction</code></td><td>string</td><td>The direction of the sort (e.g., ascending or  descending)</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/FixedDepositAccount/v1/Search?AccountNumber=1000002993&CustomerID=001&AccountName=Test&ProductCode=001&AccountOfficerCode=003&AccountStatus=Active&HasDisbursed=true&StartDate=2022-01-01&EndDate=2022-03-04&PageNumber=1&PageSize=10&SortColumn=DateCreated&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountNumber": "string",
        "accountName": "string",
        "productName": "string",
        "limit": 0,
        "tenure": 0,
        "dateCreated": "2023-01-29T15:00:25.475Z",
        "commencementDate": "2023-01-29T15:00:25.475Z",
        "maturityDate": "2023-01-29T15:00:25.475Z",
        "useDefaultFee": true,
        "feeCodes": [
          {
            "feeCode": "string"
          }
        ],
        "feeAmount": 0,
        "useDefaultInterest": true,
        "interestCode": "string",
        "interestAmount": 0,
        "securityPledged": true,
        "securityType": "string",
        "securityValuation": 0,
        "description": "string",
        "initiator": "string",
        "guarantorName": "string",
        "guarantorPhoneNumber": "string",
        "status": "string",
        "ledgerBalance": "string",
        "availableBalance": "string",
        "withdrawableBalance": "string"
      }
    ],
    "recordCount": 0
  }
}
```

</details>


# Transfer API


# Name Enquiry

The "Name Enquiry" endpoint allows customers to perform name inquiries on a customer's account. It facilitates retrieving recipient name information for verification before initiating a transfer.&#x20;

<mark style="color:green;">`POST`</mark> `/api/transfer/v1/NameEnquiry`

You need to provide the necessary parameters, such as `destinationAccountNumber`,`destinationInstitutionCode` and other identifying information, to retrieve the name associated with the recipient account.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="182">Name</th><th width="174">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>destinationAccountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The designated account number for which the name enquiry is performed</td></tr><tr><td><code>sourceAccountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td>The sender's account number<br><br><em><mark style="color:orange;">This field is required for transfer gateways like Interswitch, so you should always pass it.</mark></em></td></tr><tr><td><code>destinationInstitutionCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(6)</em></a></td><td>true</td><td>The institution code of the destination bank</td></tr><tr><td><code>amount</code></td><td>integer</td><td>false</td><td>The intended transfer amount in <strong>Kobo.</strong><br><br><em><mark style="color:orange;">This field is required for transfer gateways like Interswitch, so you should always pass it.</mark></em></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/transfer/v1/NameEnquiry' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "accountNumber": "string",
  "destinationInstitutionCode": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "destinationInstitutionCode": "string",
  "channelCode": "string",
  "accountNumber": "string",
  "accountName": "string",
  "transactionReference": "string",
  "bankVerificationNumber": "string",
  "address": "string",
  "kycLevel": "int",
  "responseCode": "string",
  "message": "string",
  "clientRef": "string",
  "sessionID": "string"
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Local Funds Transfer

This endpoint allows customers to initiate local fund transfers and transactions. It facilitates the transfer of funds between accounts within the same institution. \
\ <mark style="color:green;">`POST`</mark> `/api/transfer/v1/localfundtransfer`\
\
You need to provide the necessary parameters, such as `debitAccount`, `creditAccount`, `amount`,  and other required information to successfully initiate a local fund transfer.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="178">Name</th><th width="174">Data Type (length)</th><th width="105" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>debitAccount</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>true</td><td>The account to be debited on Udara360<br><br><em><mark style="color:orange;">This can either be a customer account or a general ledger account</mark></em></td></tr><tr><td><code>creditAccount</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>true</td><td>The account to be credited<br><br><em><mark style="color:orange;">This can either be a customer account or a general ledger account</mark></em></td></tr><tr><td><code>amount</code></td><td>integer</td><td>true</td><td>The amount to be transferred<br><br><em><mark style="color:orange;">The amount must be provided in the base currency, e.g. NGN 5000.50 should be provided as 500050 kobo</mark></em></td></tr><tr><td><code>feeCharge</code></td><td>integer</td><td>false</td><td>The fee charge is applied to the transaction<br><br><em><mark style="color:orange;">The amount must be provided in the base currency, e.g. NGN 5000.50 should be provided as 500050 kobo</mark></em></td></tr><tr><td><code>feeIncomeGL</code></td><td>string</td><td>false</td><td>The general ledger for fee income<br><br><em><mark style="color:orange;">This is only required if</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>FeeCharge</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">is greater than</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>0</code></mark></em></td></tr><tr><td><code>instrumentNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>The instrument number associated with the transaction</td></tr><tr><td><code>narration</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(5-40)</em></a></td><td>true</td><td>A description or narration of the transaction</td></tr><tr><td><code>unplaceLienAfterPosting</code></td><td>boolean</td><td>false</td><td>Whether to remove the lien after posting<br><br><em><mark style="color:orange;">If the originator account has a lien, that should not be considered and removed after a successful transaction</mark></em></td></tr><tr><td><code>lienReferenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>The reference number for the lien<br><br><em><mark style="color:orange;">This is only required if UnplaceLienAfterPosting is</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>true</code></mark></em></td></tr><tr><td><code>merchant</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>The merchant involved in the transaction can be any for bill payment (E.g., DSTV, MTN, or Bet9ja)</td></tr><tr><td><code>postingsTransactionType</code></td><td>string</td><td>true</td><td><p>The type of transaction for postings is based on the originator and beneficiary accounts. This allows the system to set the right sort code for easy transaction grouping<br><br>The enumerations are:<br><code>1</code> = GLCustomer </p><p><code>2</code> = GLGL </p><p><code>3</code> = CustomerCustomer<br><br></p></td></tr><tr><td><code>additionalMetadata</code></td><td>object</td><td>false</td><td>Additional metadata related to the transaction</td></tr><tr><td><code>additionalMetadata.orig_AcctNo</code></td><td>string</td><td>false</td><td>The originator's account number</td></tr><tr><td><code>additionalMetadata.orig_Name</code></td><td>string</td><td>false</td><td>The originator's account holder's name</td></tr><tr><td><code>additionalMetadata.orig_BVN</code></td><td>string</td><td>false</td><td>The originator's account holder's Bank Verification Number (BVN)</td></tr><tr><td><code>additionalMetadata.orig_BankCode</code></td><td>string</td><td>false</td><td>The originator's bank's code</td></tr><tr><td><code>additionalMetadata.orig_BankName</code></td><td>string</td><td>false</td><td>The originator's bank's name</td></tr><tr><td><code>additionalMetadata.benf_AcctNo</code></td><td>string</td><td>false</td><td>The beneficiary account number</td></tr><tr><td><code>additionalMetadata.benf_Name</code></td><td>string</td><td>false</td><td>The beneficiary's name</td></tr><tr><td><code>additionalMetadata.benf_BVN</code></td><td>string</td><td>false</td><td>The beneficiary's Bank Verification Number (BVN)</td></tr><tr><td><code>additionalMetadata.benf_BankCode</code></td><td>string</td><td>false</td><td>The beneficiary bank's code</td></tr><tr><td><code>additionalMetadata.benf_BankName</code></td><td>string</td><td>false</td><td>The beneficiary bank's name</td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/transfer/v1/localfundtransfer' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "debitAccount": "string",
  "creditAccount": "string",
  "amount": 0,
  "feeCharge": 0,
  "feeIncomeGL": "string",
  "instrumentNumber": "stringstri",
  "narration": "string",
  "unplaceLienAfterPosting": true,
  "lienReferenceNumber": "string",
  "merchant": "string",
  "postingsTransactionType": 1,
  "additionalMetadata": {
    "orig_AcctNo": "string",
    "orig_Name": "string",
    "orig_BVN": "string",
    "orig_BankCode": "string",
    "orig_BankName": "string",
    "benf_AcctNo": "string",
    "benf_Name": "string",
    "benf_BVN": "string",
    "benf_BankCode": "string",
    "benf_BankName": "string"
  }'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Outward Transfer

This endpoint allows users to initiate outward transfers to external accounts or institutions. It facilitates the transfer of funds from the customer's account to external accounts or institutions.\
\ <mark style="color:green;">`POST`</mark> `/api/transfer/v1/outwardtransfer`\
\
You need to provide the necessary parameters, such as `beneficiaryAccountName`, `originatorAccountName`, `amount`, and other required information to successfully initiate an outward transfer.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="167">Name</th><th width="172">Data Type (length)</th><th width="102" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>nameEnquiryRef</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The reference code from a name enquiry</td></tr><tr><td><code>amount</code></td><td>integer</td><td>true</td><td>The amount to be transferred in kobo<br><br><em><mark style="color:orange;">The amount must be provided in the base currency, e.g. NGN 5000.50 should be provided as 500050 kobo</mark></em></td></tr><tr><td><code>fee</code></td><td>integer <em>(nullible)</em></td><td>false</td><td>The fee associated with the transfer.  Any passed fee will override the existing configured fee by the institution within the CBA <br><br>Pass the fee as <code>0</code> if you do not want to charge a fee. The fee is also charged in Kobo</td></tr><tr><td><code>beneficiaryAccountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>The account name of the transfer's beneficiary</td></tr><tr><td><code>beneficiaryAccountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The account number of the transfer's beneficiary on Udara360 to credit</td></tr><tr><td><code>beneficiaryBankName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>The bank name of the transfer's beneficiary</td></tr><tr><td><code>beneficiaryBankVerificationNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>The BVN of the transfer's beneficiary</td></tr><tr><td><code>beneficiaryKycLevel</code></td><td>integer</td><td>false</td><td>The KYC level of the transfer's beneficiary</td></tr><tr><td><code>originatorAccountName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>true</td><td>The name of the account initiating the transfer</td></tr><tr><td><code>originatorAccountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The account number initiating the transfer</td></tr><tr><td><code>originatorBankVerificationNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(11)</em></a></td><td>false</td><td>The BVN of the account initiating the transfer</td></tr><tr><td><code>originatorKycLevel</code></td><td>integer</td><td>false</td><td>The KYC level of the originator</td></tr><tr><td><code>destinationInstitutionCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(6)</em></a></td><td>true</td><td>The bank code of the destination institution</td></tr><tr><td><code>originatorNarration</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(5-40)</em></a></td><td>true</td><td>The narration from the originator for the transfer</td></tr><tr><td><code>paymentReference</code></td><td>string</td><td>true</td><td>The name enquiry reference for the transfer</td></tr><tr><td><code>transactionLocation</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>The location of the transaction</td></tr><tr><td><code>beneficiaryNarration</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(5-40)</em></a></td><td>true</td><td>The narration for the beneficiary</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/transfer/v1/outwardtransfer' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "amount": 0,
  "fee": 0,
  "beneficiaryAccountName": "string",
  "beneficiaryAccountNumber": "string",
  "beneficiaryBankName": "string",
  "beneficiaryBankVerificationNumber": "string",
  "beneficiaryKycLevel": 0,
  "originatorAccountName": "string",
  "originatorAccountNumber": "string",
  "originatorBankVerificationNumber": "string",
  "originatorKycLevel": 0,
  "destinationInstitutionCode": "string",
  "nameEnquiryRef": "string",
  "originatorNarration": "string",
  "paymentReference": "string",
  "transactionLocation": "string",
  "beneficiaryNarration": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string",
    "sessionID": "string"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Transaction Status at Query (TSQ)

The "Transaction Status Query" endpoint allows customers to query a transaction's status. It enables the retrieval of a specific transaction's current status, providing information on whether the transaction is pending, successful, or failed.<br>

<mark style="color:blue;">`GET`</mark> `/api/Transfer/v1/TSQ`

\
To retrieve the current status of the transaction, you need to provide the `TransactionRef` to the query request.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="196">Name</th><th width="177">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>TransactionRef</code></td><td>string</td><td>The unique identifier for the account transaction can be a transaction reference  <code>transactionID</code> or <code>sessionID</code> of the transaction</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/LoanAccount/v1/Search?AccountNumber=1000002992&CustomerID=001&AccountName=Test&ProductCode=001&AccountOfficerCode=002&AccountStatus=Active&HasDisbursed=Yes&StartDate=2022-01-01&EndDate=2022-03-09&PageNumber=1&PageSize=10&SortColumn=DateCreated&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountNumber": "string",
        "name": "string",
        "accountStatus": "string",
        "customerID": "string",
        "linkedNumber": "string",
        "accountOfficerCode": "string",
        "productCode": "string",
        "lendingModel": "string",
        "economicSector": "string",
        "guarantorID1": "string",
        "guarantor1": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "customerID": "string",
          "name": "string",
          "phoneNumber": "string"
        },
        "guarantorID2": "string",
        "guarantor2": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "customerID": "string",
          "name": "string",
          "phoneNumber": "string"
        },
        "penaltyGracePeriod": 0,
        "loanAmount": 0,
        "dateCreated": "2023-01-29T15:05:30.196Z",
        "dateLastModified": "2023-01-29T15:05:30.196Z",
        "approvedDate": "2023-01-29T15:05:30.196Z",
        "interestCommencementDate": "2023-01-29T15:05:30.196Z",
        "tenure": 0,
        "startDate": "2023-01-29T15:05:30.196Z",
        "maturityDate": "2023-01-29T15:05:30.196Z",
        "installmentAmount": 0,
        "hasCollateralPledge": true,
        "collateralType": "string",
        "collateralValuation": 0,
        "collateralDescription": "string",
        "principalRepaymentType": "string",
        "principalFrequency": "string",
        "principalToBeRepaidEvery": 0,
        "principalInstallment": 0,
        "applicableInterestCode": "string",
        "interestName": "string",
        "useProductInterestRate": true,
        "applicableInterestRate": 0,
        "defaultingInterestRate": 0,
        "interestRepaymentType": "string",
        "interestFrequency": "string",
        "interestToBeRepaidEvery": 0,
        "interestInstallment": 0,
        "interestAccrualMode": "string",
        "interestFreePrincipalAmount": 0,
        "securityDeposit": 0,
        "applyLoanFees": true,
        "productName": "string",
        "accountOfficerName": "string",
        "branchName": "string",
        "ledgerBalance": 0,
        "unpaidPrincipal": 0,
        "outstandingLoanPrincipal": 0,
        "outstandingLoanInterest": 0,
        "outstandingLoanFee": 0,
        "hasDisbursed": true,
        "hasOutstandingLoan": true,
        "dateCreatedFinancial": "2023-01-29T15:05:30.196Z",
        "firstInstallmentDate": "2023-01-29T15:05:30.196Z",
        "closureDate": "2023-01-29T15:05:30.196Z",
        "enableRepaymentTracker": true,
        "repaymentTrackerInDays": 0,
        "loanFees": [
          {
            "loanFeeCode": "string"
          }
        ],
        "paymentSchedules": [
          {
            "loanAccountNumber": "string",
            "linkedNumber": "string",
            "principal": 0,
            "interest": 0,
            "fee": 0,
            "totalRepayment": 0,
            "paymentDate": "string",
            "paymentDate_Date": "2023-01-29T15:05:30.196Z",
            "hasProcessed": true,
            "paymentStatus": "string"
          }
        ]
      }
    ],
    "recordCount": 0
  }
}
```

</details>

{% hint style="danger" %}
Do not base the transaction state on the status field in the response. Always use the response code.
{% endhint %}


# Postings API


# Post Transactions

The "Post Transactions" endpoint allows users to initiate a new transaction within the system. This can be done by sending a POST request to the following endpoint:\
\ <mark style="color:green;">`POST`</mark> `/api/postings/v1/posttransaction`\
\
When using this endpoint, users need to include the necessary parameters to describe the transaction accurately. This includes details such as `debitAccount`, `creditAccount`, `amount`, and other relevant information. After a successful request, a new transaction will be initiated within the system.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="178">Name</th><th width="174">Data Type (length)</th><th width="105" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>debitAccount</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>true</td><td>The account to be debited on Udara360<br><br><em><mark style="color:orange;">This can either be a customer account or a general ledger account</mark></em></td></tr><tr><td><code>creditAccount</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>true</td><td>The account to be credited<br><br><em><mark style="color:orange;">This can either be a customer account or a general ledger account</mark></em></td></tr><tr><td><code>amount</code></td><td>integer</td><td>true</td><td>The amount to be transferred<br><br><em><mark style="color:orange;">The amount must be provided in the base currency, e.g. NGN 5000.50 should be provided as 500050 kobo</mark></em></td></tr><tr><td><code>feeCharge</code></td><td>integer</td><td>false</td><td>The fee charge is applied to the transaction<br><br><em><mark style="color:orange;">The amount must be provided in the base currency, e.g. NGN 5000.50 should be provided as 500050 kobo</mark></em></td></tr><tr><td><code>feeIncomeGL</code></td><td>string</td><td>false</td><td>The general ledger for fee income<br><br><em><mark style="color:orange;">This is only required if</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>FeeCharge</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">is greater than</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>0</code></mark></em></td></tr><tr><td><code>instrumentNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>The instrument number associated with the transaction</td></tr><tr><td><code>narration</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(5-40)</em></a></td><td>true</td><td>A description or narration of the transaction</td></tr><tr><td><code>unplaceLienAfterPosting</code></td><td>boolean</td><td>false</td><td>Whether to remove the lien after posting<br><br><em><mark style="color:orange;">If the originator account has a lien, that should not be considered and removed after a successful transaction</mark></em></td></tr><tr><td><code>lienReferenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>The reference number for the lien<br><br><em><mark style="color:orange;">This is only required if UnplaceLienAfterPosting is</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>true</code></mark></em></td></tr><tr><td><code>merchant</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>The merchant involved in the transaction can be any for bill payment (E.g., DSTV, MTN, or Bet9ja)</td></tr><tr><td><code>postingsTransactionType</code></td><td>string</td><td>true</td><td><p>The type of transaction for postings is based on the originator and beneficiary accounts. This allows the system to set the right sort code for easy transaction grouping<br><br>The enumerations are:<br><code>1</code> = GLCustomer </p><p><code>2</code> = GLGL </p><p><code>3</code> = CustomerCustomer<br><br></p></td></tr><tr><td><code>additionalMetadata</code></td><td>object</td><td>false</td><td>Additional metadata related to the transaction</td></tr><tr><td><code>additionalMetadata.orig_AcctNo</code></td><td>string</td><td>false</td><td>The originator's account number</td></tr><tr><td><code>additionalMetadata.orig_Name</code></td><td>string</td><td>false</td><td>The originator's account holder's name</td></tr><tr><td><code>additionalMetadata.orig_BVN</code></td><td>string</td><td>false</td><td>The originator's account holder's Bank Verification Number (BVN)</td></tr><tr><td><code>additionalMetadata.orig_BankCode</code></td><td>string</td><td>false</td><td>The originator's bank's code</td></tr><tr><td><code>additionalMetadata.orig_BankName</code></td><td>string</td><td>false</td><td>The originator's bank's name</td></tr><tr><td><code>additionalMetadata.benf_AcctNo</code></td><td>string</td><td>false</td><td>The beneficiary account number</td></tr><tr><td><code>additionalMetadata.benf_Name</code></td><td>string</td><td>false</td><td>The beneficiary's name</td></tr><tr><td><code>additionalMetadata.benf_BVN</code></td><td>string</td><td>false</td><td>The beneficiary's Bank Verification Number (BVN)</td></tr><tr><td><code>additionalMetadata.benf_BankCode</code></td><td>string</td><td>false</td><td>The beneficiary bank's code</td></tr><tr><td><code>additionalMetadata.benf_BankName</code></td><td>string</td><td>false</td><td>The beneficiary bank's name</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/postings/v1/posttransaction' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "debitAccount": "string",
  "creditAccount": "string",
  "amount": 0,
  "feeCharge": 0,
  "feeIncomeGL": "string",
  "instrumentNumber": "stringstri",
  "narration": "string",
  "unplaceLienAfterPosting": true,
  "lienReferenceNumber": "string",
  "merchant": "string",
  "postingsTransactionType": "string",
  "additionalMetadata": {
    "orig_AcctNo": "string",
    "orig_Name": "string",
    "orig_BVN": "string",
    "orig_BankCode": "string",
    "orig_BankName": "string",
    "benf_AcctNo": "string",
    "benf_Name": "string",
    "benf_BVN": "string",
    "benf_BankCode": "string",
    "benf_BankName": "string"
  }'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string"
  }
}
```

</details>

{% hint style="info" %}
Visit the [response code page](/udara360-docs-1/getting-started/http-response-code#postings-response-code) for a list of all posting status code and their descriptions.
{% endhint %}

[^1]: This is the maximum number of characters allowed.


# Post Transactions For Multiple Debits and Credits

This endpoint enables users to process multiple debits and credits efficiently. When making a request to this endpoint, you will need to provide the required body parameters, including `accountNumber`, `amount`, `recordType`, `narration`.and any other relevant details.

<mark style="color:green;">`POST`</mark> `/api/postings/v1/post`<br>

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="171">Name</th><th width="173">Data Type (length)</th><th width="102" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>postingEntryRequest</code></td><td>array</td><td>true</td><td>An array of objects detailing the accounts involved in the posting</td></tr><tr><td><code>postingEntryRequest.accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>true</td><td>The account number for the transaction<br><br><em><mark style="color:orange;">This can either be a customer account or a general ledger account</mark></em></td></tr><tr><td><code>postingEntryRequest.amount</code></td><td>integer</td><td>true</td><td>The amount involved in the transaction<br><br><em><mark style="color:orange;">The amount must be provided in the base currency, e.g. NGN 5000.50 should be provided as 500050 kobo</mark></em></td></tr><tr><td><code>postingEntryRequest.recordType</code></td><td>integer</td><td>true</td><td>The type of record (e.g., debit or credit)<br><br>The enumerations are:<br><code>1</code> = Debit<br><code>2</code> = Credit<br><br><em><mark style="color:orange;">The sum of Total Debits (Amount) must equal the Sum of Total Credits (Amount); the number of Debit entries can differ.</mark></em></td></tr><tr><td><code>postingEntryRequest.narration</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(5-40)</em></a></td><td>true</td><td>A description or narration of the transaction</td></tr><tr><td><code>postingEntryRequest.instrumentNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>false</td><td>This is the instrument number associated with the transaction. The system generates a <strong>UUID</strong> if empty. <br><br><em><mark style="color:orange;">We recommend you pass a value if you perform a transaction retrial.</mark></em></td></tr><tr><td><code>postingDataRequest</code></td><td>object</td><td>false</td><td>The object containing additional data for the posting</td></tr><tr><td><code>postingDataRequest.unplaceLienAfterPosting</code></td><td>boolean</td><td>false</td><td>Whether to remove the lien after posting, set true for <code>yes</code> and false for <code>no</code></td></tr><tr><td><code>postingDataRequest.lienReferenceNumber</code></td><td>string</td><td>false</td><td>The reference number for the lien<br><br><em><mark style="color:orange;">This is only required if UnplaceLienAfterPosting is</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>true</code></mark></em></td></tr><tr><td><code>postingDataRequest.merchant</code></td><td>string</td><td>false</td><td>The merchant involved in the transaction can be any for bill payment (E.g., DSTV, MTN, or Bet9ja)</td></tr><tr><td><code>postingDataRequest.additionalMetadata</code></td><td>object</td><td>false</td><td>Additional metadata related to the transaction</td></tr><tr><td><code>postingDataRequest.orig_AcctNo</code></td><td>string</td><td>false</td><td>The originator's account number</td></tr><tr><td><code>postingDataRequest.orig_Name</code></td><td>string</td><td>false</td><td>The originator's account holder's name</td></tr><tr><td><code>postingDataRequest.orig_BVN</code></td><td>string</td><td>false</td><td>The originator's account holder's Bank Verification Number (BVN)</td></tr><tr><td><code>postingDataRequest.orig_BankCode</code></td><td>string</td><td>false</td><td>The originator's bank's code</td></tr><tr><td><code>postingDataRequest.orig_BankName</code></td><td>string</td><td>false</td><td>The originator's bank's name</td></tr><tr><td><code>postingDataRequest.benf_AcctNo</code></td><td>string</td><td>false</td><td>The beneficiary account number</td></tr><tr><td><code>postingDataRequest.benf_Name</code></td><td>string</td><td>false</td><td>The beneficiary's name</td></tr><tr><td><code>postingDataRequest.benf_BVN</code></td><td>string</td><td>false</td><td>The beneficiary's Bank Verification Number (BVN)</td></tr><tr><td><code>postingDataRequest.benf_BankCode</code></td><td>string</td><td>false</td><td>The beneficiary bank's code</td></tr><tr><td><code>postingDataRequest.benf_BankName</code></td><td>string</td><td>false</td><td>The beneficiary bank's name</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/postings/v1/post' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "postingEntryRequest": [
    {
      "accountNumber": "1000000699",
      "amount": 10000,
      "recordType": 1,
      "narration": "test",
      "instrumentNumber": "7564238"
    },
{
      "accountNumber": "1000000675",
      "amount": 10000,
      "recordType": 2,
      "narration": "test",
      "instrumentNumber": "7564238"
    }
  ],
  "postingDataRequest": {
    "unplaceLienAfterPosting": false,
    "lienReferenceNumber": "",
    "merchant": "",
    "additionalMetadata": {
    "orig_AcctNo": "1000000699",
    "orig_Name": "Test User",
    "orig_BVN": "11111111111",
    "orig_BankCode": "999998",
    "orig_BankName": "GTB",
    "benf_AcctNo": "1000000675",
    "benf_Name": "Test User 2",
    "benf_BVN": "10000000000",
    "benf_BankCode": "999923",
    "benf_BankName": "XYZ MFB"
  }
  }
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Reverse Transactions

This endpoint allows users to reverse a previously processed transaction. When making a request to this endpoint, provide the required body parameters which are the `referenceNumber`or `instrumentNumber`.<br>

<mark style="color:green;">`POST`</mark> `/api/postings/v1/reversetransaction`

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="169">Name</th><th width="173">Data Type (length)</th><th width="100" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>referenceNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>true</td><td>The reference number for the transaction to be reversed</td></tr><tr><td><code>instrumentNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(50)</em></a></td><td>true</td><td>The instrument number associated with the transaction</td></tr></tbody></table>

{% hint style="danger" %}
Ensure that you provide either the `referenceNumber` or the `instrumentNumber`.
{% endhint %}

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/postings/v1/reversetransaction' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "referenceNumber": "string",
  "instrumentNumber": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string",
    "duration": "string"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Overdraft API

***


# Create Overdraft

The "Create Overdraft" endpoint allows customers to add overdrafts to their accounts. Customers can request to add an overdraft by providing the necessary account information, the desired overdraft limit, and other required parameters.&#x20;

<mark style="color:green;">`POST`</mark> `/api/accountoverdraft/v1/add`\
\
Upon successful completion, the overdraft will be added to the customer's account, giving them access to additional funds up to the specified limit.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="183">Name</th><th width="172">Data Type (length)</th><th width="107" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The customer's account number (NUBAN) for the overdraft</td></tr><tr><td><code>limit</code></td><td>integer</td><td>true</td><td>The overdraft limit amount<br><br><em><mark style="color:orange;">The amount should be sent in the currency base unit. For example, 1000 naira will be sent as 1000 * 100</mark></em></td></tr><tr><td><code>tenure</code></td><td>integer</td><td>false</td><td>The tenure or duration of the overdraft in months</td></tr><tr><td><code>commencementDate</code></td><td>date</td><td>true</td><td>The start date of the overdraft</td></tr><tr><td><code>useDefaultFee</code></td><td>boolean</td><td>false</td><td>Indicates whether to use the default fee. Set <code>true</code> to use default and <code>false</code> to set your fee</td></tr><tr><td><code>feeCodes</code></td><td>array of objects</td><td>false</td><td>A list of fee codes must be provided if not using the default. Overdraft fees can be configured in the Fee Section on Udara 360.</td></tr><tr><td>└─ <code>feeCode</code></td><td>string</td><td>false</td><td>Specific fee code </td></tr><tr><td><code>feeAmount</code></td><td>integer</td><td>false</td><td>The fee amount, if not using the default</td></tr><tr><td><code>useDefaultInterest</code></td><td>boolean</td><td>false</td><td>Indicates whether to use the default interest rate</td></tr><tr><td><code>interestCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>If you don't want to use the default settings, you can customize the interest code. Credit interest configuration is available in the Fee Section of Udara 360</td></tr><tr><td><code>interestAmount</code></td><td>integer</td><td>false</td><td>Interest amount, if not using default</td></tr><tr><td><code>securityPledged</code></td><td>boolean</td><td>false</td><td>Indicates whether security is pledged for the overdraft by setting <code>true</code> for yes and <code>false</code> for no</td></tr><tr><td><code>securityType</code></td><td>string</td><td>false</td><td>Type of security pledged<br><br>The enumerations are:<br><code>1</code> = RealEstateAndLandAndBuilding<br><code>2</code> = Automobile<br><code>3</code> = PlantAndEquipment<br><code>4</code> = NaturalReserves<br><code>5</code> = MarketableSecurities<br><code>6</code> = AccountsReceivableAndInventory<br><code>7</code> = Cash<br><code>8</code> = PersonalGuarantees<br><code>9</code> = PostDatedCheques<br><code>10</code> = Dormicilliation<br><code>11</code> = HouseholdItems</td></tr><tr><td></td><td></td><td>false</td><td></td></tr><tr><td><code>securityValuation</code></td><td>integer</td><td>false</td><td>Valuation of the pledged security</td></tr><tr><td><code>description</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Description or purpose of the overdraft</td></tr><tr><td><code>guarantorName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Name of the guarantor for the overdraft</td></tr><tr><td><code>guarantorPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>false</td><td>Phone number of the guarantor</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/accountoverdraft/v1/add' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "accountNumber": "string",
  "limit": 0,
  "tenure": 0,
  "commencementDate": "2023-01-20T23:33:10.339Z",
  "useDefaultFee": true,
  "feeCodes": [
    {
      "feeCode": "string"
    }
  ],
  "feeAmount": 0,
  "useDefaultInterest": true,
  "interestCode": "string",
  "interestAmount": 0,
  "securityPledged": true,
  "securityType": "string",
  "securityValuation": 0,
  "description": "string",
  "guarantorName": "string",
  "guarantorPhoneNumber": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Update Overdraft

\
This API endpoint is used to update the overdraft settings for a specific account. You can modify the overdraft settings for the specified account by making a PUT request to this endpoint and providing the necessary account information in the request body.<br>

<mark style="color:orange;">`PUT`</mark> `/api/accountoverdraft/v1/update`

{% hint style="warning" %}
You must provide an existing overdraft `id` for your request to be successful.&#x20;
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="183">Name</th><th width="172">Data Type (length)</th><th width="107" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>Unique identifier for the overdraft account (GUID format)</td></tr><tr><td><code>accountNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>false</td><td>The customer's account number (NUBAN) for the overdraft</td></tr><tr><td><code>limit</code></td><td>integer</td><td>false</td><td>The overdraft limit amount<br><br><em><mark style="color:orange;">The amount should be sent in the currency base unit. For example, 1000 naira will be sent as 1000 * 100</mark></em></td></tr><tr><td><code>tenure</code></td><td>integer</td><td>false</td><td>The tenure or duration of the overdraft in months</td></tr><tr><td><code>commencementDate</code></td><td>date</td><td>false</td><td>The start date of the overdraft</td></tr><tr><td><code>useDefaultFee</code></td><td>boolean</td><td>false</td><td>Indicates whether to use the default fee. Set <code>true</code> to use default and <code>false</code> to set your fee</td></tr><tr><td><code>feeCodes</code></td><td>array of objects</td><td>false</td><td>A list of fee codes must be provided if not using the default. Overdraft fees can be configured in the Fee Section on Udara 360.</td></tr><tr><td>└─ <code>feeCode</code></td><td>string</td><td>false</td><td>Specific fee code </td></tr><tr><td><code>feeAmount</code></td><td>integer</td><td>false</td><td>The fee amount, if not using the default</td></tr><tr><td><code>useDefaultInterest</code></td><td>boolean</td><td>false</td><td>Indicates whether to use the default interest rate</td></tr><tr><td><code>interestCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>false</td><td>If you don't want to use the default settings, you can customize the interest code. Credit interest configuration is available in the Fee Section of Udara 360</td></tr><tr><td><code>interestAmount</code></td><td>integer</td><td>false</td><td>Interest amount, if not using default</td></tr><tr><td><code>securityPledged</code></td><td>boolean</td><td>false</td><td>Indicates whether security is pledged for the overdraft by setting <code>true</code> for yes and <code>false</code> for no</td></tr><tr><td><code>securityType</code></td><td>string</td><td>false</td><td>Type of security pledged<br><br>The enumerations are:<br><code>1</code> = RealEstateAndLandAndBuilding<br><code>2</code> = Automobile<br><code>3</code> = PlantAndEquipment<br><code>4</code> = NaturalReserves<br><code>5</code> = MarketableSecurities<br><code>6</code> = AccountsReceivableAndInventory<br><code>7</code> = Cash<br><code>8</code> = PersonalGuarantees<br><code>9</code> = PostDatedCheques<br><code>10</code> = Dormicilliation<br><code>11</code> = HouseholdItems</td></tr><tr><td></td><td></td><td>false</td><td></td></tr><tr><td><code>securityValuation</code></td><td>integer</td><td>false</td><td>Valuation of the pledged security</td></tr><tr><td><code>description</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(150)</em></a></td><td>false</td><td>Description or purpose of the overdraft</td></tr><tr><td><code>guarantorName</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(100)</em></a></td><td>false</td><td>Name of the guarantor for the overdraft</td></tr><tr><td><code>guarantorPhoneNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(20)</em></a></td><td>false</td><td>Phone number of the guarantor</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/accountoverdraft/v1/update' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "limit": 0,
  "tenure": 0,
  "commencementDate": "2023-01-20T23:33:42.897Z",
  "useDefaultFee": true,
  "feeCodes": [
    {
      "feeCode": "string"
    }
  ],
  "feeAmount": 0,
  "useDefaultInterest": true,
  "interestCode": "string",
  "interestAmount": 0,
  "securityPledged": true,
  "securityType": "string",
  "securityValuation": 0,
  "description": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string"
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Activate Overdraft

The "Activate Account Overdraft" endpoint allows customers to enable their account overdraft facility, triggering its activation for financial transactions.

<mark style="color:orange;">`PUT`</mark> `/api/accountoverdraft/v1/activate`

\
You must include an existing overdraft `id` in the request body to activate the overdraft facility for the specified account successfully.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>Unique identifier for the overdraft account (GUID format)</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/accountoverdraft/v1/activate' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string"
}
```

</details>


# Deactivate Account Overdraft

This endpoint allows customers to disable their account overdraft.

<mark style="color:orange;">`PUT`</mark> `/api/accountoverdraft/v1/deactivate`

\
You must include an existing overdraft `id` in the request body to deactivate the overdraft successfully.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>true</td><td>Unique identifier for the overdraft account (GUID format)</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/accountoverdraft/v1/deactivate' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
//request successful
```

</details>

<br>


# Search Account Overdraft

This API endpoint allows users to search for existing account overdraft information by passing the overdraft `id` to the request query. It retrieves details related to account overdrafts, including current status, limits, and fee amounts. The search operation provides users with the necessary information to manage account overdrafts and make informed decisions.

<mark style="color:blue;">`GET`</mark> `/api/AccountOverdraft/v1/Search`<br>

The `status` value for overdraft is: Inactive = 1, Active = 2, Disabled = 3, Pending = 4, Expired = 5

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="185">Name</th><th width="173">Data Type (length)</th><th width="104" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>accountName</code></td><td>string</td><td>true</td><td>The customer's account overdraft name</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/AccountOverdraft/v1/Search?AccountNumber=1000002993&AccountName=Test&ProductCode=001&OverdraftStatus=2&SecurityType=2&StartDate=2022-01-01&EndDate=2022-03-20&PageNumber=1&PageSize=10&SortColumn=DateCreated&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountNumber": "string",
        "accountName": "string",
        "productName": "string",
        "limit": 0,
        "tenure": 0,
        "dateCreated": "2023-01-29T15:00:25.475Z",
        "commencementDate": "2023-01-29T15:00:25.475Z",
        "maturityDate": "2023-01-29T15:00:25.475Z",
        "useDefaultFee": true,
        "feeCodes": [
          {
            "feeCode": "string"
          }
        ],
        "feeAmount": 0,
        "useDefaultInterest": true,
        "interestCode": "string",
        "interestAmount": 0,
        "securityPledged": true,
        "securityType": "string",
        "securityValuation": 0,
        "description": "string",
        "initiator": "string",
        "guarantorName": "string",
        "guarantorPhoneNumber": "string",
        "status": "string",
        "ledgerBalance": "string",
        "availableBalance": "string",
        "withdrawableBalance": "string"
      }
    ],
    "recordCount": 0
  }
}
```

</details>


# Loan API


# Create Loan Account

Send a POST request to the endpoint mentioned above to create a new loan account. The request should include the required payloads in the request body, such as `customerID`, `linkedNumber`, `lendingModel`, and other necessary information.

<mark style="color:green;">`POST`</mark> `/api/loanaccount/v1/add`\
\
A successful request will return the loan `accountNumber`, `id` and a success message in the response, allowing for reference to the newly created loan account.\
\
This process allows for creating customer loan accounts and simplifies the management of loan-related information.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="201">Name</th><th width="173">Data Type (length)</th><th width="101" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>customerID</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(8)</em></a></td><td>true</td><td>The unique identifier of the customer applying for the loan<br><br><em><mark style="color:orange;">The</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>CustomerID</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">must be the same as the</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>CustomerID</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">linked to the beneficiary</mark></em></td></tr><tr><td><code>linkedNumber</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(10)</em></a></td><td>true</td><td>The number linked to the loan account (NUBAN) for disbursement</td></tr><tr><td><code>productCode</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(3)</em></a></td><td>true</td><td>The code of the loan product being applied for<br><br><em><mark style="color:orange;">The loan products should be created on the Udara360 portal and they must be</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><strong>active</strong></mark><mark style="color:orange;">.</mark></em></td></tr><tr><td><code>lendingModel</code></td><td>integer</td><td>true</td><td>The model used for lending <br><br>The enumerations are: <br><br><code>1</code> = CreditUnion<br><code>2</code> = Individual<br><br><code>3</code> = Individuals<br><code>4</code> = NeighbourhoodAndSmallGroupRevolvingFunds<br><code>5</code> = Other<br><code>6</code> = SolidarityGroups<br><code>7</code> = Staff,<br><code>8</code> = VillageBanking<br><code>9</code> = WholesaleLending</td></tr><tr><td><code>economicSector</code></td><td>integer</td><td>true</td><td>The code representing the economic sector<br><br>The enumerations are:<br><code>40100</code> = Agriculture, Forestry, and Fishing <br><code>40200</code> = Mining and Quarrying <code>40300</code> = Manufacturing <br><code>40500</code> = Real Estate Activities <code>40700</code> = General Commerce <code>40800</code> = Transportation and Storage <br><code>40900</code> = Finance and Insurance <code>41000</code> = General <br><code>41200</code> = Governments <br><code>41300</code> = Water Supply, Sewage, Waste Management, and Remediation Activities <br><code>41400</code> = Construction <br><code>41500</code> = Information and Communication <br><code>41600</code> = Professional, Scientific, and Technical Activities <br><code>41700</code> = Administrative and Support Service Activities<br><code>41800</code> = Education <br><code>41900</code> = Human Health and Social Work Activities <br><code>42000</code> = Arts, Entertainment, and Recreation <br><code>42100</code> = Activities of Extra-Territorial Organizations and Bodies <code>42200</code> = Power and Energy <code>42300</code> = Capital Market <br><code>42400</code> = Oil and Gas</td></tr><tr><td><code>loanAmount</code></td><td>integer</td><td>true</td><td>The amount of the loan being applied for<br><br><em><mark style="color:orange;">The amount should be supplied in the base currency amount. For example,</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>1000.55</code></mark><mark style="color:orange;"> </mark><mark style="color:orange;">should be sent as</mark><mark style="color:orange;"> </mark><mark style="color:orange;"><code>100055</code></mark><mark style="color:orange;">.</mark></em></td></tr><tr><td><code>startDate</code></td><td>dateTime</td><td>true</td><td>The start date of the loan</td></tr><tr><td><code>tenure</code></td><td>integer</td><td>true</td><td>The tenure of the loan in months</td></tr><tr><td><code>guarantorID1</code></td><td>string</td><td>true</td><td>The ID of the first guarantor</td></tr><tr><td><code>guarantorID2</code></td><td>string</td><td>true</td><td>The ID of the second guarantor</td></tr><tr><td><code>penaltyGracePeriod</code></td><td>integer</td><td>false</td><td>The grace period before a penalty is applied in days</td></tr><tr><td><code>hasCollateralPledge</code></td><td>boolean</td><td>false</td><td>Indicates if there is a collateral pledge, set <code>true</code> for yes an <code>false</code> for no</td></tr><tr><td><code>collateralType</code></td><td>integer</td><td>false</td><td>The type of collateral provided<br><br>The enumerations are:<br><br><code>1</code> = RealEstateLandAndBuilding <br><code>2</code> = Automobile<br><code>3</code> = PlantAndEquipment<br><code>4</code> = NaturalReserves<br><code>5</code> = MarketableSecurities<br><code>6</code> = AccountsReceivablesAndInventory<br><code>7</code> = Cash<br><code>8</code> = PersonalGuarantees<br><code>9</code> = PostDatedCheques<br><code>10</code> = Dormicilliation<br><code>11</code> = HouseholdItems</td></tr><tr><td><code>collateralValuation</code></td><td>integer</td><td>false</td><td>The valuation of the collateral</td></tr><tr><td><code>collateralDescription</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(1000)</em></a></td><td>false</td><td>A description of the collateral provided</td></tr><tr><td><code>principalRepaymentType</code></td><td>integer</td><td>true</td><td>The type of principal repayment<br><br>The enumerations are:<br><code>1</code>  = EndOfContract<br><code>2</code> = Prorated <br><code>3</code> = Upfront</td></tr><tr><td><code>principalFrequency</code></td><td>integer</td><td>false</td><td><p>The frequency of principal repayment<br><br><code>1</code> = Daily <br><code>2</code> = Weekly<br><code>3</code> = Fortnight<br><code>4</code> = Monthly</p><p><code>5</code> = Quarterly</p><p><code>6</code> = HalfYearly</p><p><code>7</code> = Annually</p><p><code>8</code> = EndOfContract</p><p><code>9</code> = Upfront</p></td></tr><tr><td><code>principalToBeRepaidEvery</code></td><td>integer</td><td>false</td><td>How frequently the principal should be repaid if it's not at the <code>EndOfContract</code> or <code>Upfront</code> </td></tr><tr><td><code>principalInstallment</code></td><td>integer</td><td>false</td><td>The amount of each principal instalment, this parameter can also be used to compute the tenure</td></tr><tr><td><code>useProductInterestRate</code></td><td>boolean</td><td>false</td><td>Indicates whether the product's interest rate should be used, set true for <code>yes</code> and false for <code>no</code></td></tr><tr><td><code>defaultingInterestRate</code></td><td>integer</td><td>false</td><td>The interest rate that is applied when the loan defaults</td></tr><tr><td><code>interestRepaymentType</code></td><td>integer</td><td>false</td><td>The type of interest repayment<br><br>The enumerations are:<br><code>1</code>  = EndOfContract<br><code>2</code> = Prorated <br><code>3</code> = Upfront</td></tr><tr><td><code>interestFrequency</code></td><td>integer</td><td>false</td><td><p>The frequency of interest repayment<br><br>The enumerations are:<br><code>1</code> = Daily</p><p><code>2</code> = Weekly</p><p><code>3</code> = Fortnight</p><p><code>4</code> = Monthly</p><p><code>5</code> = Quarterly</p><p><code>6</code> = HalfYearly</p><p><code>7</code> = Annually</p><p><code>8</code> = EndOfContract</p><p><code>9</code> = Upfront</p></td></tr><tr><td><code>interestToBeRepaidEvery</code></td><td>integer</td><td>false</td><td>How often the interest is to be repaid</td></tr><tr><td><code>interestInstallment</code></td><td>integer</td><td>false</td><td>The total number of instalments</td></tr><tr><td><code>interestAccrualMode</code></td><td>integer</td><td>false</td><td><p>The mode by which interest accrues<br><br>The enumerations are:<br><code>1</code> = Fixed </p><p><code>2</code> = ReducingBalance </p><p><code>3</code> = ReducingBalanceButEqual</p></td></tr><tr><td><code>interestFreePrincipalAmount</code></td><td>integer</td><td>false</td><td>The amount of the principal that is interest-free</td></tr><tr><td><code>securityDeposit</code></td><td>integer</td><td>false</td><td>The amount of the security deposit taken<br><br><em><mark style="color:orange;">The system will place a lien on the account and automatically release it when the loan expires or is closed.</mark></em></td></tr><tr><td><code>holdFundSecurityDeposit</code></td><td>boolean</td><td>false</td><td>Indicates whether the fund security deposit is held, set true for <code>yes</code> and false for <code>no</code></td></tr><tr><td><code>applyLoanFees</code></td><td>boolean</td><td>false</td><td>Indicates whether loan fees should be applied, set true for <code>yes</code> and false for <code>no</code></td></tr><tr><td><code>loanFees</code></td><td>array</td><td>false</td><td>An array of objects representing the fees associated with the loan</td></tr><tr><td><code>loanFees.loanFeeCode</code></td><td>string</td><td>false</td><td>The loan fee code</td></tr><tr><td><code>loanFees.name</code></td><td>string</td><td>false</td><td>The loan code name</td></tr><tr><td><code>allowMoratorium</code></td><td>integer</td><td>false</td><td><p>Indicates whether a moratorium is allowed <br><br>The enumrations are <em>(nullable)</em>:<br><code>1</code> = False</p><p><code>2</code> = PrincipalOnly</p><p><code>3</code> = InterestOnly</p><p><code>4</code> = PrincipalAndInterest</p></td></tr><tr><td><code>moratoriumDuration</code></td><td>integer</td><td>false</td><td>The duration of the moratorium<br><br><code>1</code> = IncreaseTotalLoanDuration<br><code>2</code> = DonNotIncreaseTotalLoanDuration</td></tr><tr><td><code>moratoriumFrequency</code></td><td>integer</td><td>false</td><td><p>The frequency of the moratorium<br><br>The enumerations are: <br><code>1</code> = Daily</p><p><code>2</code> = Weekly</p><p><code>3</code> = Monthly</p><p><code>4</code> = Annually</p></td></tr><tr><td><code>moratoriumEffect</code></td><td>integer</td><td>false</td><td><p>The effect of the moratorium<br></p><p>The enumerations are:<br><code>1</code> = IncreaseTotalLoanDuration</p><p><code>2</code> = DonNotIncreaseTotalLoanDuration</p></td></tr><tr><td><code>enableRepaymentTracker</code></td><td>boolean</td><td>false</td><td>Indicates whether the repayment tracker is enabled set true for <code>yes</code> and false for <code>no</code></td></tr><tr><td><code>repaymentTrackerInDays</code></td><td>integer</td><td>false</td><td>The number of days for the repayment tracker</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/loanaccount/v1/add' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "customerID": "string",
  "linkedNumber": "string",
  "productCode": "305",
  "lendingModel": 1,
  "economicSector": 42400,
  "guarantorID1": "",
  "guarantorID2": "",
  "penaltyGracePeriod": 0,
  "loanAmount": 100000,
  "hasCollateralPledge": true,
  "collateralType": 2,
  "collateralValuation": 100000,
  "collateralDescription": "Toyota Camry 2008",
  "startDate": "2021-06-28",
  "tenure": 60,
  "principalRepaymentType": 2,
  "principalFrequency": 4,
  "principalToBeRepaidEvery": 1,
  "principalInstallment": 2,
  "useProductInterestRate": true,
  "defaultingInterestRate": 0,
  "interestRepaymentType": 2,
  "interestFrequency": 4,
  "interestToBeRepaidEvery": 1,
  "interestInstallment": 2,
  "interestAccrualMode": 1,
  "interestFreePrincipalAmount": 0,
  "securityDeposit": 0,
  "holdFundSecurityDeposit": false,
  "applyLoanFees": false,
  "loanFees": [
    {
      "loanFeeCode": "",
      "name": ""
    }
  ],
  "allowMoratorium": null,
  "moratoriumDuration": 0,
  "moratoriumFrequency": null,
  "moratoriumEffect": null,
  "enableRepaymentTracker": false,
  "repaymentTrackerInDays": 0
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountNumber": "1000003305000021282"
  }
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Disburse Loan

To disburse a loan, send a POST request to the endpoint:

<mark style="color:green;">`POST`</mark> `/api/loanaccount/v1/disburseloan`

The request body requires only the `loanAccountNumber`, for disbursement. \
\
A successful request will return a disbursement data, and a success message in the response, allowing for reference to the disbursed loan.\
\
This process facilitates the disbursement of loans to customers and streamlines the management of loan-related activities.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="166">Name</th><th width="174">Data Type (length)</th><th width="99" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>loanAccountNumber</code></td><td>string</td><td>true</td><td>The unique number of the loan account to be disbursed</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/loanaccount/v1/disburseloan' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "loanAccountNumber": "string"
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "statusCode": "string",
    "referenceNumber": "string",
    "instrumentNumber": "string",
    "duration": "string"
  }
}
```

</details>


# Update Loan Account

To update an existing loan account, send a PUT request to the endpoint mentioned below. The request should include the loan `id` in the request body, as well as any other required information.\
\ <mark style="color:orange;">`PUT`</mark> `/api/loanaccount/v1/update`\
\
A successful request will return a success message in the response, indicating that the loan account has been updated.\
\
This process enables modifying existing loan account information, ensuring that loan-related data remains current and relevant.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Body**

<table><thead><tr><th width="223">Name</th><th width="173">Data Type (length)</th><th width="102" data-type="checkbox">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string </td><td>true</td><td>The unique identifier for the loan account (Guid)</td></tr><tr><td><code>linkedNumber</code></td><td>string</td><td>false</td><td>The number linked to the loan account (NUBAN) for disbursement</td></tr><tr><td><code>lendingModel</code></td><td>string</td><td>false</td><td>The model used for lending <br><br>The enumerations are: <br><br><code>1</code> = CreditUnion<br><code>2</code> = Individual<br><code>3</code> = Individuals<br><code>4</code> = NeighbourhoodAndSmallGroupRevolvingFunds<br><code>5</code> = Other<br><code>6</code> = SolidarityGroups<br><code>7</code> = Staff,<br><code>8</code> = VillageBanking<br><code>9</code> = WholesaleLending</td></tr><tr><td><code>economicSector</code></td><td>string</td><td>false</td><td>The code representing the economic sector<br><br>The enumerations are:<br><code>40100</code> = Agriculture, Forestry, and Fishing <br><code>40200</code> = Mining and Quarrying <code>40300</code> = Manufacturing <br><code>40500</code> = Real Estate Activities <code>40700</code> = General Commerce <code>40800</code> = Transportation and Storage <br><code>40900</code> = Finance and Insurance <code>41000</code> = General <br><code>41200</code> = Governments <br><code>41300</code> = Water Supply, Sewage, Waste Management, and Remediation Activities <br><code>41400</code> = Construction <br><code>41500</code> = Information and Communication <br><code>41600</code> = Professional, Scientific, and Technical Activities <br><code>41700</code> = Administrative and Support Service Activities<br><code>41800</code> = Education <br><code>41900</code> = Human Health and Social Work Activities <br><code>42000</code> = Arts, Entertainment, and Recreation <br><code>42100</code> = Activities of Extra-Territorial Organizations and Bodies <code>42200</code> = Power and Energy <code>42300</code> = Capital Market <br><code>42400</code> = Oil and Gas</td></tr><tr><td><code>guarantorID1</code></td><td>string</td><td>false</td><td>The ID of the first guarantor</td></tr><tr><td><code>guarantorID2</code></td><td>string</td><td>false</td><td>The ID of the second guarantor</td></tr><tr><td><code>hasCollateralPledge</code></td><td>boolean</td><td>false</td><td>Indicates if there is a collateral pledge, set <code>true</code> for yes an <code>false</code> for no</td></tr><tr><td><code>collateralType</code></td><td>string</td><td>false</td><td>The type of collateral provided<br><br>The enumerations are:<br><br><code>1</code> = RealEstateLandAndBuilding <br><code>2</code> = Automobile<br><code>3</code> = PlantAndEquipment<br><code>4</code> = NaturalReserves<br><code>5</code> = MarketableSecurities<br><code>6</code> = AccountsReceivablesAndInventory<br><code>7</code> = Cash<br><code>8</code> = PersonalGuarantees<br><code>9</code> = PostDatedCheques<br><code>10</code> = Dormicilliation<br><code>11</code> = HouseholdItems</td></tr><tr><td><code>collateralValuation</code></td><td>integer</td><td>false</td><td>The value of the collateral</td></tr><tr><td><code>collateralDescription</code></td><td>string <a data-footnote-ref href="#user-content-fn-1"><em>(1000)</em></a></td><td>false</td><td>A description of the collateral</td></tr><tr><td><code>enableRepaymentTracker</code></td><td>boolean</td><td>false</td><td>Indicates whether the repayment tracker is enabled set true for <code>yes</code> and false for <code>no</code></td></tr><tr><td><code>repaymentTrackerInDays</code></td><td>integer</td><td>false</td><td>The number of days for the repayment tracker</td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g --request PUT '{{baseurl}}/api/loanaccount/v1/update' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "linkedNumber": "string",
  "lendingModel": "string",
  "economicSector": "string",
  "guarantorID1": "string",
  "guarantorID2": "string",
  "hasCollateralPledge": true,
  "collateralType": "string",
  "collateralValuation": 0,
  "collateralDescription": "string",
  "enableRepaymentTracker": true,
  "repaymentTrackerInDays": 0
}'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string"
}
```

</details>

[^1]: This is the maximum number of characters allowed.


# Search Loan Account

To retrieve details of a loan account, send a GET request to the following endpoint:

<mark style="color:blue;">`GET`</mark> `/api/LoanAccount/v1/Search`\
\
The response will contain relevant information associated with the loan account that matches the search criteria, allowing users to access and review details. This API endpoint facilitates the retrieval of loan account data, enabling users to access the necessary information for their specific requirements.<br>

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="196">Name</th><th width="177">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The unique number identifying the account</td><td></td></tr><tr><td><code>customerID</code></td><td>string</td><td>The unique identifier of the customer associated with the loan account</td><td></td></tr><tr><td><code>accountName</code></td><td>string</td><td>The name associated with the account</td><td></td></tr><tr><td><code>productCode</code></td><td>string</td><td>The code of the product associated with the account</td><td></td></tr><tr><td><code>accountOfficerCode</code></td><td>string</td><td>The code of the account officer managing the account</td><td></td></tr><tr><td><code>accountStatus</code></td><td>string</td><td>The current status of the account (e.g., Active, Inactive)</td><td></td></tr><tr><td><code>hasDisbursed</code></td><td>boolean</td><td>Indicates whether funds have been disbursed from the account using <code>true</code> or <code>false</code></td><td></td></tr><tr><td><code>startDate</code></td><td>date</td><td>The start date of the account activity</td><td></td></tr><tr><td><code>endDate</code></td><td>date</td><td>The end date of the account activity</td><td></td></tr><tr><td><code>pageNumber</code></td><td>integer</td><td>The current page number for pagination</td><td></td></tr><tr><td><code>pageSize</code></td><td>integer</td><td>The number of records per page</td><td></td></tr><tr><td><code>sortColumn</code></td><td>string</td><td>The column by which the results are sorted</td><td></td></tr><tr><td><code>direction</code></td><td>string</td><td>The direction of the sort (e.g., ascending or  descending)</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/LoanAccount/v1/Search?AccountNumber=1000002992&CustomerID=001&AccountName=Test&ProductCode=001&AccountOfficerCode=002&AccountStatus=Active&HasDisbursed=Yes&StartDate=2022-01-01&EndDate=2022-03-09&PageNumber=1&PageSize=10&SortColumn=DateCreated&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountNumber": "string",
        "name": "string",
        "accountStatus": "string",
        "customerID": "string",
        "linkedNumber": "string",
        "accountOfficerCode": "string",
        "productCode": "string",
        "lendingModel": "string",
        "economicSector": "string",
        "guarantorID1": "string",
        "guarantor1": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "customerID": "string",
          "name": "string",
          "phoneNumber": "string"
        },
        "guarantorID2": "string",
        "guarantor2": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "customerID": "string",
          "name": "string",
          "phoneNumber": "string"
        },
        "penaltyGracePeriod": 0,
        "loanAmount": 0,
        "dateCreated": "2023-01-29T15:05:30.196Z",
        "dateLastModified": "2023-01-29T15:05:30.196Z",
        "approvedDate": "2023-01-29T15:05:30.196Z",
        "interestCommencementDate": "2023-01-29T15:05:30.196Z",
        "tenure": 0,
        "startDate": "2023-01-29T15:05:30.196Z",
        "maturityDate": "2023-01-29T15:05:30.196Z",
        "installmentAmount": 0,
        "hasCollateralPledge": true,
        "collateralType": "string",
        "collateralValuation": 0,
        "collateralDescription": "string",
        "principalRepaymentType": "string",
        "principalFrequency": "string",
        "principalToBeRepaidEvery": 0,
        "principalInstallment": 0,
        "applicableInterestCode": "string",
        "interestName": "string",
        "useProductInterestRate": true,
        "applicableInterestRate": 0,
        "defaultingInterestRate": 0,
        "interestRepaymentType": "string",
        "interestFrequency": "string",
        "interestToBeRepaidEvery": 0,
        "interestInstallment": 0,
        "interestAccrualMode": "string",
        "interestFreePrincipalAmount": 0,
        "securityDeposit": 0,
        "applyLoanFees": true,
        "productName": "string",
        "accountOfficerName": "string",
        "branchName": "string",
        "ledgerBalance": 0,
        "unpaidPrincipal": 0,
        "outstandingLoanPrincipal": 0,
        "outstandingLoanInterest": 0,
        "outstandingLoanFee": 0,
        "hasDisbursed": true,
        "hasOutstandingLoan": true,
        "dateCreatedFinancial": "2023-01-29T15:05:30.196Z",
        "firstInstallmentDate": "2023-01-29T15:05:30.196Z",
        "closureDate": "2023-01-29T15:05:30.196Z",
        "enableRepaymentTracker": true,
        "repaymentTrackerInDays": 0,
        "loanFees": [
          {
            "loanFeeCode": "string"
          }
        ],
        "paymentSchedules": [
          {
            "loanAccountNumber": "string",
            "linkedNumber": "string",
            "principal": 0,
            "interest": 0,
            "fee": 0,
            "totalRepayment": 0,
            "paymentDate": "string",
            "paymentDate_Date": "2023-01-29T15:05:30.196Z",
            "hasProcessed": true,
            "paymentStatus": "string"
          }
        ]
      }
    ],
    "recordCount": 0
  }
}
```

</details>


# View Loan Schedule

To retrieve a loan repayment schedule, send a GET request to the endpoint below, along with the loan `accountNumber` in the request query.\
\ <mark style="color:blue;">`GET`</mark> `/api/LoanAccount/v1/viewloanschedule`

\
The response will contain the loan repayment schedule information, including details such as loan amounts, due dates, and outstanding loan fees. This feature provides convenient access to loan repayment schedules, thereby facilitating effective management of loan-related data.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="196">Name</th><th width="177">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The unique number identifying the loan account</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/LoanAccount/v1/Search?AccountNumber=1000002992&CustomerID=001&AccountName=Test&ProductCode=001&AccountOfficerCode=002&AccountStatus=Active&HasDisbursed=Yes&StartDate=2022-01-01&EndDate=2022-03-09&PageNumber=1&PageSize=10&SortColumn=DateCreated&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "accountNumber": "string",
        "name": "string",
        "accountStatus": "string",
        "customerID": "string",
        "linkedNumber": "string",
        "accountOfficerCode": "string",
        "productCode": "string",
        "lendingModel": "string",
        "economicSector": "string",
        "guarantorID1": "string",
        "guarantor1": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "customerID": "string",
          "name": "string",
          "phoneNumber": "string"
        },
        "guarantorID2": "string",
        "guarantor2": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "customerID": "string",
          "name": "string",
          "phoneNumber": "string"
        },
        "penaltyGracePeriod": 0,
        "loanAmount": 0,
        "dateCreated": "2023-01-29T15:05:30.196Z",
        "dateLastModified": "2023-01-29T15:05:30.196Z",
        "approvedDate": "2023-01-29T15:05:30.196Z",
        "interestCommencementDate": "2023-01-29T15:05:30.196Z",
        "tenure": 0,
        "startDate": "2023-01-29T15:05:30.196Z",
        "maturityDate": "2023-01-29T15:05:30.196Z",
        "installmentAmount": 0,
        "hasCollateralPledge": true,
        "collateralType": "string",
        "collateralValuation": 0,
        "collateralDescription": "string",
        "principalRepaymentType": "string",
        "principalFrequency": "string",
        "principalToBeRepaidEvery": 0,
        "principalInstallment": 0,
        "applicableInterestCode": "string",
        "interestName": "string",
        "useProductInterestRate": true,
        "applicableInterestRate": 0,
        "defaultingInterestRate": 0,
        "interestRepaymentType": "string",
        "interestFrequency": "string",
        "interestToBeRepaidEvery": 0,
        "interestInstallment": 0,
        "interestAccrualMode": "string",
        "interestFreePrincipalAmount": 0,
        "securityDeposit": 0,
        "applyLoanFees": true,
        "productName": "string",
        "accountOfficerName": "string",
        "branchName": "string",
        "ledgerBalance": 0,
        "unpaidPrincipal": 0,
        "outstandingLoanPrincipal": 0,
        "outstandingLoanInterest": 0,
        "outstandingLoanFee": 0,
        "hasDisbursed": true,
        "hasOutstandingLoan": true,
        "dateCreatedFinancial": "2023-01-29T15:05:30.196Z",
        "firstInstallmentDate": "2023-01-29T15:05:30.196Z",
        "closureDate": "2023-01-29T15:05:30.196Z",
        "enableRepaymentTracker": true,
        "repaymentTrackerInDays": 0,
        "loanFees": [
          {
            "loanFeeCode": "string"
          }
        ],
        "paymentSchedules": [
          {
            "loanAccountNumber": "string",
            "linkedNumber": "string",
            "principal": 0,
            "interest": 0,
            "fee": 0,
            "totalRepayment": 0,
            "paymentDate": "string",
            "paymentDate_Date": "2023-01-29T15:05:30.196Z",
            "hasProcessed": true,
            "paymentStatus": "string"
          }
        ]
      }
    ],
    "recordCount": 0
  }
}
```

</details>


# Report API


# Customer Account Statement

To retrieve a customer account statement, send a GET request to the following endpoint:\
\ <mark style="color:blue;">`GET`</mark> `/api/Report/v1/RequestCustomerAccountStatement`\
\
A successful request will return the customer's account statement with relevant information, such as the balance, transaction history, and account details.\
\
This process enables the retrieval of customer account statements, providing access to essential financial information for both customers and the organization.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="187">Name</th><th width="172">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The customer's account number</td><td></td></tr><tr><td><code>financialDateFrom</code></td><td>date</td><td>Start date of financial activity</td><td></td></tr><tr><td><code>financialDateto</code></td><td>date</td><td>End date of financial activity</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Report/v1/RequestCustomerAccountStatement?AccountNumber=1000029938&FinancialDateFrom=2022-01-01&FinancialDateTo=2022-03-09' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "financialDate": "string",
        "transactionDate": "2023-01-29T15:12:46.861Z",
        "accountNumber": "string",
        "postingReferenceNumber": "string",
        "debit": 0,
        "credit": 0,
        "narration": "string",
        "balance": 0
      }
    ],
    "accountNumber": "string",
    "accountName": "string",
    "address": "string",
    "passportFileUrl": "string",
    "product": "string",
    "openingBalance": 0,
    "closingBalance": 0,
    "totalCredit": 0,
    "totalDebit": 0,
    "recordCount": 0
  }
}
```

</details>


# Export Customer Account Statement

To export a customer statement, send a GET request to the following endpoint:

\ <mark style="color:blue;">`GET`</mark> `/api/Report/v1/ExportCustomerStatement`\
\
This API enables the export of customer statements in PDF, CSV, or Excel format, providing access to crucial financial information for both customers and the organization.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="187">Name</th><th width="172">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The customer's account number</td><td></td></tr><tr><td><code>financialDateFrom</code></td><td>date</td><td>Start date of financial activity</td><td></td></tr><tr><td><code>financialDateto</code></td><td>date</td><td>End date of financial activity</td><td></td></tr><tr><td><code>fileExportFormat</code></td><td>integer</td><td>The type of format to use for exporting account statements (e.g., CSV, PDF)<br><br>The enumerations are:<br><code>1</code> = Excel<br><code>2</code> = CSV<br><code>3</code> = PDF</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Report/v1/ExportCustomerStatement?AccountNumber=1000000754&FinancialDateFrom=2021-08-01&FinancialDateTo=2023-03-19&FileExportFormat=2' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
//request successful
```

</details>


# Get Customer Transaction Receipt

##

To retrieve a customer transaction receipt, send a GET request to the following endpoint:<br>

<mark style="color:blue;">`GET`</mark> `/api/Report/v1/GetTransactionReceipt`\
\
The request must include a `transactionID` in the request query to identify the specific transaction. \
\
This process streamlines the retrieval of transaction receipts for customers and effectively manages transaction-related information.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="187">Name</th><th width="172">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>transactionID</code></td><td>string</td><td>The customer's transcation identifier</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Report/v1/GetTransactionReceipt?transactionID=c6e9caca-fdc2-44a0-b67d-00002bfcad3f \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
//request successful
```

</details>


# Get Customer Account History

To retrieve the customer account history report, send a GET request to the following endpoint:

\ <mark style="color:blue;">`GET`</mark> `/api/Report/v1/RequestCustomerAccountHistoryReport`\
\
The request must include the necessary customer identification details in the request query to specify the customer account for which the history report is requested.\
\
This process streamlines the retrieval of customer account history reports and effectively manages customer account-related information.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th>Name</th><th width="173">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The account number associated with the transaction</td><td></td></tr><tr><td><code>postingReferenceNumber</code></td><td>string</td><td>The unique reference number for the posting</td><td></td></tr><tr><td><code>instrumentNumber</code></td><td>string</td><td>The instrument number related to the transaction</td><td></td></tr><tr><td><code>entryCode</code></td><td>string</td><td>The code representing the type of financial entry</td><td></td></tr><tr><td><code>batchCode</code></td><td>string</td><td>The batch code for grouping transactions</td><td></td></tr><tr><td><code>financialDateFrom</code></td><td>date</td><td>The starting date for the financial activity</td><td></td></tr><tr><td><code>financialDateTo</code></td><td>date</td><td>The ending date for the financial activity</td><td></td></tr><tr><td><code>startDate</code></td><td>date</td><td>The start date of the transaction period</td><td></td></tr><tr><td><code>endDate</code></td><td>date</td><td>The end date of the transaction period</td><td></td></tr><tr><td><code>pageNumber</code></td><td>integer</td><td>The page number for pagination</td><td></td></tr><tr><td><code>pageSize</code></td><td>integer</td><td>The number of results per page</td><td></td></tr><tr><td><code>sortColumn</code></td><td>string</td><td>The column by which the results are sorted</td><td></td></tr><tr><td><code>direction</code></td><td>string</td><td>The direction of sorting, either <code>Asc</code> (ascending) or <code>Desc</code></td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Report/v1/RequestCustomerAccountHistoryReport?AccountNumber=1000002992&PostingReferenceNumber=4945858&InstrumentNumber=0002&EntryCode=100&BatchCode=001&FinancialDateFrom=2022-01-01&FinancialDateTo=2022-03-09&StartDate=2022-01-01&EndDate=2022-03-09&PageNumber=1&PageSize=10&SortColumn=StartDate&Direction=Asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "financialDate": "string",
        "transactionDate": "2023-01-29T15:13:21.626Z",
        "accountNumber": "string",
        "accountName": "string",
        "branch": "string",
        "postedBy": "string",
        "approvedBy": "string",
        "postingReferenceNumber": "string",
        "debit": "string",
        "credit": "string",
        "narration": "string",
        "entryCode": "string",
        "instrumentNumber": "string",
        "balance": "string",
        "accessLevel": 0
      }
    ],
    "recordCount": 0
  }
}
```

</details>


# Get Transaction Callover Report

To fetch a report detailing transaction callover information, you can send a GET request to the following endpoint:

\ <mark style="color:blue;">`GET`</mark> `/api/Report/v1/GetTransactionCallOverReport`

\
The request query should contain the necessary parameters, such as the date `referenceNumber` or `instrumentNumber` to specify the exact report needed. \
\
This API streamlines the process of obtaining transaction callover reports, offering an efficient means of managing and accessing transaction-related data.

{% hint style="info" %}
All in-branch transactions are included, excluding transactions from channels and end-of-day transactions.
{% endhint %}

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="205">Name</th><th width="176">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>referenceNumber</code></td><td>string</td><td>The reference number for the transaction</td><td></td></tr><tr><td><code>instrumentNumber</code></td><td>string</td><td>The instrument number related to the transaction</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseurl}}/api/Report/v1/GetTransactionCallOverReport?AccountNumber=1000002992&PostingReferenceNumber=4945858&InstrumentNumber=0002&EntryCode=100&BatchCode=001&FinancialDateFrom=2022-01-01&FinancialDateTo=2022-03-09&StartDate=2022-01-01&EndDate=2022-03-09&PageNumber=1&PageSize=10&SortColum=StartDate&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "attachment": "string",
    "fileName": "string",
    "contentType": "string"
  }
}
```

</details>


# Get Loan Expectation Report

To retrieve the loan expectation report, send a GET request to the following endpoint:\
\ <mark style="color:blue;">`GET`</mark> `api/Report/v1/GetLoanExpectationReport`\
\
The request must include the necessary parameters in the request query to identify the specific loan and criteria for the report.\
\
This process facilitates the retrieval of loan expectation reports and effectively manages loan-related information for analysis and decision-making.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="195">Name</th><th width="179">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>accountNumber</code></td><td>string</td><td>The unique number identifying the account</td><td></td></tr><tr><td><code>branchCode</code></td><td>string</td><td>The code representing the branch of the account</td><td></td></tr><tr><td><code>accountOfficerCode</code></td><td>string</td><td>The code identifying the account officer</td><td></td></tr><tr><td><code>productCode</code></td><td>string</td><td>The product code linked to the account</td><td></td></tr><tr><td><code>startDate</code></td><td>date</td><td>The start date of the query period</td><td></td></tr><tr><td><code>endDate</code></td><td>date</td><td>The end date of the query period</td><td></td></tr><tr><td><code>pageNumber</code></td><td>integer</td><td>The page number for paginated results</td><td></td></tr><tr><td><code>pageSize</code></td><td>integer</td><td>The number of records per page</td><td></td></tr><tr><td><code>sortColumn</code></td><td>string</td><td>The column by which the results are sorted</td><td></td></tr><tr><td><code>direction</code></td><td>string</td><td>The direction of sorting, either <code>Asc</code> (ascending) or <code>Desc</code></td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location 'https://openapi-dev.udara360.io/api/Report/v1/GetLoanExpectationReport?AccountNumber=1000002993&BranchCode=001&AccountOfficerCode=009&ProductCode=001&StartDate=2022-01-01&EndDate=2022-05-09&PageNumber=1&PageSize=10&SortColumn=StartDate&Direction=asc' \
--header 'Authorization: bearer {token}' \
--header 'request-reference: {unique_reference}' \
--header 'Content-Type: application/json' \
--data ''
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "status": true,
  "message": "string",
  "data": {
    "data": [
      {
        "sn": 0,
        "accountName": "string",
        "accountNumber": "string",
        "dueDate": "2023-01-29T15:18:35.590Z",
        "principal": 0,
        "interest": 0,
        "fee": 0,
        "total": 0
      }
    ],
    "recordCount": 0
  }
}
```

</details>


# Get Loan Tracking Report

To obtain the loan tracking report, make a GET request to the endpoint:\
\ <mark style="color:blue;">`GET`</mark> `/api/Report/v1/GetLoanTrackingReport`\
\
The request should contain the necessary parameters to identify the specific loan tracking report. This facilitates the retrieval of loan tracking information and management of loan-related data.

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="241">Name</th><th width="173">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>useCurrentFinancialDate</code></td><td>boolean</td><td>If <code>true</code> is set, the current financial date will be used, and If <code>false</code> is set, you must provide a financial date</td><td></td></tr><tr><td><code>financialDate</code></td><td>date</td><td>The financial date is to be used if <code>useCurrentFinancialDate</code> is set to false</td><td></td></tr><tr><td><code>loanAccountNumber</code></td><td>string</td><td>The unique identifier for the loan account</td><td></td></tr><tr><td><code>branchCode</code></td><td>string</td><td>The code representing the branch of the loan account</td><td></td></tr><tr><td><code>productCode</code></td><td>string</td><td>The product code linked to the loan account</td><td></td></tr><tr><td><code>employeeID</code></td><td>string</td><td>The employee ID linked to the report request</td><td></td></tr><tr><td><code>accountOfficerStaffID</code></td><td>string</td><td>The staff ID of the account officer responsible for the loan</td><td></td></tr><tr><td><code>pageNumber</code></td><td>integer</td><td>The page number for paginated results</td><td></td></tr><tr><td><code>pageSize</code></td><td>integer</td><td>The number of records per page for paginated results</td><td></td></tr></tbody></table>

Here is an example request and response with a sample payload sent to the endpoint in Curl format.

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseUrl}}/api/Report/v{{version}}/GetLoanTrackingReport?UseCurrentFinancialDate=true&LoanAccountNumber=1000003305000072273&BranchCode=001&ProductCode=001&EmployeeID=001&AccountOfficerStaffID=110&PageNumber=1&PageSize=10'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
//
```

</details>


# Product

## Search Product

<mark style="color:blue;">`GET`</mark> `/api/Product/v1/SearchProducts`

This API endpoint allows users to retrieve all available savings, loans, or fixed deposit products. customer's can access detailed information about the financial products offered by udara360.&#x20;

**Headers**

| Name                                            | Value                |
| ----------------------------------------------- | -------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | `application/json`   |
| Authorization<mark style="color:red;">\*</mark> | `Bearer <token>`     |
| Request-Reference                               | `{unique-reference}` |

**Query Parameter**

<table><thead><tr><th width="163">Name</th><th width="176">Data Type (length)</th><th>Description</th><th data-hidden>Required</th></tr></thead><tbody><tr><td><code>code</code></td><td>integer</td><td>The code representing the specific report or item.</td><td></td></tr><tr><td><code>type</code></td><td>string</td><td>The type associated with the code or report.</td><td></td></tr><tr><td><code>category</code></td><td>string</td><td>The category classification.</td><td></td></tr><tr><td><code>status</code></td><td>string</td><td>The current status of the code or report.</td><td></td></tr><tr><td><code>startDate</code></td><td>dateTime</td><td>The start date for the report or tracking period.</td><td></td></tr><tr><td><code>endDate</code></td><td>dateTime</td><td>The end date for the report or tracking period.</td><td></td></tr><tr><td><code>pageNumber</code></td><td>integer</td><td>The page number for paginated results.</td><td></td></tr><tr><td><code>pageSize</code></td><td>integer</td><td>The number of records per page for paginated results.</td><td></td></tr><tr><td><code>sortColumn</code></td><td>string</td><td>The column by which the results should be sorted.</td><td></td></tr><tr><td><code>direction</code></td><td>string</td><td>The direction of sorting (e.g., asc or desc).</td><td></td></tr></tbody></table>

<details>

<summary>Sample Request</summary>

```json
curl --location -g '{{baseUrl}}/api/Product/v1/SearchProducts?PageNumber=1&PageSize=2'
```

</details>

<details>

<summary>Respose: <code>200</code></summary>

```json
{
  "data": {
    "data": [
      {
        "id": "ab0479e7-fa58-4dce-8cba-6f21d2e568f6",
        "dateCreated": "2024-02-29T13:19:40.46",
        "code": 111,
        "name": "School Loan",
        "status": "Active",
        "type": "Loan",
        "category": "MicroLoan",
        "currency": null,
        "currencyCode": null,
        "accountNumberPrefix": null,
        "overdraftAccountNumber": null,
        "interestPayableAccountNumber": null,
        "interestExpenseAccountNumber": null,
        "interestReceivableAccountNumber": "10633005",
        "dueAndUnpaidOverdraftAccountNumber": null,
        "interestSuspenseAccountNumber": "20414004",
        "overdraftFeeIncomeAccountNumber": null,
        "overdraftInterestIncomeAccountNumber": null,
        "principalDueAndUnpaidAccountNumber": "10525003",
        "interestDueAndUnpaidAccountNumber": "10523005",
        "interestIncomeAccountNumber": "40304004",
        "specificLoanLossAccountNumber": "20309003",
        "generalLoanLossAccountNumber": "20308003",
        "unpaidLoanFeeAccountNumber": null,
        "suspendedLoanFeeAccountNumber": null,
        "unpaidLoanPenaltyAccountNumber": "",
        "suspendedLoanPenaltyAccountNumber": "",
        "penaltyIncomeAccountNumber": null,
        "vaTaccountNumber": null,
        "whTaccountNumber": null,
        "applyFee": null,
        "feeCode": null,
        "feeID": null,
        "applyCreditInterest": null,
        "interestCode": null,
        "interestID": null,
        "minimumBalance": null,
        "maximumBalance": null,
        "noOfDaysToDormancy": null,
        "noOfDaysToInactive": null,
        "coTfeeIncomeAccountNumber": null,
        "dueAndUnpaidFeeAccountNumber": null,
        "suspendedFeeAccountNumber": null,
        "chargeForAccountOpening": null,
        "accountOpeningFeeIncomeAccountNumber": null,
        "accountOpeningCharge": null,
        "accountOpeningNarration": null,
        "chargeForAccountMaintenance": null,
        "maintenanceFeeID": null,
        "accountMaintenanceFeeIncomeAccountNumber": null,
        "dueAndUnpaidMaintenanceFeeIncomeAccountNumber": null,
        "suspendedMaintenanceFeeIncomeAccountNumber": null,
        "minimumMaintenanceBalance": null,
        "maintenanceOnActiveAccountsOnly": null,
        "chargeForSMSNotification": null,
        "smsChargePerNotification": null,
        "smsFeeIncomeAccountNumber": null,
        "waiveSMSChargeForStaffAccount": null,
        "minimumAccountBalanceToStopSendingSMS": null,
        "minimumTransactionAmountToSkipSMS": null,
        "partLiquidationCharge": null,
        "interestRate": 0,
        "defaultTenure": 0,
        "loanSize": "Limited",
        "minimumLoanAmount": 100,
        "maximumLoanAmount": 300,
        "applySecurityDeposit": false,
        "holdFundSecurityDeposit": false,
        "securityDepositType": null,
        "securityDepositCharge": null,
        "gracePeriod": null,
        "tenure": null,
        "principalRepaymentType": "EndOfContract",
        "principalToBeRepaidEvery": 1,
        "principalInstallment": 12,
        "principalFrequency": "Monthly",
        "interestRepaymentType": "EndOfContract",
        "interestFrequency": "Monthly",
        "interestToBeRepaidEvery": 1,
        "interestInstallment": 12,
        "interestAccrualMode": "Fixed",
        "applyDefaultingLoanInterest": false,
        "defaultingLoanInterestChargeDuration": null,
        "defaultingInterestPercentage": null,
        "discontinueDefaultLoanInterestChargeInDays": null,
        "gracePeriodToStartDefaultInDays": 2,
        "unpaidDefaultLoanInterestAccount": "10635006",
        "suspendedDefaultLoanInterestAccount": "20422003",
        "defaultLoanInterestIncomeAccount": "40304004",
        "applyLoanFees": false,
        "applyPenalty": false,
        "penaltyCode": null,
        "penaltyGracePeriod": null,
        "penaltyChargeDuration": null,
        "periodToDiscontinuePenalty": null,
        "allowMultipleActiveLoansPerAccount": false,
        "allowMoratorium": "False",
        "moratoriumEffect": null,
        "moratoriumDuration": 0,
        "moratoriumFrequency": null,
        "repaymentOptionForDailyAndWeeklyHoliday": "MoveScheduleFoward",
        "repaymentOptionForOtherFrequencyHoliday": "MoveScheduleFoward",
        "enableRepaymentTracker": false,
        "repaymentTrackerInDays": null,
        "allowDisbursementsToGL": false
      },
      {
        "id": "e760e9c8-359c-4900-bd53-08987b7d9e3e",
        "dateCreated": "2024-02-28T16:48:49.63",
        "code": 100,
        "name": "Bella-Interest Receivable Account",
        "status": "Active",
        "type": "Loan",
        "category": "SmallAndMediumLoans",
        "currency": null,
        "currencyCode": null,
        "accountNumberPrefix": null,
        "overdraftAccountNumber": null,
        "interestPayableAccountNumber": null,
        "interestExpenseAccountNumber": null,
        "interestReceivableAccountNumber": "10633004",
        "dueAndUnpaidOverdraftAccountNumber": null,
        "interestSuspenseAccountNumber": "20414002",
        "overdraftFeeIncomeAccountNumber": null,
        "overdraftInterestIncomeAccountNumber": null,
        "principalDueAndUnpaidAccountNumber": "10527001",
        "interestDueAndUnpaidAccountNumber": "10523004",
        "interestIncomeAccountNumber": "40304003",
        "specificLoanLossAccountNumber": "20309002",
        "generalLoanLossAccountNumber": "20308002",
        "unpaidLoanFeeAccountNumber": null,
        "suspendedLoanFeeAccountNumber": null,
        "unpaidLoanPenaltyAccountNumber": "",
        "suspendedLoanPenaltyAccountNumber": "",
        "penaltyIncomeAccountNumber": null,
        "vaTaccountNumber": null,
        "whTaccountNumber": null,
        "applyFee": null,
        "feeCode": null,
        "feeID": null,
        "applyCreditInterest": null,
        "interestCode": null,
        "interestID": null,
        "minimumBalance": null,
        "maximumBalance": null,
        "noOfDaysToDormancy": null,
        "noOfDaysToInactive": null,
        "coTfeeIncomeAccountNumber": null,
        "dueAndUnpaidFeeAccountNumber": null,
        "suspendedFeeAccountNumber": null,
        "chargeForAccountOpening": null,
        "accountOpeningFeeIncomeAccountNumber": null,
        "accountOpeningCharge": null,
        "accountOpeningNarration": null,
        "chargeForAccountMaintenance": null,
        "maintenanceFeeID": null,
        "accountMaintenanceFeeIncomeAccountNumber": null,
        "dueAndUnpaidMaintenanceFeeIncomeAccountNumber": null,
        "suspendedMaintenanceFeeIncomeAccountNumber": null,
        "minimumMaintenanceBalance": null,
        "maintenanceOnActiveAccountsOnly": null,
        "chargeForSMSNotification": null,
        "smsChargePerNotification": null,
        "smsFeeIncomeAccountNumber": null,
        "waiveSMSChargeForStaffAccount": null,
        "minimumAccountBalanceToStopSendingSMS": null,
        "minimumTransactionAmountToSkipSMS": null,
        "partLiquidationCharge": null,
        "interestRate": 0,
        "defaultTenure": 0,
        "loanSize": "Limited",
        "minimumLoanAmount": 1000,
        "maximumLoanAmount": 2000,
        "applySecurityDeposit": false,
        "holdFundSecurityDeposit": false,
        "securityDepositType": null,
        "securityDepositCharge": null,
        "gracePeriod": null,
        "tenure": null,
        "principalRepaymentType": "EndOfContract",
        "principalToBeRepaidEvery": 1,
        "principalInstallment": 12,
        "principalFrequency": "Monthly",
        "interestRepaymentType": "EndOfContract",
        "interestFrequency": "Monthly",
        "interestToBeRepaidEvery": 1,
        "interestInstallment": 12,
        "interestAccrualMode": "Fixed",
        "applyDefaultingLoanInterest": false,
        "defaultingLoanInterestChargeDuration": null,
        "defaultingInterestPercentage": null,
        "discontinueDefaultLoanInterestChargeInDays": null,
        "gracePeriodToStartDefaultInDays": 2,
        "unpaidDefaultLoanInterestAccount": "10635006",
        "suspendedDefaultLoanInterestAccount": "20422002",
        "defaultLoanInterestIncomeAccount": "40102013",
        "applyLoanFees": false,
        "applyPenalty": false,
        "penaltyCode": null,
        "penaltyGracePeriod": null,
        "penaltyChargeDuration": null,
        "periodToDiscontinuePenalty": null,
        "allowMultipleActiveLoansPerAccount": false,
        "allowMoratorium": "InterestOnly",
        "moratoriumEffect": "IncreaseTotalLoanDuration",
        "moratoriumDuration": 365,
        "moratoriumFrequency": "Monthly",
        "repaymentOptionForDailyAndWeeklyHoliday": "DoNotMoveSchedule",
        "repaymentOptionForOtherFrequencyHoliday": "DoNotMoveSchedule",
        "enableRepaymentTracker": false,
        "repaymentTrackerInDays": null,
        "allowDisbursementsToGL": false
      }
    ],
    "recordCount": 33
  },
  "status": true,
  "message": "Request successful"
}
}
```

</details>


# Changelog

> &#x20;No new changes.  *( Updated November XX)*


# Udara360 User Guide

Welcome to Udara360 User Guide.

Udara360 is a comprehensive financial transaction management platform designed to streamline financial institution operations. By integrating advanced technology with a user-friendly interface, it offers a complete suite of tools for managing customer ledgers, general ledgers, financial postings, cheque withdrawals, batch reversals, and more. \
\
This robust platform enables institutions to optimize workflows, maintain compliance, and provide excellent customer service. With features such as advanced reporting, secure API integrations, and seamless data processing, Udara360 empowers organizations to scale their operations while ensuring efficiency and transparency.

## Udara360 User Interface Overview

The Udara360 user interface is a web-based platform serving as the central hub for all financial management activities. It provides users with various features to enhance their operational efficiency:

* **Detailed Reports**: Generate and access comprehensive reports for daily operational activities, auditing, reconciliation and decision making.
* **Transaction Management**: Conduct various postings like cash/cheque withdrawals and deposits, single/batch reversals, and journals.
* **Account Management**: Configure and administer ledgers, customer accounts, branches, and users.

### Access Udara360 UI via the following links:

* Production Environment: [https://PREFFERED\_NAME.udara360.io](https://docs.udara360.io/)
* Sandbox Environment: [ https://PREFFERED\_NAME.sandbox.udara360.io](https://docs.udara360.io/)

## [Udara360 APIs](https://docs.udara360.io/)

Udara360 provides RESTful APIs to enable programmatic interaction with the platform. These APIs support a wide range of operations, including:

* Managing accounts and transactions.
* &#x20;Automating batch processes like reversals and postings.
* Configuring system settings such as user permissions and workflows.
* Integrating with third-party applications for enhanced functionality.

\
Comprehensive documentation on authentication, API endpoints, request formats, and responses can be found in the [API Reference section](https://docs.udara360.io/udara360-docs-1).

## Udara360 Ecosystem

The Udara360 Ecosystem extends the platform’s core functionality by enabling seamless integration with third-party tools and services. Udara360 supports various connectors to simplify external interactions, from anti-money laundering systems to customer onboarding solutions.

## Udara360 User Guide

This guide provides a detailed overview of navigating, administering, and utilising the Udara360 platform for financial management. While the primary focus is on the Udara360 UI, it also covers conceptual and programmatic approaches using Udara360 APIs.

Key areas covered in this guide include:

* Posting transactions (e.g., deposits, withdrawals, and reversals).
* Managing user roles, accounts, and permissions.
* Troubleshooting common issues and system configurations.
* Accessing additional tools like advanced reporting and fraud monitoring.

\
For developers, conceptual topics related to API integrations are detailed in the [Developer Docs Section](https://docs.udara360.io/).

### Support

If you have questions or need assistance with Udara360, please contact Udara360 Support for direct help or to report any missing topics in this guide.<br>

Udara360 is constantly evolving, and your feedback helps us improve. Don’t hesitate to reach out!


# Onboarding

Udara360 Core Banking Application Onboarding Guide

This guide will help you navigate the onboarding process for your customized Core Banking Application. The onboarding process is divided into two stages to ensure secure access and personalized setup.

### Requirements

Before you begin, ensure you have:

* [x] Your Udara360 custom domain (e.g., example.udara360.io)
* [x] Username and initial password (sent to your email)
* [x] A smartphone/computer with an authenticator app installed (e.g., Google Authenticator, Authy or Microsoft Authenticator)

### Stage 1: Initial Access and Device Registration

1. Open your web browser and visit your Udara360 custom domain (e.g., example.udara360.io).
2. On the login page, enter the username and initial password provided in your onboarding email.
3. After successful login, you'll be prompted to register your device or browser. Click the **Request Access** button.
   * *<mark style="color:orange;">Note: This step is crucial for security and must be completed for each new device or browser you use to access Udara360.</mark>*
4. A confirmation dialog will appear. Review the approval information carefully and click the **Ok** button to proceed.
5. You will now need to wait for approval from your system administrator. This typically takes seconds, depending on the availability of your adminstrator to approve your request.

{% hint style="warning" %}
Note: Do not attempt to log in again until you receive an approval confirmation email.
{% endhint %}

<figure><img src="/files/uoICQwt9ygSkJhw1h9Ii" alt=""><figcaption></figcaption></figure>

### Stage 2: Account Personalization and Security Setup

Once you've received approval, follow these steps to complete your account setup:

1. Return to your Udara360 custom domain (e.g., example.udara360.io).
2. Log in using your username and the initial password.
3. You'll be immediately prompted to change your password:

   * Enter a **New Password** that meets the system's security requirements (typically including uppercase and lowercase letters, numbers, and special characters).
   * **Retype Password** to confirm *<mark style="color:orange;">(You can use a password manager to generate and store a strong, unique password)</mark>*.

   <figure><img src="/files/cuxbrQwVciA03wd7HtgF" alt=""><figcaption></figcaption></figure>
4. Set up your security questions:

   * Select **Security Questions** 1, 2, and 3 from the provided options.
   * Provide answers for each question.
   * Important: Choose answers that are memorable to you but not easily guessable by others. Avoid using publicly available information.
   * You can also set your security question by clicking the toggle button at the top of the page.

   <figure><img src="/files/aLpuBHNvGdWhL6wBBS1U" alt=""><figcaption></figcaption></figure>
5. Click the **Save** button to proceed.
6. Set up Multi-Factor Authentication (MFA) using an authenticator app:

   * Open your authenticator app on your smartphone.
   * In Udara360, you'll see instructions and a QR code on the screen.
   * Use your authenticator app to scan the QR code or manually enter the provided key.
   * Once added, your app will display a 6-digit code that refreshes every 30 seconds.

   <figure><img src="/files/f3e25GtFfRrlVIj9TJwO" alt=""><figcaption></figcaption></figure>
7. Enter the current 6-digit **MFA Code** from your authenticator app into Udara360.
8. Click the **Activate** button to complete your onboarding process.

### Post-Onboarding Best Practices

* [x] Change your password regularly (every 90 days is recommended). For users who fails to initiate their password change will make the system to trigger a forced password change at the right time to ensure users are compliant with password management policy.
* [x] Never share your login credentials or MFA codes with anyone.
* [x] Always access Udara360 through your official custom domain on your registered device/browser.
* [x] Log out after each session; Udara360 also logs out automatically when inactive for a period of time.
* [x] Keep your authenticator app and the device it's installed on secure.

### Having Onboarding Issues&#x20;

* [ ] If you don't receive the onboarding email, check your spam folder.
* [ ] For login issues, ensure you're using the correct custom domain.
* [ ] Contact your system administrator for assistance if you cannot complete Stage 2.

{% hint style="danger" %}
**Note:** The security of your Udara360 account is crucial for protecting sensitive banking information. Contact your IT support team immediately if you suspect unauthorized access or have concerns.
{% endhint %}


# Dashboard Overview

The Udara360 Dashboard is the first screen users see after logging in and serves as the central command center for monitoring the institution's financial health at a glance.

To access the Dashboard, click **Dashboard** in the left sidebar.

### **Welcome Message**

Upon logging in, the Dashboard displays a personalized welcome message showing your username alongside their last login time and date. This allows you to quickly verify their most recent session and detect any unauthorized access to your account.

### **Deposit By Customer Type**

The Deposit By Customer Type widget provides a breakdown of total deposits across the institution's customer segments.&#x20;

It displays the deposit count and total amount for each of the following customer types:

* Corporate
* Group
* Group Joint
* Individual
* Group SME

This breakdown gives you a clear picture of where deposits are concentrated across your customer base.

<figure><img src="/files/BycANSkAzPByQ5jkOIT3" alt=""><figcaption></figcaption></figure>

### **Loan Portfolio Summary**

The Loan Portfolio Summary provides a real-time snapshot of your entire loan book.&#x20;

It displays the following metrics; **Total Loans Disbursed, Total Principal Outstanding, Total Interest Outstanding, Total Principal Paid, Total Principal Due And Unpaid, and Total Principal Not Yet Due.**&#x20;

These figures give you a complete picture of your lending activity, repayment performance, and exposure at any given point in time.

<figure><img src="/files/yaJ0A5AWNBj4ba5oA7Mr" alt=""><figcaption></figcaption></figure>

### **Loan Awaiting Disbursement**

The Loan Awaiting Disbursement widget displays the total number of approved loans that are pending disbursement. This figure updates in real time, allowing you to track and prioritize pending loan releases efficiently.

<figure><img src="/files/IOdiPZJRjGeLECOJHTii" alt=""><figcaption></figcaption></figure>

### **NPL Ratio**

The NPL Ratio displays the percentage of loans that are in default or at risk of default. A lower NPL ratio indicates a healthier loan portfolio, while a higher ratio signals increased credit risk requiring immediate attention.

<figure><img src="/files/Iw9xT1gyNbkgYnqFVo0T" alt=""><figcaption></figcaption></figure>

### **Recent Activities**

The Recent Activities widget displays a real-time timeline of system events, including the actions and updates to customer account limits.&#x20;

Each entry shows the activity type and the exact time it occurred.&#x20;

To view the complete activity log, click the **View All** button at the bottom of the widget.

<figure><img src="/files/IeS5SmdpyyHrtM0CMzk4" alt=""><figcaption></figcaption></figure>

### **Customer Growth Analytics**

The Customer Growth Analytics widget displays a line graph tracking customer acquisition growth over time.&#x20;

The graph highlights monthly fluctuations in customer growth, enabling you to identify trends, and evaluate the effectiveness of customer acquisition strategies.

<figure><img src="/files/zn0cMOhmVUJcSwC6KPWA" alt=""><figcaption></figcaption></figure>


# Executive Dashboard

The Executive Dashboard provides you with the institution's overall financial health. Unlike the standard Dashboard, it consolidates advanced metrics covering loan performance, compliance, customer analytics, and financial statements, enabling strategic oversight and informed decision-making across the organization.

To access the Executive Dashboard, click **Dashboard** in the left sidebar, then select **Executive Dashboard**.

### **Welcome Message**

Upon logging in, the Executive Dashboard displays a personalised welcome message showing your user name alongside your last login, time, and date. This allows you to quickly verify your most recent session and detect any unauthorized access to your account

### **Deposit By Customer Type**

The Deposit By Customer Type widget displays the total deposit count and corresponding amount for each customer segment in the institution.

The following customer segments are displayed as:

* Corporate
* Group
* Group Joint
* Individual
* Group SME

<figure><img src="/files/4BUU9aY2py6BsBGcCCXU" alt=""><figcaption></figcaption></figure>

### **Loan Portfolio Summary**

The Loan Portfolio Summary provides a real-time snapshot of the institution's entire loan book.&#x20;

It displays the following metrics:

* **Total Loans Disbursed**
* **Total Principal Outstanding**
* **Total Interest Outstanding**
* **Total Principal Paid**
* **Total Principal Due and Unpaid**
* **Total Principal Not Yet Due**

<figure><img src="/files/Ym9LZts8B3KqFk9aiI1E" alt=""><figcaption></figcaption></figure>

> Note: These figures give you a complete picture of the institution's lending activity, repayment performance, and exposure at any given point in time.

### **Loan Awaiting Disbursement**

The Loan Awaiting Disbursement widget displays the total number of approved loans that are pending disbursement. This figure updates in real time, allowing you to track and prioritize pending loan releases efficiently.&#x20;

<figure><img src="/files/1kPDqZeKBeitSyTG53VT" alt=""><figcaption></figcaption></figure>

> Note: A consistently high number may indicate bottlenecks in the disbursement process that might require attention.

### **NPL Ratio**

The NPL Ratio displays the percentage of loans in the institution's portfolio that are in default or at risk of default. This metric updates in real time, enabling you to monitor portfolio quality and take prompt corrective action where necessary.

<figure><img src="/files/lvUCrcFdhL81Fvzh9HVs" alt=""><figcaption></figcaption></figure>

### **Customer Growth Analytics**

<figure><img src="/files/RiE8ew682drU0hKZxCx8" alt=""><figcaption></figcaption></figure>

The Customer Growth Analytics widget displays a line graph tracking customer acquisition growth over time. The graph highlights monthly fluctuations in customer growth, enabling you to identify trends, and make data-driven decisions to drive institutional growth.

### **Recent Activities**

The Recent Activities widget displays a real-time timeline of system events, including your actions and updates to customer account limits. Each entry shows the activity type and the exact time it occurred.&#x20;

To view the complete activity log, click the <mark style="color:blue;">**View All**</mark> button at the bottom of the widget.

<figure><img src="/files/8ckr3x4HoU3jBxcFo9Wz" alt=""><figcaption></figcaption></figure>

### **Last Logged-in Users**

The Last Logged-in Users table provides a record of the ten most recent access on the Udara360 platform. For each access, the following details are displayed:

* **S/N**
* **Name**
* **Branch**
* **Role**
* **Time Logged In**

This widget supports security oversight by allowing you to monitor access patterns and identify any unusual or unauthorized login activity across the institution.

### **Balance Sheet Snapshot**

The Balance Sheet Snapshot gives you an instant view of the institution's financial position at a glance. It displays three core categories:

* **Asset**
* **Liability**
* **Capital**

This snapshot enables you to assess the overall financial strength of the institution without navigating to a full financial report.

<figure><img src="/files/1tHuz68a6elktgIBkcSd" alt=""><figcaption></figcaption></figure>

### **Income Statement Snapshot**

The Income Statement Snapshot provides a summary of the institution's financial performance over the current period. It displays the following:

* **Income**
* **Expense**
* **Profit or Loss**

A positive figure indicates profitability, while a negative figure signals a net loss requiring strategic review.

<figure><img src="/files/59iBHCT1bvJDCZbkE5rG" alt=""><figcaption></figcaption></figure>

### **Account Stats By Status**

The Account Stats By Status widget displays a pie chart showing the distribution of customer accounts across all status categories, giving you a quick visual overview of the institution's account portfolio health.

The following account statuses are represented:

* **Active**
* **Closed**
* **Dormant**
* **Frozen**
* **Inactive**
* **PNC**
* **PND**

<figure><img src="/files/bb9mtNxJJpEwf2HLev6O" alt=""><figcaption></figcaption></figure>

### **Customers By Gender**

The Customers By Gender widget displays a pie chart showing the demographic breakdown of the institution's customer base by gender. The chart categorizes customers into three groups:

* Female
* Male
* Others

<figure><img src="/files/IWjZgx1KEjm7TysrxkdA" alt=""><figcaption></figcaption></figure>

This data supports strategic planning around customer inclusivity, targeted product development, and demographic reporting to regulatory bodies.

### **Loan Portfolio Risk Summary**

The Loan Portfolio Risk Summary provides a breakdown of the institution's loan portfolio by risk classification. Each classification reflects the likelihood of repayment and the level of intervention required:

* **Performing:** loans being repaid on schedule with no cause for concern
* **Pass and Watch:** loans showing early signs of stress that require monitoring
* **Substandard:** loans with clear repayment difficulties requiring active management
* **Doubtful:** loans where full recovery is uncertain and provisions may be required
* **Lost:** loans considered unrecoverable and written off or provisioned in full

<figure><img src="/files/Zt5z3Yvm1reKnwUp6Tjs" alt=""><figcaption></figcaption></figure>

This breakdown enables you to assess the quality of the loan book and determine appropriate provisioning and recovery strategies.

### **Portfolio At Risk Summary**

The Portfolio At Risk (PAR) Summary measures the proportion of the loan portfolio that is at risk of default, broken down by the number of days payments are overdue:

* **PAR 7 Days**
* **PAR 30 Days**
* **PAR 60 Days**
* **PAR 90 Days**
* **PAR 180 Days**
* **PAR 360 Days**

> Note: A rising PAR figure across any time bucket is an early warning indicator that warrants immediate review of the institution's loan recovery and collections strategy.

### **Asset Quality Ratio**

The Asset Quality Ratio widget displays three key ratios that measure the relationship between the institution's loans, deposits, and savings:

* **Percentage of Loans to Deposits**
* **Micro Loan as a Percentage of Total Loan**
* **Savings as a Percentage of Total Deposits**

These ratios help you assess the institution's liquidity position, lending concentration, and deposit structure at a glance.

### **Top 10 Depositors**

The Top 10 Depositors table identifies the institution's ten largest depositors by ledger balance. For each depositor, the following information is displayed:

* **S/N**
* **Account Number**
* **Account Name**
* **Product Type**
* **Ledger Balance**
* **Percentage of Total Deposits**

This widget highlights deposit concentration risk, if a significant portion of total deposits is held by a small number of customers, the institution may be vulnerable to sudden liquidity pressure if those customers withdraw.

### **Top 10 Risk Exposures To Customers**

The Top 10 Risk Exposures to Customers table identifies the ten customers with the highest outstanding loan balances, representing the institution's largest credit risk concentrations. The following details are displayed for each customer:

* **S/N**
* **Account Number**
* **Account Name**
* **Product Type**
* **Outstanding Balance**
* **Percentage of Total Exposures**

Monitoring this table helps you identify single-borrower concentration risks and ensure compliance with regulatory exposure limits.

### **BVN & NIN Compliance**

The BVN & NIN Compliance widget displays a bar chart showing the compliance status of the institution's customer base across account tiers, in line with Central Bank of Nigeria (CBN) regulatory requirements.&#x20;

The chart categorizes customers into four compliance groups:

* **Has BVN Only**
* **Has NIN Only**
* **Has BVN and NIN**
* **No BVN and No NIN**

<figure><img src="/files/ddaoEPbXpUkJuIq9SlH8" alt=""><figcaption></figcaption></figure>

The data is broken down across Tier 1, Tier 2, Tier 3, and a Total column, giving you a clear view of KYC gaps that require immediate remediation to meet CBN regulatory standards.


# Customisation

The Theme & Animation settings allow you to customize the visual appearance and transition effects of your Udara360 interface. This guide will help you configure your theme and animation preferences under Account Settings.

### Accessing Theme & Animation Settings

1. Click your profile name at the top right of the screen
2. Select **Settings** from the dropdown
3. Click **Preferences** in the left sidebar
4. Scroll down to the **Theme** and **Animation** sections

### Skin Options

The Skin setting allows you to choose the color scheme of your Udara360 interface. Select your preferred option by clicking the radio button next to it. The following options are available:

* **Light:** The "Light" option offers a bright colour scheme with a clean interface.
* **Dark:** The "**Dark**" setting is ideal for low-light environments, reducing eye strain.&#x20;
* **Bordered:** The "**Bordered**" option adds distinct borders for better organisation.&#x20;
* **Semi Dark**: The "**Semi Dark**" theme offers a versatile balance between light and dark, adapting to different lighting conditions.

<figure><img src="/files/CC8eXD8V5gSd62zhandn" alt=""><figcaption></figcaption></figure>

### Content Width

The Content Width setting allows you to control how content is displayed across your screen. Select your preferred option by clicking the radio button next to it:

* **Full Width**: The content stretches to fill the entire width of the screen. &#x20;
* **Boxed**:  The content is limited to a fixed width, creating margins on either side of the application.

### Animation

The Router Transition setting allows you to choose the transition effect when navigating between pages in Udara360. Click the **Router Transition** dropdown and select your preferred effect. The following options are available:

<table><thead><tr><th width="236">Transition Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>Zoom Fade</strong></td><td>The page fades and zooms as it transitions.</td></tr><tr><td><strong>Fade</strong></td><td>A simple fade transition between pages.</td></tr><tr><td>Fade Bottom</td><td>The page fades in from the bottom.</td></tr><tr><td>Slide Fade</td><td>Pages slide with a fading effect during the transition.</td></tr><tr><td>Zoom Out</td><td>The current page zooms out as the next page loads (currently selected in the screenshot).</td></tr><tr><td>None</td><td>No transition effect is applied.</td></tr></tbody></table>

<figure><img src="/files/R0odfryT4EIcYblynK8O" alt=""><figcaption></figcaption></figure>


# Change Language

The Language setting allows you to customise the display language of your Udara360 interface. This setting is specific to your account and does not affect other users on the platform. Once updated, the changes are applied instantly across the platform.

### **Preferred Language**

The Preferred Language dropdown allows you to select the language in which the Udara360 interface is displayed. Currently, the following languages are supported:

* **English**
* **French**

<figure><img src="/files/JQeyQicfZVVNqAK6DxwV" alt=""><figcaption></figcaption></figure>

### **Changing Your Preferred Language**

1. Click your profile name at the top right of the screen
2. Select **Settings** from the dropdown
3. Click **Preferences** in the left sidebar
4. Under **Language**, click the **Preferred Language** dropdown
5. Select your preferred language and the interface will update instantly

<figure><img src="/files/Sr4xCaz7iODOa0vUwF4f" alt=""><figcaption></figcaption></figure>


# Navigations & Sidebars

The Navigation & Sidebar settings allow you to customise how you navigate the Udara360 platform. You can choose to collapse the sidebar by default for more workspace and set your preferred landing page after login. This guide will help you configure your navigation preferences under Account Settings.

### **Accessing Navigation & Sidebar Settings**

* Click your profile name at the top right of the screen
* Select **Settings** from the dropdown
* Click **Preferences** in the left sidebar
* Scroll down to the **Navigation & Sidebar** section

<figure><img src="/files/8MZl3gl4Wb2EOtAJ16z4" alt=""><figcaption></figcaption></figure>

### **Sidebar Collapsed by Default**&#x20;

This setting allows you to start with a minimized sidebar, giving you more workspace on the screen. Toggle the switch on to collapse the sidebar by default when you log in, or toggle it off to keep the sidebar fully expanded.

<figure><img src="/files/TTSDeo8TylJe0j4TvhHn" alt=""><figcaption></figcaption></figure>

### **Default Landing Page**

This setting allows you to choose which page opens automatically when you log in to Udara360. Click the **Default Landing Page** dropdown to select your preferred page. Available options include Home, Executive Dashboard, Dashboard, Account Category, Charges, Account Officer, Re-assign Account Officer, Current and Savings, Fixed Deposit, and more.

<figure><img src="/files/55PbTzeT1pqYEq9UV6hs" alt=""><figcaption></figcaption></figure>


# Typography

The Typography settings allow you to customise the font style and text size of the Udara360 interface to suit your reading preference. Changes apply instantly and only affect your account. This guide will help you configure your typography preferences under Account Settings.

### **Accessing Typography Settings**

1. Click your profile name at the top right of the screen
2. Select **Settings** from the dropdown
3. Click **Preferences** in the left sidebar
4. Scroll down to the **Typography** section

<figure><img src="/files/YJZOJ88pPm0s1LQOUv5E" alt=""><figcaption></figcaption></figure>

### **Preferred Font**

The Preferred Font dropdown allows you to select the font style displayed across your Udara360 interface. The following fonts are available; Montserrat, Fira Sans, Karla, Lato, Lora, and more.

1. Click the **Preferred Font** dropdown
2. Select your preferred font from the list
3. The interface font will update instantly

<figure><img src="/files/FRlDUdLbKihRydDAl95K" alt=""><figcaption></figcaption></figure>

### **Font Size**

The Font Size slider allows you to adjust the text size across your Udara360 interface for better readability. Drag the slider to the left to decrease the font size or to the right to increase it.&#x20;

The current size is displayed as a percentage on the right side of the slider, the default is **100%**.

<figure><img src="/files/lL482mVIkIANo6vpFLDm" alt=""><figcaption></figcaption></figure>


# Theme & Animation

The Theme & Animation settings allow you to customise the visual appearance and transition effects of your Udara360 interface. This guide will help you configure your theme and animation preferences under Account Settings.

### Accessing Theme & Animation Settings

1. Click your profile name at the top right of the screen
2. Select **Settings** from the dropdown
3. Click **Preferences** in the left sidebar
4. Scroll down to the **Theme** and **Animation** sections

### Skin Options

The Skin setting allows you to choose the color scheme of your Udara360 interface.&#x20;

Select your preferred option by clicking the radio button next to it. The following options are available:

* **Light:** The "Light" option offers a bright colour scheme with a clean interface.
* **Dark:** The "**Dark**" setting is ideal for low-light environments, reducing eye strain.&#x20;
* **Bordered:** The "**Bordered**" option adds distinct borders for better organisation.&#x20;
* **Semi Dark**: The "**Semi Dark**" theme offers a versatile balance between light and dark, adapting to different lighting conditions.

<figure><img src="/files/CC8eXD8V5gSd62zhandn" alt=""><figcaption></figcaption></figure>

### Content Width

The Content Width setting allows you to control how content is displayed across your screen. Select your preferred option by clicking the radio button next to it:

* **Full Width**: The content stretches to fill the entire width of the screen. &#x20;
* **Boxed**:  The content is limited to a fixed width, creating margins on either side of the application.

### Animation

The Router Transition setting allows you to choose the transition effect when navigating between pages in Udara360. Click the **Router Transition** dropdown and select your preferred effect. The following options are available:

<table><thead><tr><th width="236">Transition Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>Zoom Fade</strong></td><td>The page fades and zooms as it transitions.</td></tr><tr><td><strong>Fade</strong></td><td>A simple fade transition between pages.</td></tr><tr><td>Fade Bottom</td><td>The page fades in from the bottom.</td></tr><tr><td>Slide Fade</td><td>Pages slide with a fading effect during the transition.</td></tr><tr><td>Zoom Out</td><td>The current page zooms out as the next page loads (currently selected in the screenshot).</td></tr><tr><td>None</td><td>No transition effect is applied.</td></tr></tbody></table>

<figure><img src="/files/Q1G5U3ZRegTHrPRL5E7i" alt=""><figcaption></figcaption></figure>


# Udara AI

The Udara AI setting allows you to customise how the AI chat assistant appears on your screen while using Udara360. You can choose between two display positions depending on your preference and workflow. This guide will help you configure your Udara AI settings under Account Settings.

### **Accessing Udara AI Settings**

1. Click your profile name at the top right of the screen
2. Select **Settings** from the dropdown
3. Click **Preferences** in the left sidebar
4. Scroll down to the **Udara AI** section

<figure><img src="/files/3TajGhwzX28eDjhSh1Dg" alt=""><figcaption></figcaption></figure>

### **Chat Position**

The Chat Position setting allows you to choose how the Udara AI chat assistant appears on your screen. Two options are available:

* **Docked (Bottom Bar):** the AI chat is fixed to the bottom of your screen as a bar
* **Floating (Bubble):** the AI chat appears as a floating bubble on your screen

Select your preferred option by clicking the radio button next to it.

<figure><img src="/files/xU7gpgdPc5wGiuUl2uIC" alt=""><figcaption></figcaption></figure>


# Pagination

The Pagination feature allows you to navigate through large datasets across Udara360 without scrolling through lengthy lists. It is available on all pages that display tabular data, including Accounts, Postings, Reports, and Role Management. This guide will help you understand and use the pagination controls effectively.

### **Accessing Pagination**

Pagination is automatically applied on any page that displays large datasets. When the number of records exceeds the default page limit, the system divides the data into multiple pages and displays the pagination controls at the bottom of the table.

<figure><img src="/files/saGI9ta7Rz87JCCf64JC" alt=""><figcaption></figcaption></figure>

> The bottom left of every paginated table shows a summary of your current view.&#x20;

### **Pagination Controls**

At the bottom right of every paginated table, you will find the following controls:

* Click a specific **page number** to jump directly to that page
* Click the **Previous (‹)** button to go back one page
* Click the **Next (›)** button to move forward one page
* **Ellipsis (...)** indicates additional pages beyond the visible range

### **Adjusting the Number of Entries Per Page**

The **Show** dropdown at the top left of every paginated table allows you to control how many records appear on each page. The following options are available; 10, 25, 50, and 100 entries per page.

1. Locate the **Show** dropdown at the top left of the table
2. Click the dropdown and select your preferred number of entries
3. The table will refresh automatically displaying the updated number of entries

<figure><img src="/files/ocCLkVQ0CYEV8mILA7Lx" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
This feature is beneficial when viewing more data on one page, reducing the need to navigate multiple pages.
{% endhint %}


# Date Selection

The Date Selection feature allows you to pick specific dates across various sections of Udara360, from filtering transaction records and generating reports to setting deadlines and inputting customer information. The date picker is designed for speed and precision, allowing you to input dates directly without scrolling through months or years manually. This guide will help you use the date picker effectively across the platform.

### **Accessing the Date Picker**

The date picker appears automatically whenever a date input is required. You will encounter it when filtering payment history, generating reports, setting billing dates, inputting a customer's date of birth, or selecting deadlines for loans and postings. Simply click on any input field marked with a **calendar icon** to open the date picker popup.

<figure><img src="/files/hjwANZtJPGIbWEDWvoPw" alt=""><figcaption></figcaption></figure>

### **Selecting a Date**

Once the date picker is open, follow these steps to select your desired date:

1. Click on the **year label** at the top of the calendar popup, the field becomes editable, allowing you to type your desired year directly
2. Press **Enter** or click outside the field to confirm the year
3. Click on the desired **month** from the calendar
4. Click on the specific **day** from the calendar grid
5. The selected date will automatically populate into the input field

<figure><img src="/files/oUVuoJ1Hyb63emRLEXBs" alt=""><figcaption></figcaption></figure>


# Search/Filter

The Search/Filter feature allows you to narrow down records displayed on any list page in Udara360 based on specific criteria. It is available on all pages that display tabular data, including Postings, Accounts, Reports, and Role Management. This guide will help you apply, manage, and reset filters across the platform.

### **Using the Filter**

The Filter button is located at the top right of every list page. Clicking it opens a filter panel displaying fields relevant to the data on that page; for example, the filter panel on the Cash Deposit page shows fields like Account Name, Account Number, Reference Number, Branch, and Date Range, while the Account Closure page shows fields like Account Number, Closure Date, Branch, and Closure Reason.

1. Click the **Filter** button at the top right of the list page
2. Enter your preferred filter criteria in the available fields
3. Click **Apply** to display the filtered results

<figure><img src="/files/aOQ0bdjrOy4wgEFgdJEd" alt=""><figcaption></figcaption></figure>

### **Resetting Filters**

To remove all applied filters and return to the full dataset, click the **Reset Filter** button at the top right of the list page. This clears all selected criteria and restores the table to its original state.

<figure><img src="/files/VuSfclqbqXBRqRzDnsXk" alt=""><figcaption></figcaption></figure>

> 📌**Note:** Always click **Reset Filter** after completing a filtered search before starting a new one, this ensures no previous filter criteria carry over into your next search and affect your results.

<figure><img src="/files/feQiQYHXMmSbJdexsSoM" alt=""><figcaption></figcaption></figure>

> 📌Note: You do not need to fill in every field, enter only the criteria relevant to the records you are looking for.


# Reset Password

The Reset Password page allows you to update your Udara360 password or recover access to your account if you have forgotten your password. Udara360 provides two ways to manage your password; the **Forgot Password** option for users who are unable to log in and the **Change Password** option for users who are already logged in. This guide will walk you through both options.

### **Forgot Password**

The Forgot Password option allows you to recover access to your account if you are unable to log in.

1. On the login page, click the **Forgot Password** link next to the Password field
2. Enter the email address linked to your Udara360 account and click **Next**
3. Check your email inbox for a one-time authentication token
4. Enter the token in the **Token** field and click **Confirm**
5. Follow the on-screen instructions to set your new password

<figure><img src="/files/WDCYvTNjQa2jx0CWQ6l1" alt=""><figcaption></figcaption></figure>

### **Change Password**

The Change Password option allows you to update your password from within your account settings.

1. Click your profile name at the top right corner of the screen
2. Select **Settings** from the dropdown
3. Click **Change Password** in the left sidebar
4. Enter your **Current Password**, **New Password**, and **Retype New Password**
5. Click **Save** to apply your new password

<figure><img src="/files/ue2h1lmfavENe2bENJ8e" alt=""><figcaption></figcaption></figure>

> 📌 Below the password fields, you can set up to three security questions to further secure your account. Toggle **"Do you wish to create your own questions?"** to create personalized questions.


# User Management

The User Management page enables administrators to oversee and control all user accounts, allowing them to create, modify, and deactivate them. This streamlines user access and maintains system integrity.

## Access The User Management Page

1. Log into the application using your credentials.
2. From the dashboard, navigate to the **Admin Portal** in the side menu.
3. Select **User Management** from the dropdown list to access the page.

<figure><img src="/files/v6ejLVNYCPbhzlO66UDb" alt=""><figcaption></figcaption></figure>

## Add A User To Udara360

To add a new user to the Udara360 system, follow these steps:

1. Click the **Add** button in the top-left corner of the User Management page.
2. Complete the following field sections:
   * **Personal Information:** Provide the user's personal information details (e.g., First & Last Name, Email, Address...).
   * **Employee Information:** Provide the employee/staff information (e.g., employee number, role, branch, access level, etc.).
   * **User System Information:** Toggle the button to grant access to system functions. You can individually select the functions the user is allowed to access.
3. Click the **Save** button to add the user
4. Confirm the action by selecting **“Yes, I want to proceed.”**

<figure><img src="/files/TQMJuJyyQUK2gRJhXVNY" alt=""><figcaption></figcaption></figure>

## User Management Actions&#x20;

You can modify, view, deactivate, and reset a user's password on Udara360. To do this:

* In the **Actions** column, click the three vertical dots **(⋮)**&#x20;
* Select any of the actions you want to perform from the dropdown menu.

<figure><img src="/files/XTZtPk8qNjNrscvDpLAc" alt=""><figcaption></figcaption></figure>


# User Roles

The User Role page is an important part of the Admin Portal. It allows administrators to manage the roles and permissions assigned to different users. Role determine the functions that users are authorized to perform within the system, providing a flexible way to control access and maintain security.

## Access The User Role Page

1. Log into the application using your credentials.
2. From the dashboard, navigate to the **Admin Portal** in the side menu.
3. Select **User Role** from the dropdown list to access the page.

<figure><img src="/files/OUvEm2rfGoB5hPmnGwvL" alt=""><figcaption></figcaption></figure>

## Add A New User Role

To add a new user role to the Udara360 system, follow these steps:

1. Click the **Add** button in the top-left corner of the User Management page.
2. Fill in your **Role Name.**
3. Fill in your **Role Description.**
4. Select the administrative functions the user is allowed to access.
5. Click the **Save** button to add the user
6. Confirm the action by selecting **“Yes, I want to proceed.”**

<figure><img src="/files/xXbQoZrT0TIHnHvwpnJ0" alt=""><figcaption></figcaption></figure>

## Modifying A User Role

To modify an existing User Role:

1. In the **Actions** column, click the three vertical dots (⋮) next to the Role you wish to modify.
2. Select **Modify** from the dropdown menu.
3. Update the necessary user role details and access.
4. Click **Update** to apply the changes.
5. Confirm the action by selecting **“Yes, I want to proceed.”**


# Account

An overview of the account management pages available in Udara360, covering account setup, customer accounts, fees, ledgers, and related configurations

The Account Management section brings together the tools needed to manage customer accounts, account officers, fees, ledgers, and recurring transactions within Udara360. Select a page from the sidebar to get started.


# Account Category

The Account Category page allows you to manage chart of account categories, view their details, and perform actions like filtering and resetting filters. This guide will help you navigate the Account Category section and perform essential actions. Visit the [Create Account Category](https://docs.udara360.io/) page to create a new account category.&#x20;

## Accessing The Account Category Page

1. Log into the application using your credentials.
2. From the dashboard, navigate to **Accounts** in the side menu.
3. Select **Account Category** from the dropdown list.

This page shows the account category **name**, **description**, **level**, **category code**, **parent name**, and **created date**.&#x20;

<figure><img src="/files/kb6LX3xV8ncAwOIoq5GX" alt=""><figcaption></figcaption></figure>

## Create Account Category

To create a new category, do the following steps:

1. Click the **Add** button at the page's top left
2. Fill in the following details:
   * **Category Name**: Input your desired category name
   * **Level 1**: Select the option under which your category falls
   * **Level 2/3**: Select your subheading category level option
   * **Description**: Provide a category description
3. Click **Save** to apply changes
4. Confirm the action by clicking **"Yes, I want to proceed"**, or **"No, thanks"** to cancel

<figure><img src="/files/2LDmIRvUVav5Mrjh8NLV" alt=""><figcaption></figcaption></figure>

## Managing An Account Category

To manage an existing category:

1. In the **Actions** column, click the **three vertical dots (⋮)** next to the category you wish to manage
2. Select the appropriate option:
   * **View:** see the category's full details
   * **Modify:** edit the category's details

## Filter a Category

To filter an account category, follow these steps:

1. From the side menu, go to **Account > Account Category**
2. Click the **Filter** button at the top right of the page
3. Input your filter criteria. You can filter by **Name**, **Code**, **Level**, or **Level 1**
4. Click **Apply** to complete

> :pushpin:Click **Reset Filter** to clear all applied filters and return to the full list.

<figure><img src="/files/OwQzeAmeNG9QYIhinAKy" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Reset Filter**: To reset a filter, click the **Reset Filter** button at the top right of the page.
{% endhint %}


# Account Officer

The Account Officer page allows you to manage and oversee account officers, add new officers, view and edit their details, manage their access levels, and control their active status. This guide will walk you through all actions available on the Account Officer page.

## Accessing The Account Officer Page

1. Log into the application using your credentials
2. From the dashboard, navigate to **Accounts** in the side menu
3. Select **Account Officer** from the dropdown list

<figure><img src="/files/8F7Ggkx1epLwSgh8IGAD" alt=""><figcaption></figcaption></figure>

> The page displays a table listing each officer's Staff ID, Name, Phone Number, Access Level, Branch Name, Date Created, Status, and Actions. You can also search for a specific officer using the **Search officer name** field at the top right of the page.

## Adding a New Account Officer

To create a new Account Officer:

1. Click the **Add** button at the top left of the page
2. Use the **Select User** dropdown and choose from the list of active users created under User Management, the system will autofill the First Names, Last Name, and other basic details
3. Fill in the remaining fields: **Branch**, **Staff ID**, **Phone Number**, **Access Level**, **Gender**, **Address**, **Supervisor Name**, and **Supervisor Email**
4. Click **Save** to add the new officer

<figure><img src="/files/swgbem5CmCKbqUMinNqY" alt=""><figcaption></figcaption></figure>

## Modifying Account Officer Details

1. In the Actions column, click the three vertical dots (⋮) next to the officer's record
2. Select **Modify** from the dropdown
3. Update the necessary details, such as **Staff ID**, **Gender**, **Access Level**, or **Supervisor Name**
4. Click **Update** to save the changes
5. Click **"Yes, I want to proceed"** to confirm the update, or **"No, thanks"** to cancel

## Viewing Account Officer Details

1. In the **Actions** column, click the **three vertical dots (⋮)** next to the officer's record
2. Select **View** to see the full details of the account officer record

## Unlinking a User from an Account Officer

1. In the **Actions** column, click the **three vertical dots (⋮)** next to the officer's record
2. Select **Unlink User** to remove the user account linked to this officer record

## Activating An Account Officer

1. In the **Actions** column, click the **three vertical dots (⋮)** next to an InActive officer's record
2. Select **Activate**
3. Click **"Yes, I want to proceed"** to confirm, or **"No, thanks"** to cancel

## Deactivating An Account Officer

1. In the Actions column, click the three vertical dots (⋮) next to an Active officer's record
2. Select **Deactivate**
3. Click **"Yes, I want to proceed"** to confirm, or **"No, thanks"** to cancel

{% hint style="info" %}
The option shown in the Actions dropdown (Activate or Deactivate) depends on the officer's current status.
{% endhint %}

### **Filtering Account Officer Records**

1. Click the **Filter** button at the top right of the page
2. Enter your preferred filter criteria
3. Click **Apply** to display the filtered results

{% hint style="info" %}
You can also select multiple and reassign account officers all at once.
{% endhint %}


# Re-assign Account Officer

The Re-assign Account Officer page allows you to transfer all accounts managed by one officer to another. This is useful when an officer is deactivated, changes roles, or when accounts need to be redistributed across your team. This guide will walk you through the full reassignment process.

## Accessing Re-assign Account Officer

1. Log into the application using your credentials
2. From the dashboard, navigate to **Accounts** in the side menu
3. Select **Re-assign Account Officer** from the dropdown list

<figure><img src="/files/NgshU7BH2vBO0Etf50Qc" alt=""><figcaption></figcaption></figure>

## Reassigning An Account Officer

1. Click the **Select Old Account Officer** dropdown and select the officer whose accounts you want to reassign
2. Click **Search,** the **Account Officer Information** section populates with the officer's Name, Branch Name, Staff ID, Gender, Phone Number, Supervisor, Status, and Address
3. Click the **Select New Account Officer** dropdown and select the officer who will take over the accounts
4. Click **Search** to load the new officer's details
5. Enter a **Reason** for the reassignment
6. Click **Reassign**
7. Click **"Yes, I want to proceed"** to confirm the reassignment, or **"No, thanks"** to cancel

<figure><img src="/files/3KZkjpnQvZRKQGsl1NH0" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
You can also select multiple officers and reassign their accounts all at once.
{% endhint %}




---

[Next Page](/llms-full.txt/1)

