# Welcome!

Welcome to ProvidusBank API Documentation.

Explore a comprehensive suite of integration solutions tailored to simplify and optimize your business processes, empowering greater efficiency, seamless automation, and smarter workflows across your organization

{% hint style="info" %}
Currently, each API is protected by either a token authentication type or an oauth authentication type.
{% endhint %}

### Get Started

ProvidusBank’s API documentation is organized to ensure easy access to all the resources you need for a smooth integration with your platform.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h3 id="accessing-an-oauth-protected-api">Account Statement</h3></td><td>This API enables you to retrieve account statement for Providus Bank customer.</td><td><a href="/pages/ie0mBZaXiawafRCc9XuF">/pages/ie0mBZaXiawafRCc9XuF</a></td><td><a href="/files/G5KyrXLBtvwaxU1AglHt">/files/G5KyrXLBtvwaxU1AglHt</a></td></tr><tr><td><h3 id="accessing-an-oauth-protected-api">Transactions</h3></td><td>This APIs provide interfaces to create and manage financial transactions.</td><td><a href="/pages/e6QfJCAHss091HGo6Oxh">/pages/e6QfJCAHss091HGo6Oxh</a></td><td><a href="/files/haMXxToaLcX8cgnaax89">/files/haMXxToaLcX8cgnaax89</a></td></tr><tr><td><h3 id="accessing-an-oauth-protected-api">Provi Bill</h3></td><td>This section provide bill payment solutions and features.</td><td><a href="/pages/YrH1wckIpKJ24pUNyzG0">/pages/YrH1wckIpKJ24pUNyzG0</a></td><td><a href="/files/w3LXPXX7VOPzQPn9sxEa">/files/w3LXPXX7VOPzQPn9sxEa</a></td></tr><tr><td><h3 id="accessing-an-oauth-protected-api">Digital Collection Services</h3></td><td>This API enables collections using Pay with Transfer</td><td><a href="/pages/N3gt7RRAN3KuO1kVg1UM">/pages/N3gt7RRAN3KuO1kVg1UM</a></td><td><a href="/files/vfyTmOOsDn6mhwNjxr1w">/files/vfyTmOOsDn6mhwNjxr1w</a></td></tr><tr><td><h3 id="accessing-an-oauth-protected-api">Transfer Services</h3></td><td>This API is designed for designed to offer a secure integration interface for third party partners.</td><td><a href="/pages/U5D2FluHer0hJIFpK6TC">/pages/U5D2FluHer0hJIFpK6TC</a></td><td><a href="/files/0LMRFaDgaI4vXt7lx8b1">/files/0LMRFaDgaI4vXt7lx8b1</a></td></tr><tr><td><h3 id="accessing-an-oauth-protected-api">Xpress Wallet API</h3></td><td>The Xpress Wallet API allows seamless integration of wallet functionalities into your products.</td><td><a href="/pages/7aZQIVFbz0IgeohGeMux">/pages/7aZQIVFbz0IgeohGeMux</a></td><td><a href="/files/fxNx5tsid3zQ8nTRjPBQ">/files/fxNx5tsid3zQ8nTRjPBQ</a></td></tr></tbody></table>


# Quick Start

{% hint style="info" %}
**Good to know:** A quick start guide can be good to help folks get up and running with your API in a few steps. Some people prefer diving in with the basics rather than meticulously reading every page of documentation!
{% endhint %}

## Get your API keys

Your API requests are authenticated using API keys. Any request that doesn't include an API key will return an error.

You can generate an API key from your Dashboard at any time.

[Request API Key](http://developer.providusbank.com/users/register)


# Account Statement

Accounts APIs provide interfaces to manage customer accounts. The interface provides the following methods:

{% hint style="info" %}
The Account API requires a token authentication.
{% endhint %}

[Request API Key](/quick-start)

***

### Providus Account Statement

Get statement of transactions on an account.

{% content-ref url="/pages/OBD9e66QMDgy2kitjI9r" %}
[Get Providus Account Statement](/account-statement/get-providus-account-statement)
{% endcontent-ref %}


# Get Providus Account Statement

Get statement of transactions on an account.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/NIP

***

## NIP Account.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1 /account/NIP`

Get NIP Account.

#### Request Body

| Name                                              | Type   | Description                    |
| ------------------------------------------------- | ------ | ------------------------------ |
| account\_number<mark style="color:red;">\*</mark> | string | account number for the account |
| bank\_code                                        | string | code of the bank               |
| Username                                          | string | Username of account owner      |
| Password                                          | string | Password of account owner      |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict
url = "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
resp = requests.get(url, headers=headers)
print(resp.status_code)
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}
{% endtabs %}


# Transactions

Transaction APIs provide interfaces to create and manage financial transactions. The interface provides the following methods:

{% hint style="info" %}
The transaction API requires an oauth 2.0 authentication type.
{% endhint %}

[Request for an oauth client](https://developer.providusbank.com/developer)

[Request for an authorization code for the transaction API](https://developer.providusbank.com/apidocs/index.html#get-authorization-code-for-the-transaction-api)

[Exchange authorization code for access token for the transaction API](https://developer.providusbank.com/apidocs/index.html#exchange-authorization-code-for-access-token-for-the-transaction-api)

<br>


# Get API authorization code for transaction

Get an authorization code for the Transaction API.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

`GET /transaction/oauth/authorize/`

***

## Authorization Code.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1 /account/NIP`

Get API authorization code for transaction.

#### Headers

| Name         | Type   | Description                                                |
| ------------ | ------ | ---------------------------------------------------------- |
| Content-Type | String | Request content type ( application/x-www-form-urlencoded ) |

#### Request Body

| Name                                             | Type   | Description                                           |
| ------------------------------------------------ | ------ | ----------------------------------------------------- |
| response\_type<mark style="color:red;">\*</mark> | String | Response type. Value is `code`                        |
| client\_id                                       | String | The OAuth client id                                   |
| redirect\_uri                                    | string | The OAuth client redirect URI ( must be URL encoded ) |

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

```javascript
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --location --request POST 'https://mgw-staging.providusbank.com/transaction/oauth/authorize/' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic NGNlMjQ5YmIzMTFmNGFlZWFmYzNlNDA2OTBjNzc4ZGM6WkRjMVlUbGxNRGd0WVdKa1lpMDBOalJqTFdKak5qUXROV0poTVRnMU16aGpZV1Zt' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'client_id=091ddd8ca61c488aafcd078f2989eee0' \
--data-urlencode 'code=ZDc1YTllMDgtYWJkYi00NjRjLWJjNjQtNWJhMTg1MzhjYWVm' \
--data-urlencode 'redirect_uri=http%3A%2F%2F192.81.212.28%3A4003%2Foauth'
```

{% endcode %}

> The above command returns JSON structured like this:

```json
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict
url = "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
resp = requests.get(url, headers=headers)
print(resp.status_code)
```

> The above command returns JSON structured like this:

```json
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
```

{% endtab %}
{% endtabs %}


# Exchange authorization code for access token

Exchange authorization code for access token for the Transaction API.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/NIP/banks

***

## NIP Bank.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1/account/NIP/banks`

Get NIP Account.

#### Request Body

| Name     | Type   | Description               |
| -------- | ------ | ------------------------- |
| Username | string | Username of account owner |
| Password | string | Password of account owner |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-demo.providusbank/account/NIP/banks"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict

url = "https://api-demo.providusbank/account/NIP/banks"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-demo.providusbank/account/NIP/banks");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");

System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP/banks");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP/banks');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
?>
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP/banks");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}
{% endtabs %}


# Get Transaction Status

Get the status of a transaction.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/bvn

***

## BVN Details.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1/account/bvn`

Get NIP Account.

#### Request Body

| Name     | Type   | Description                 |
| -------- | ------ | --------------------------- |
| Username | string | Username of account owner   |
| Password | string | Password of account owner   |
| number   | String | bvn number of account owner |

{% tabs %}
{% tab title="200 BVN details successfully retrieved" %}

```javascript
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-demo.providusbank/account/NIP/banks"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict

url = "https://api-demo.providusbank/account/NIP/banks"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-demo.providusbank/account/NIP/banks");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");

System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP/banks");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP/banks');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
?>
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP/banks");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}
{% endtabs %}


# Initiate a Transaction Request

Get statement of transactions on an account.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/NIP

***

## NIP Account.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1 /account/NIP`

Get NIP Account.

#### Request Body

| Name                                              | Type   | Description                    |
| ------------------------------------------------- | ------ | ------------------------------ |
| account\_number<mark style="color:red;">\*</mark> | string | account number for the account |
| bank\_code                                        | string | code of the bank               |
| Username                                          | string | Username of account owner      |
| Password                                          | string | Password of account owner      |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict
url = "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
resp = requests.get(url, headers=headers)
print(resp.status_code)
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}
{% endtabs %}


# Provi Bill

Payment APIs provide interfaces to create and manage financial Payments. The interface provides the following methods:

This document provides a comprehensive guide to the Provibill Test Public API, which allows users to manage bill payments, including retrieving categories, bills, fields, validating customer details, making payments, and inquiring about payment status. Each endpoint is detailed with its HTTP method, URL, authentication requirements, and code samples in cURL, Python, Java, JavaScript, PHP, C#, and Dart.

***

### Base URL

All endpoints are relative to the base URL:

```
http://154.113.16.142:9999/provipay/webapi
```

### Authentication

All endpoints require **Basic Authentication** using a username and password.

**Headers**:

```
Authorization: Basic <base64-encoded-username:password>
```

To generate the Basic Auth header, encode the username:password string in Base64. For example, if the username is user and the password is pass, the header would be:

```
Authorization: Basic dXNlcjpwYXNz
```

***


# Get Categories

**Endpoint**: `GET /categories`

**Description**: Retrieves a list of available bill categories.

**Authentication**: Basic Auth (Username, Password)

**Response**:

**200 OK**: Returns a JSON array of category objects.

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --request GET \
  --url 'http://154.113.16.142:9999/provipay/webapi/categories' \
  --header 'Authorization: Basic <base64-encoded-username:password>'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
}

response = requests.get('http://154.113.16.142:9999/provipay/webapi/categories', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:9999/provipay/webapi/categories");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", "Basic <base64-encoded-username:password>");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
};

fetch('http://154.113.16.142:9999/provipay/webapi/categories', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://154.113.16.142:9999/provipay/webapi/categories");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic <base64-encoded-username:password>'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic <base64-encoded-username:password>");

            var response = await client.GetAsync("http://154.113.16.142:9999/provipay/webapi/categories");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

**Example Response**:

```json
[
    {
        "category_id": 1,
        "list_order": "1",
        "name": "Airtime TopUp"
    },
    {
        "category_id": 1007,
        "list_order": "1",
        "name": "Transportation"
    },
    ...
]
```


# Get Bills by Category

**Endpoint**: `GET /bill/assigned/byCategoryId/{categoryId}`

**Description**: Retrieves a list of bills associated with a specific category ID.

**Authentication**: Basic Auth (Username, Password)

**Path Parameters**:

* categoryId (required): The ID of the category (e.g., 4 for Electricity - Prepaid).

**Response**:

* **200 OK**: Returns a JSON array of bill objects.

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --request GET \
  --url 'http://154.113.16.142:9999/provipay/webapi/bill/assigned/byCategoryId/4' \
  --header 'Authorization: Basic <base64-encoded-username:password>'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
}

response = requests.get('http://154.113.16.142:9999/provipay/webapi/bill/assigned/byCategoryId/4', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:9999/provipay/webapi/bill/assigned/byCategoryId/4");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", "Basic <base64-encoded-username:password>");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
};

fetch('http://154.113.16.142:9999/provipay/webapi/bill/assigned/byCategoryId/4', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://154.113.16.142:9999/provipay/webapi/bill/assigned/byCategoryId/4");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic <base64-encoded-username:password>'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic <base64-encoded-username:password>");

            var response = await client.GetAsync("http://154.113.16.142:9999/provipay/webapi/bill/assigned/byCategoryId/4");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

**Example Response**:

```json
[
    {
        "bill_id": 7,
        "category_id": "4",
        "description": "Ikeja Electric - DML bill",
        "list_order": "1",
        "name": "Ikeja Electric - IKEDC",
        "source_id": ""
    },
    ...
]
```


# Get Field

**Endpoint**: `GET /field/assigned/byBillId/{billId}`

**Description**: Retrieves the fields required for a specific bill ID.

**Authentication**: Basic Auth (Username, Password)

**Path Parameters**:

* billId (required): The ID of the bill (e.g., 1099 for Ikeja Prepaid).

**Response**:

* **200 OK**: Returns a JSON object containing the bill ID, fee, field ID, fields, type, and validation status.

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --request GET \
  --url 'http://154.113.16.142:9999/provipay/webapi/field/assigned/byBillId/1099' \
  --header 'Authorization: Basic <base64-encoded-username:password>'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
}

response = requests.get('http://154.113.16.142:9999/provipay/webapi/field/assigned/byBillId/1099', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:9999/provipay/webapi/field/assigned/byBillId/1099");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", "Basic <base64-encoded-username:password>");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
};

fetch('http://154.113.16.142:9999/provipay/webapi/field/assigned/byBillId/1099', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://154.113.16.142:9999/provipay/webapi/field/assigned/byBillId/1099");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic <base64-encoded-username:password>'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic <base64-encoded-username:password>");

            var response = await client.GetAsync("http://154.113.16.142:9999/provipay/webapi/field/assigned/byBillId/1099");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

**Example Response**:

```json
{
    "bill_id": 1099,
    "fee": 0,
    "field_id": 1093,
    "fields": [
        {
            "call_tag": "",
            "field_type": "compulsory",
            "key": "merchantFK",
            "list": {
                "items": [
                    {
                        "id": "2",
                        "name": "Ikeja Electricity Prepaid"
                    }
                ],
                "list_type": "single"
            },
            "name": "Biller Name"
        },
        ...
    ],
    "type": "static",
    "validate": "y"
}
```


# Validate

**Endpoint**: `POST /validate/{billId}/customer`

**Description**: Validates customer details for a specific bill ID before making a payment.

**Authentication**: Basic Auth (Username, Password)

**Path Parameters**:

* billId (required): The ID of the bill (e.g., 1099).

**Request Body** (JSON):

```json
{
    "inputs": [
        {
            "value": "2",
            "key": "merchantFK"
        },
        {
            "value": "1",
            "key": "accountType"
        },
        {
            "value": "1234567",
            "key": "customerId"
        },
        {
            "value": "dot",
            "key": "customerName"
        },
        {
            "value": "100",
            "key": "amount"
        }
    ],
    "billId": "1099",
    "customerAccountNo": "1700415109",
    "channel_ref": "122433"
}
```

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --request POST \
  --url 'http://154.113.16.142:9999/provipay/webapi/validate/1099/customer' \
  --header 'Authorization: Basic <base64-encoded-username:password>' \
  --header 'Content-Type: application/json' \
  --data '{
    "inputs": [
        {
            "value": "2",
            "key": "merchantFK"
        },
        {
            "value": "1",
            "key": "accountType"
        },
        {
            "value": "1234567",
            "key": "customerId"
        },
        {
            "value": "dot",
            "key": "customerName"
        },
        {
            "value": "100",
            "key": "amount"
        }
    ],
    "billId": "1099",
    "customerAccountNo": "1700415109",
    "channel_ref": "122433"
}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'Authorization': 'Basic <base64-encoded-username:password>',
    'Content-Type': 'application/json'
}

data = {
    "inputs": [
        {"value": "2", "key": "merchantFK"},
        {"value": "1", "key": "accountType"},
        {"value": "1234567", "key": "customerId"},
        {"value": "dot", "key": "customerName"},
        {"value": "100", "key": "amount"}
    ],
    "billId": "1099",
    "customerAccountNo": "1700415109",
    "channel_ref": "122433"
}

response = requests.post('http://154.113.16.142:9999/provipay/webapi/validate/1099/customer', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:9999/provipay/webapi/validate/1099/customer");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Basic <base64-encoded-username:password>");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"inputs\": [{\"value\": \"2\", \"key\": \"merchantFK\"}, {\"value\": \"1\", \"key\": \"accountType\"}, {\"value\": \"1234567\", \"key\": \"customerId\"}, {\"value\": \"dot\", \"key\": \"customerName\"}, {\"value\": \"100\", \"key\": \"amount\"}], \"billId\": \"1099\", \"customerAccountNo\": \"1700415109\", \"channel_ref\": \"122433\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const headers = {
    'Authorization': 'Basic <base64-encoded-username:password>',
    'Content-Type': 'application/json'
};

fetch('http://154.113.16.142:9999/provipay/webapi/validate/1099/customer', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        inputs: [
            { value: "2", key: "merchantFK" },
            { value: "1", key: "accountType" },
            { value: "1234567", key: "customerId" },
            { value: "dot", key: "customerName" },
            { value: "100", key: "amount" }
        ],
        billId: "1099",
        customerAccountNo: "1700415109",
        channel_ref: "122433"
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://154.113.16.142:9999/provipay/webapi/validate/1099/customer");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic <base64-encoded-username:password>',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"inputs": [{"value": "2", "key": "merchantFK"}, {"value": "1", "key": "accountType"}, {"value": "1234567", "key": "customerId"}, {"value": "dot", "key": "customerName"}, {"value": "100", "key": "amount"}], "billId": "1099", "customerAccountNo": "1700415109", "channel_ref": "122433"}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic <base64-encoded-username:password>");

            var content = new StringContent(
                "{\"inputs\": [{\"value\": \"2\", \"key\": \"merchantFK\"}, {\"value\": \"1\", \"key\": \"accountType\"}, {\"value\": \"1234567\", \"key\": \"customerId\"}, {\"value\": \"dot\", \"key\": \"customerName\"}, {\"value\": \"100\", \"key\": \"amount\"}], \"billId\": \"1099\", \"customerAccountNo\": \"1700415109\", \"channel_ref\": \"122433\"}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("http://154.113.16.142:9999/provipay/webapi/validate/1099/customer", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

**Response**:

* **200 OK**: Returns a JSON object with validation results.

```json
{
    "balance": "",
    "customer_name": "NP NGEMA",
    "message": "Request successful",
    "successful": true
}
```


# Payment

**Endpoint**: `POST /makepayment`

**Description**: Initiates a payment for a specific bill.

**Authentication**: Basic Auth (Username, Password)

**Request Body** (JSON):

```json
{
    "inputs": [
        {
            "value": "2",
            "key": "merchantFK"
        },
        {
            "value": "1",
            "key": "accountType"
        },
        {
            "value": "1234567",
            "key": "customerId"
        },
        {
            "value": "dot",
            "key": "customerName"
        },
        {
            "value": "100",
            "key": "amount"
        }
    ],
    "billId": "1099",
    "customerAccountNo": "1700415109",
    "channel_ref": "122433"
}
```

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --request POST \
  --url 'http://154.113.16.142:9999/provipay/webapi/makepayment' \
  --header 'Authorization: Basic <base64-encoded-username:password>' \
  --header 'Content-Type: application/json' \
  --data '{
    "inputs": [
        {
            "value": "2",
            "key": "merchantFK"
        },
        {
            "value": "1",
            "key": "accountType"
        },
        {
            "value": "1234567",
            "key": "customerId"
        },
        {
            "value": "dot",
            "key": "customerName"
        },
        {
            "value": "100",
            "key": "amount"
        }
    ],
    "billId": "1099",
    "customerAccountNo": "1700415109",
    "channel_ref": "122433"
}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'Authorization': 'Basic <base64-encoded-username:password>',
    'Content-Type': 'application/json'
}

data = {
    "inputs": [
        {"value": "2", "key": "merchantFK"},
        {"value": "1", "key": "accountType"},
        {"value": "1234567", "key": "customerId"},
        {"value": "dot", "key": "customerName"},
        {"value": "100", "key": "amount"}
    ],
    "billId": "1099",
    "customerAccountNo": "1700415109",
    "channel_ref": "122433"
}

response = requests.post('http://154.113.16.142:9999/provipay/webapi/makepayment', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:9999/provipay/webapi/makepayment");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Basic <base64-encoded-username:password>");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"inputs\": [{\"value\": \"2\", \"key\": \"merchantFK\"}, {\"value\": \"1\", \"key\": \"accountType\"}, {\"value\": \"1234567\", \"key\": \"customerId\"}, {\"value\": \"dot\", \"key\": \"customerName\"}, {\"value\": \"100\", \"key\": \"amount\"}], \"billId\": \"1099\", \"customerAccountNo\": \"1700415109\", \"channel_ref\": \"122433\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const headers = {
    'Authorization': 'Basic <base64-encoded-username:password>',
    'Content-Type': 'application/json'
};

fetch('http://154.113.16.142:9999/provipay/webapi/makepayment', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        inputs: [
            { value: "2", key: "merchantFK" },
            { value: "1", key: "accountType" },
            { value: "1234567", key: "customerId" },
            { value: "dot", key: "customerName" },
            { value: "100", key: "amount" }
        ],
        billId: "1099",
        customerAccountNo: "1700415109",
        channel_ref: "122433"
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://154.113.16.142:9999/provipay/webapi/makepayment");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic <base64-encoded-username:password>',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"inputs": [{"value": "2", "key": "merchantFK"}, {"value": "1", "key": "accountType"}, {"value": "1234567", "key": "customerId"}, {"value": "dot", "key": "customerName"}, {"value": "100", "key": "amount"}], "billId": "1099", "customerAccountNo": "1700415109", "channel_ref": "122433"}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic <base64-encoded-username:password>");

            var content = new StringContent(
                "{\"inputs\": [{\"value\": \"2\", \"key\": \"merchantFK\"}, {\"value\": \"1\", \"key\": \"accountType\"}, {\"value\": \"1234567\", \"key\": \"customerId\"}, {\"value\": \"dot\", \"key\": \"customerName\"}, {\"value\": \"100\", \"key\": \"amount\"}], \"billId\": \"1099\", \"customerAccountNo\": \"1700415109\", \"channel_ref\": \"122433\"}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("http://154.113.16.142:9999/provipay/webapi/makepayment", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

**Response**:

* **200 OK**: Returns a JSON object with validation results.

```json
{
    "data": "{\"units\":\"85.33\",\"unitsType\":\"kWh\",\"token\":\"95015032359018227792\"}",
    "message": "Request successful",
    "responseCode": "00",
    "responseMessage": "Transaction successful"
}
```


# Payment Inquiry

**Endpoint**: `GET /makepayment/enquiry?txn_ref={txn_ref}`

**Description**: Retrieves the status of a payment using the transaction reference.

**Authentication**: Basic Auth (Username, Password)

**Query Parameters**:

* txn\_ref (required): The transaction reference (e.g., 122433).

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --request GET \
  --url 'http://154.113.16.142:9999/provipay/webapi/makepayment/enquiry?txn_ref=122433' \
  --header 'Authorization: Basic <base64-encoded-username:password>'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
}

response = requests.get('http://154.113.16.142:9999/provipay/webapi/makepayment/enquiry?txn_ref=122433', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:9999/provipay/webapi/makepayment/enquiry?txn_ref=122433");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", "Basic <base64-encoded-username:password>");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const headers = {
    'Authorization': 'Basic <base64-encoded-username:password>'
};

fetch('http://154.113.16.142:9999/provipay/webapi/makepayment/enquiry?txn_ref=122433', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://154.113.16.142:9999/provipay/webapi/makepayment/enquiry?txn_ref=122433");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic <base64-encoded-username:password>'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic <base64-encoded-username:password>");

            var response = await client.GetAsync("http://154.113.16.142:9999/provipay/webapi/makepayment/enquiry?txn_ref=122433");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

**Response**:

* **200 OK**: Returns a JSON object with validation results.

```json
{
    "status": "successful"
}
```


# Digital Collection Services

Accounts APIs provide interfaces to manage customer accounts. The interface provides the following methods:

{% hint style="info" %}
The Account API requires a token authentication.
{% endhint %}

[Request API Key](/quick-start)

### NIP Account

Get the details of an NIP account.

{% content-ref url="/pages/GlQRZGqOOr1xIBhItmlz" %}
[Broken mention](broken://pages/GlQRZGqOOr1xIBhItmlz)
{% endcontent-ref %}

***

### NIP Bank

Get list of NIP banks.

{% content-ref url="/pages/vt4MUQklYDwWglyaGnUJ" %}
[Broken mention](broken://pages/vt4MUQklYDwWglyaGnUJ)
{% endcontent-ref %}

***

### Providus Account

Get a Providus bank user account.

{% content-ref url="/pages/QTskEzLVdUNzqpoMPWzc" %}
[Broken mention](broken://pages/QTskEzLVdUNzqpoMPWzc)
{% endcontent-ref %}

***

### Providus Account Statement

Get statement of transactions on an account.

{% content-ref url="/pages/xHBRL8dM6mm6YYiWjhDo" %}
[Broken mention](broken://pages/xHBRL8dM6mm6YYiWjhDo)
{% endcontent-ref %}

***

### BVN Details

Get the details of an account by bvn.

{% content-ref url="/pages/XXRCe91y7pXwsqTdhelW" %}
[Broken mention](broken://pages/XXRCe91y7pXwsqTdhelW)
{% endcontent-ref %}


# Blacklist/Whitelist Account

Blacklist accounts suspected of fraudulent activity to prevent funds from reaching your settlement account. Blacklisted accounts can receive funds, but notifications are not processed until whitelistd

***

*The /PiPBlacklistAccount endpoint is used when you suspect that a user is using an account for fraudulent transactions. To prevent funds transferred to such an account from eventually entering your settlement account, you can call this endpoint to blacklist the account.*

*Please note that virtual accounts cannot be deleted—they can only be blacklisted using the /PiPBlacklistAccount endpoint. Also, blacklisted accounts can still receive funds; however, payment notifications will not be processed successfully until the blacklist flag is removed.*

*To remove a blacklist (i.e., to whitelist an account), use the /PiPBlacklistAccount endpoint with the appropriate flag.*

#### Production Base URL

[http://154.113.16.142:8088/appdevapi/api/](#production-base-url)

#### HTTP Request <a href="#http-request" id="http-request"></a>

POST /PiPBlacklistAccount

***

Post `https://api-staging.providusbank.com/v1/PiPBlacklistAccount`&#x20;

To Blacklist an account, set the blacklist\_flag to 1, set to 0 if you want to whitelist the account

**Request (Blacklist)**

```json
{
  "account_number": "9977708171",
  "blacklist_flg": 1
}
```

**Request (Whitelist)**

```json
{
  "account_number": "9977708171",
  "blacklist_flg": 0
}
```

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

```javascript
{
  "requestSuccessful": true,
  "responseMessage": "account blacklisted / whitelisted successfully",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8088/appdevapi/api/PiPBlacklistAccount \
-H "Client-Id: dGVzdF9Qcm92aWR1cw==" \
-H "X-Auth-Signature: BE09BEE831CF262226B426E39BD109f2AF84DC63076D4174FAC78A2261F9A3D6E59744983B8326B69CDF2963FE314DFC89635CFA37A40596508DD6EAAB09402C7" \
-H "Content-Type: application/json" \
-d '{"account_number":"9977708171","blacklist_flg":1}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests
import hashlib

client_id = "dGVzdF9Qcm92aWR1cw=="
client_secret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8"
signature = hashlib.sha512(f"{client_id}:{client_secret}".encode()).hexdigest().upper()

url = "http://154.113.16.142:8088/appdevapi/api/PiPBlacklistAccount"
headers = {
    "Client-Id": client_id,
    "X-Auth-Signature": signature,
    "Content-Type": "application/json"
}
data = {"account_number": "9977708171", "blacklist_flg": 1}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.MessageDigest;

public class BlacklistAccount {
    public static void main(String[] args) throws Exception {
        String clientId = "dGVzdF9Qcm92aWR1cw==";
        String clientSecret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8";
        String signature = MessageDigest.getInstance("SHA-512")
            .digest((clientId + ":" + clientSecret).getBytes("UTF-8"))
            .toString().toUpperCase();

        URL url = new URL("http://154.113.16.142:8088/appdevapi/api/PiPBlacklistAccount");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Client-Id", clientId);
        conn.setRequestProperty("X-Auth-Signature", signature);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"account_number\":\"9977708171\",\"blacklist_flg\":1}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');
const crypto = require('crypto');

const clientId = 'dGVzdF9Qcm92aWR1cw==';
const clientSecret = '29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8';
const signature = crypto.createHash('sha512').update(`${clientId}:${clientSecret}`).digest('hex').toUpperCase();

const url = 'http://154.113.16.142:8088/appdevapi/api/PiPBlacklistAccount';
const headers = {
    'Client-Id': clientId,
    'X-Auth-Signature': signature,
    'Content-Type': 'application/json'
};
const data = { account_number: '9977708171', blacklist_flg: 1 };

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$clientId = "dGVzdF9Qcm92aWR1cw==";
$clientSecret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8";
$signature = strtoupper(hash('sha512', $clientId . ':' . $clientSecret));

$url = "http://154.113.16.142:8088/appdevapi/api/PiPBlacklistAccount";
$headers = [
    "Client-Id: $clientId",
    "X-Auth-Signature: $signature",
    "Content-Type: application/json"
];
$data = ["account_number" => "9977708171", "blacklist_flg" => 1];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;

class Program
{
    static async Task Main()
    {
        string clientId = "dGVzdF9Qcm92aWR1cw==";
        string clientSecret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8";
        using (var sha512 = SHA512.Create())
        {
            byte[] bytes = Encoding.UTF8.GetBytes(clientId + ":" + clientSecret);
            byte[] hash = sha512.ComputeHash(bytes);
            string signature = BitConverter.ToString(hash).Replace("-", "").ToUpper();

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Client-Id", clientId);
                client.DefaultRequestHeaders.Add("X-Auth-Signature", signature);
                var content = new StringContent(
                    "{\"account_number\":\"9977708171\",\"blacklist_flg\":1}",
                    Encoding.UTF8,
                    "application/json"
                );
                var response = await client.PostAsync("http://154.113.16.142:8088/appdevapi/api/PiPBlacklistAccount", content);
                var responseString = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseString);
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "requestSuccessful": true,
  "responseMessage": "OPERATION SUCCESSFUL",
  "responseCode": "00"
}
```


# Verify Transaction

This endpoint is to verify a transaction by supplying the session id and credentials.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/NIP

***

## NIP Account.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1 /account/NIP`

Get NIP Account.

#### Request Body

| Name                                              | Type   | Description                    |
| ------------------------------------------------- | ------ | ------------------------------ |
| account\_number<mark style="color:red;">\*</mark> | string | account number for the account |
| bank\_code                                        | string | code of the bank               |
| Username                                          | string | Username of account owner      |
| Password                                          | string | Password of account owner      |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict
url = "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
resp = requests.get(url, headers=headers)
print(resp.status_code)
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}
{% endtabs %}


# Get Providus Account

Get a Providus bank user account.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

POST /GetProvidusAccount

***

## Providus Account.

<mark style="color:green;">`POST`</mark> `https://api-staging.providusbank.com/v1/GetProvidusAccount`

Get Providus Account.

#### Request Body

| Name            | Type   | Description                    |
| --------------- | ------ | ------------------------------ |
| Username        | string | Username of account owner      |
| Password        | string | Password of account owner      |
| account\_number | String | account number for the account |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl --location 'https://api-staging.providusbank.com/GetProvidusAccount' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "accountNumber": "1700263070",
    "userName" : "test",
    "password" : "test" 
}'
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://api-staging.providusbank.com/GetProvidusAccount"

payload = json.dumps({
  "accountNumber": "1700263070",
  "userName": "test",
  "password": "test"
})
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"accountNumber\": \"1700263070\",\n    \"userName\" : \"test\",\n    \"password\" : \"test\" \n}");
Request request = new Request.Builder()
  .url("https://api-staging.providusbank.com/GetProvidusAccount")
  .method("POST", body)
  .addHeader("Accept", "application/json")
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var data = JSON.stringify({
  "accountNumber": "1700263070",
  "userName": "test",
  "password": "test"
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://api-staging.providusbank.com/GetProvidusAccount");
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/GetProvidusAccount');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Accept' => 'application/json',
  'Content-Type' => 'application/json'
));
$request->setBody('{\n    "accountNumber": "1700263070",\n    "userName" : "test",\n    "password" : "test" \n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://api-staging.providusbank.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/GetProvidusAccount", Method.Post);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
var body = @"{" + "\n" +
@"    ""accountNumber"": ""1700263070""," + "\n" +
@"    ""userName"" : ""test""," + "\n" +
@"    ""password"" : ""test"" " + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}
{% endtabs %}


# Update Account Name

Endpoint update account name: This can be used when a virtual account is re-assigned and there is need to change the name of the account.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/account

***

## Providus Account.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1/account`

Get NIP Account.

#### Request Body

| Name            | Type   | Description                    |
| --------------- | ------ | ------------------------------ |
| Username        | string | Username of account owner      |
| Password        | string | Password of account owner      |
| account\_number | String | account number for the account |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-demo.providusbank/account/?account_number=00017000" 
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict

url = "https://api-demo.providusbank/account/?account_number=023687000"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"


resp = requests.get(url, headers=headers)

print(resp.status_code)
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-demo.providusbank/account/?account_number=02030870010017000");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");

System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/?account_number=0203006780");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/?account_number=0203006788');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/?account_number=020300678870010017000");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "accountStatus":"ACTIVE",
    "emailAddress":"CHARLES2@GMAIL.COM",
    "phoneNumber":"08054477605",
    "accountName":"CHARLY ODUMODU BLACK",
    "bvn":"22100477606",
    "accountNumber":"5900043856",
    "cbaCustomerID":"45139",
    "responseMessage":"SUCCESSFUL",
    "availableBalance":"468520.951",
    "responseCode":"00"
}
```

{% endtab %}
{% endtabs %}


# Verify Transaction by Session Id

This is an enpoint to verify transactions by passing the settlement id.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/bvn

***

## BVN Details.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1/account/bvn`

Get NIP Account.

#### Request Body

| Name     | Type   | Description                 |
| -------- | ------ | --------------------------- |
| Username | string | Username of account owner   |
| Password | string | Password of account owner   |
| number   | String | bvn number of account owner |

{% tabs %}
{% tab title="200 BVN details successfully retrieved" %}

```javascript
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-demo.providusbank/account/NIP/banks"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict

url = "https://api-demo.providusbank/account/NIP/banks"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-demo.providusbank/account/NIP/banks");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");

System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP/banks");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP/banks');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
?>
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP/banks");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}
{% endtabs %}


# Create Dynamic Account Number

Endpoint Create Dynamic Account Number: This method is to create dynamic account number. Dynamic accounts are for one time payment after which the account goes inactive and ready to be reassigned, It

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/NIP

***

## NIP Account.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1 /account/NIP`

Get NIP Account.

#### Request Body

| Name                                              | Type   | Description                    |
| ------------------------------------------------- | ------ | ------------------------------ |
| account\_number<mark style="color:red;">\*</mark> | string | account number for the account |
| bank\_code                                        | string | code of the bank               |
| Username                                          | string | Username of account owner      |
| Password                                          | string | Password of account owner      |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict
url = "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57"
headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
resp = requests.get(url, headers=headers)
print(resp.status_code)
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP?account_number=3041004406&bank_code=57");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "bankCode":"57",
    "accountName":"NNAJI, JOSHUA & VIVIAN",
    "transactionReference":"",
    "bvn":"",
    "responseMessage":" Approved or completed successfully",
    "accountNumber":"3041004406",
    "responseCode":"00"
}
```

{% endtab %}
{% endtabs %}


# Create Reserved Account Number

Endpoint Create Reserved Account Number: This service can be used to create static/reserved accounts.


# Verify Transaction by Settlement Id

This is the end point to verify transactions by passing the session id.

***

#### Test Base URL

[https://api-staging.providusbank.com](<https://api-staging.providusbank.com&#xA;&#xA;>)

#### Production Base URL

<https://api.providusbank.com>

#### HTTP Request <a href="#http-request" id="http-request"></a>

GET /account/NIP/banks

***

## NIP Bank.

<mark style="color:blue;">`GET`</mark> `https://api-staging.providusbank.com/v1/account/NIP/banks`

Get NIP Account.

#### Request Body

| Name     | Type   | Description               |
| -------- | ------ | ------------------------- |
| Username | string | Username of account owner |
| Password | string | Password of account owner |

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -x GET "https://api-demo.providusbank/account/NIP/banks"
  -H "Authorization: {{Authentication token}}"
  -H "Username: Username"
  -H "Password: Password"
```

{% endcode %}

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests.structures import CaseInsensitiveDict

url = "https://api-demo.providusbank/account/NIP/banks"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{{Authentication token}}"
headers["Username"] = "Username"
headers["Password"] = "Password"
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="Java" %}

```java
URL url = new URL("https://api-demo.providusbank/account/NIP/banks");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestProperty("Authorization", "{{Authentication token}}");
http.setRequestProperty("Username", "Username");
http.setRequestProperty("Password", "Password");

System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("GET", "https://api-staging.providusbank.com/account/NIP/banks");
xhr.setRequestHeader("Authorization", "{{Authentication token}}");
xhr.setRequestHeader("Username", "Username");
xhr.setRequestHeader("Password", "Password");
xhr.send();
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api-staging.providusbank.com/account/NIP/banks');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => '{{Authentication token}}',
  'Username' => 'Username',
  'Password' => 'Password'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
?>
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://api-staging.providusbank.com/account/NIP/banks");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "{{Authentication token}}");
request.AddHeader("Username", "Username");
request.AddHeader("Password", "Password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

> The above command returns JSON structured like this:

```json
{
    "banks":[
        {"bankCode":"000014","bankName":"ACCESS BANK"},
        {"bankCode":"100013","bankName":"ACCESS MOBILE"},
        {"bankCode":"090133","bankName":"AL-BARAKAH MICROFINANCE BANK"},
        {"bankCode":"090116","bankName":"AMML MICROFINANCE BANK"},
        {"bankCode":"090001","bankName":"ASO SAVINGS"},
        {"bankCode":"090127","bankName":"BC KASH MICROFINANCE BANK"},
        {"bankCode":"090117","bankName":"BOCTRUST MICROFINANCE BANK LIMITED"},
        {"bankCode":"100005","bankName":"CELLULANT"},
        {"bankCode":"100015","bankName":"CHAMS MOBILE"},
        {"bankCode":"000009","bankName":"CITI BANK"},
        {"bankCode":"060001","bankName":"CORONATION BANK"},
        {"bankCode":"070006","bankName":"COVENANT MFB"},
        {"bankCode":"000005","bankName":"DIAMOND BANK"},
        {"bankCode":"100021","bankName":"EARTHOLEUM"},
        {"bankCode":"000010","bankName":"ECOBANK"},
        {"bankCode":"100008","bankName":"ECOBANK XPRESS ACCOUNT"},
        {"bankCode":"090114","bankName":"EMPIRE TRUST MICROFINANCE BANK"},
        {"bankCode":"000019","bankName":"ENTERPRISE BANK"},
        {"bankCode":"100006","bankName":"eTRANZACT"},
        {"bankCode":"060002","bankName":"FBN MERCHANT BANK"},
        {"bankCode":"100014","bankName":"FBN MOBILE"}
    ],
    "responseMessage":"SUCCESS",
    "responseCode":"00"}
```

{% endtab %}
{% endtabs %}


# Webhook Specification

Your system must expose a webhook endpoint to receive transaction notifications from DCS. After receiving a notification, validate the X-Auth-Signature, settlementId, and accountNumber, then respond a

**Webhook Logic Requirements**:

1. Validate X-Auth-Signature using SHA512(Client-Id:ClientSecret).
2. Confirm settlementId and accountNumber exist and are valid.
3. Return:

   * "success" (code 00) if valid.
   * "duplicate transaction" (code 01) if settlementId already processed.
   * "rejected transaction" (code 02) if request is invalid.
   * "system failure, retry" (code 03) for internal errors.

***

<mark style="color:green;">`POST`</mark> `https://api-staging.providusbank.com/v1/webhook`

Webhook Request (From DCS)

```json
{
"sessionId": "000004210301180534806663649508",
  "accountNumber": "9977581536",
  "tranRemarks": "FROM UBA/...",
  "transactionAmount": "1",
  "settledAmount": "1",
  "feeAmount": "0",
  "vatAmount": "0",
  "currency": "NGN",
  "initiationTranRef": "kjhghjk",
  "settlementId": "202210301006807600001432",
  "sourceAccountNumber": "2093566866",
  "sourceAccountName": "CASAFINA CREDIT-EASY LOAN",
  "sourceBankName": "UNITED BANK FOR AFRICA",
  "channelId": "1",
  "tranDateTime": "2021-03-01 18:06:20"
}
```

&#x20;&#x20;

**Webhook Responses**:

* **Success**:

```json
{
  "requestSuccessful": true,
  "sessionId": "99990000554443332221",
  "responseMessage": "success",
  "responseCode": "00"
}
```

* **Duplicate**:

```json
{
  "requestSuccessful": true,
  "sessionId": "99990000554443332221",
  "responseMessage": "duplicate transaction",
  "responseCode": "01"
}
```

* **Rejected**:

```json
{
  "requestSuccessful": true,
  "sessionId": "99990000554443332221",
  "responseMessage": "rejected transaction",
  "responseCode": "02"
}
```

* **System Failure**:

```json
{
  "requestSuccessful": true,
  "sessionId": "99990000554443332221",
  "responseMessage": "system failure, retry",
  "responseCode": "03"
}
```

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST https://your-webhook-endpoint.com/webhook \
-H "Client-Id: dGVzdF9Qcm92aWR1cw==" \
-H "X-Auth-Signature: BE09BEE831CF262226B426E39BD109f2AF84DC63076D4174FAC78A2261F9A3D6E59744983B8326B69CDF2963FE314DFC89635CFA37A40596508DD6EAAB09402C7" \
-H "Content-Type: application/json" \
-d '{
  "sessionId": "000004210301180534806663649508",
  "accountNumber": "9977581536",
  "tranRemarks": "FROM UBA/...",
  "transactionAmount": "1",
  "settledAmount": "1",
  "feeAmount": "0",
  "vatAmount": "0",
  "currency": "NGN",
  "initiationTranRef": "kjhghjk",
  "settlementId": "202210301006807600001432",
  "sourceAccountNumber": "2093566866",
  "sourceAccountName": "CASAFINA CREDIT-EASY LOAN",
  "sourceBankName": "UNITED BANK FOR AFRICA",
  "channelId": "1",
  "tranDateTime": "2021-03-01 18:06:20"
}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}
{% code overflow="wrap" fullWidth="true" %}

```python
from flask import Flask, request, jsonify
import hashlib

app = Flask(__name__)

client_id = "dGVzdF9Qcm92aWR1cw=="
client_secret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8"
expected_signature = hashlib.sha512(f"{client_id}:{client_secret}".encode()).hexdigest().upper()

@app.route('/webhook', methods=['POST'])
def webhook():
    received_signature = request.headers.get('X-Auth-Signature')
    if received_signature != expected_signature:
        return jsonify({
            "requestSuccessful": true,
            "sessionId": request.json.get('sessionId'),
            "responseMessage": "rejected transaction",
            "responseCode": "02"
        })

    data = request.json
    session_id = data.get('sessionId')
    settlement_id = data.get('settlementId')
    account_number = data.get('accountNumber')

    # Simulate database check for account and settlement ID
    if not account_number or not settlement_id:
        return jsonify({
            "requestSuccessful": true,
            "sessionId": session_id,
            "responseMessage": "rejected transaction",
            "responseCode": "02"
        })

    # Simulate check for duplicate settlement ID
    if is_duplicate_settlement(settlement_id):  # Implement your logic
        return jsonify({
            "requestSuccessful": true,
            "sessionId": session_id,
            "responseMessage": "duplicate transaction",
            "responseCode": "01"
        })

    # Simulate successful processing
    return jsonify({
        "requestSuccessful": true,
        "sessionId": session_id,
        "responseMessage": "success",
        "responseCode": "00"
    })

def is_duplicate_settlement(settlement_id):
    # Implement logic to check if settlement_id was processed
    return False  # Placeholder

if __name__ == '__main__':
    app.run(port=5000)
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}

```java
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;

@RestController
public class WebhookController {

    private final String clientId = "dGVzdF9Qcm92aWR1cw==";
    private final String clientSecret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8";

    @PostMapping("/webhook")
    public ResponseEntity<Map<String, Object>> handleWebhook(
            @RequestHeader("X-Auth-Signature") String receivedSignature,
            @RequestBody Map<String, Object> payload) {
        try {
            // Generate expected signature
            MessageDigest digest = MessageDigest.getInstance("SHA-512");
            byte[] hash = digest.digest((clientId + ":" + clientSecret).getBytes("UTF-8"));
            String expectedSignature = DatatypeConverter.printHexBinary(hash).toUpperCase();

            // Initialize response map
            Map<String, Object> response = new HashMap<>();
            response.put("requestSuccessful", true);
            response.put("sessionId", payload.getOrDefault("sessionId", ""));

            // Validate signature
            if (!expectedSignature.equals(receivedSignature)) {
                response.put("responseMessage", "rejected transaction");
                response.put("responseCode", "02");
                return ResponseEntity.ok(response);
            }

            // Extract payload fields
            String sessionId = (String) payload.getOrDefault("sessionId", "");
            String settlementId = (String) payload.getOrDefault("settlementId", "");
            String accountNumber = (String) payload.getOrDefault("accountNumber", "");

            // Validate required fields
            if (accountNumber.isEmpty() || settlementId.isEmpty()) {
                response.put("responseMessage", "rejected transaction");
                response.put("responseCode", "02");
                return ResponseEntity.ok(response);
            }

            // Check for duplicate settlement ID (implement your logic)
            if (isDuplicateSettlement(settlementId)) {
                response.put("responseMessage", "duplicate transaction");
                response.put("responseCode", "01");
                return ResponseEntity.ok(response);
            }

            // Successful processing
            response.put("responseMessage", "success");
            response.put("responseCode", "00");
            return ResponseEntity.ok(response);

        } catch (Exception e) {
            // Handle internal errors
            Map<String, Object> response = new HashMap<>();
            response.put("requestSuccessful", true);
            response.put("sessionId", payload.getOrDefault("sessionId", ""));
            response.put("responseMessage", "system failure, retry");
            response.put("responseCode", "03");
            return ResponseEntity.ok(response);
        }
    }

    private boolean isDuplicateSettlement(String settlementId) {
        // Implement logic to check if settlementId was previously processed
        // Example: Query your database
        return false; // Placeholder
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const express = require('express');
const crypto = require('crypto');

const app = express();
app.use(express.json());

const clientId = 'dGVzdF9Qcm92aWR1cw==';
const clientSecret = '29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8';
const expectedSignature = crypto.createHash('sha512').update(`${clientId}:${clientSecret}`).digest('hex').toUpperCase();

app.post('/webhook', (req, res) => {
    const receivedSignature = req.headers['x-auth-signature'];
    if (receivedSignature !== expectedSignature) {
        return res.json({
            requestSuccessful: true,
            sessionId: req.body.sessionId,
            responseMessage: 'rejected transaction',
            responseCode: '02'
        });
    }

    const { sessionId, settlementId, accountNumber } = req.body;

    if (!accountNumber || !settlementId) {
        return res.json({
            requestSuccessful: true,
            sessionId,
            responseMessage: 'rejected transaction',
            responseCode: '02'
        });
    }

    if (isDuplicateSettlement(settlementId)) { // Implement your logic
        return res.json({
            requestSuccessful: true,
            sessionId,
            responseMessage: 'duplicate transaction',
            responseCode: '01'
        });
    }

    res.json({
        requestSuccessful: true,
        sessionId,
        responseMessage: 'success',
        responseCode: '00'
    });
});

function isDuplicateSettlement(settlementId) {
    // Implement logic to check if settlementId was processed
    return false; // Placeholder
}

app.listen(5000, () => console.log('Webhook server running on port 5000'));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$clientId = "dGVzdF9Qcm92aWR1cw==";
$clientSecret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8";
$expectedSignature = strtoupper(hash('sha512', $clientId . ':' . $clientSecret));

header('Content-Type: application/json');

$input = file_get_contents('php://input');
$data = json_decode($input, true);
$receivedSignature = isset($_SERVER['HTTP_X_AUTH_SIGNATURE']) ? $_SERVER['HTTP_X_AUTH_SIGNATURE'] : '';

if ($receivedSignature !== $expectedSignature) {
    echo json_encode([
        'requestSuccessful' => true,
        'sessionId' => $data['sessionId'] ?? '',
        'responseMessage' => 'rejected transaction',
        'responseCode' => '02'
    ]);
    exit;
}

$sessionId = $data['sessionId'] ?? '';
$settlementId = $data['settlementId'] ?? '';
$accountNumber = $data['accountNumber'] ?? '';

if (empty($accountNumber) || empty($settlementId)) {
    echo json_encode([
        'requestSuccessful' => true,
        'sessionId' => $sessionId,
        'responseMessage' => 'rejected transaction',
        'responseCode' => '02'
    ]);
    exit;
}

if (isDuplicateSettlement($settlementId)) { // Implement your logic
    echo json_encode([
        'requestSuccessful' => true,
        'sessionId' => $sessionId,
        'responseMessage' => 'duplicate transaction',
        'responseCode' => '01'
    ]);
    exit;
}

echo json_encode([
    'requestSuccessful' => true,
    'sessionId' => $sessionId,
    'responseMessage' => 'success',
    'responseCode' => '00'
]);

function isDuplicateSettlement($settlementId) {
    // Implement logic to check if settlementId was processed
    return false; // Placeholder
}
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace WebhookController
{
    [ApiController]
    [Route("webhook")]
    public class Webhook : ControllerBase
    {
        private readonly string clientId = "dGVzdF9Qcm92aWR1cw==";
        private readonly string clientSecret = "29A492021F4B709A8D1152C3EF4D32DC5A7092723ECAC4C511781003584B48873CCBFEBDEAE89CF22ED1CB1A836213549BC6638A3B563CA7FC009BEB3BC30CF8";

        [HttpPost]
        public async Task<IActionResult> Post()
        {
            using (var sha512 = SHA512.Create())
            {
                byte[] bytes = Encoding.UTF8.GetBytes(clientId + ":" + clientSecret);
                byte[] hash = sha512.ComputeHash(bytes);
                string expectedSignature = BitConverter.ToString(hash).Replace("-", "").ToUpper();

                string receivedSignature = Request.Headers["X-Auth-Signature"];
                if (receivedSignature != expectedSignature)
                {
                    return Ok(new
                    {
                        requestSuccessful = true,
                        sessionId = Request.Form["sessionId"],
                        responseMessage = "rejected transaction",
                        responseCode = "02"
                    });
                }

                using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
                {
                    string body = await reader.ReadToEndAsync();
                    dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(body);
                    string sessionId = data.sessionId;
                    string settlementId = data.settlementId;
                    string accountNumber = data.accountNumber;

                    if (string.IsNullOrEmpty(accountNumber) || string.IsNullOrEmpty(settlementId))
                    {
                        return Ok(new
                        {
                            requestSuccessful = true,
                            sessionId,
                            responseMessage = "rejected transaction",
                            responseCode = "02"
                        });
                    }

                    if (IsDuplicateSettlement(settlementId)) // Implement your logic
                    {
                        return Ok(new
                        {
                            requestSuccessful = true,
                            sessionId,
                            responseMessage = "duplicate transaction",
                            responseCode = "01"
                        });
                    }

                    return Ok(new
                    {
                        requestSuccessful = true,
                        sessionId,
                        responseMessage = "success",
                        responseCode = "00"
                    });
                }
            }
        }

        private bool IsDuplicateSettlement(string settlementId)
        {
            // Implement logic to check if settlementId was processed
            return false; // Placeholder
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "requestSuccessful": true,
  "sessionId": "99990000554443332221",
  "responseMessage": "success",
  "responseCode": "00"
}

```


# Transfer Services

This document provides detailed specifications for a RESTful web service designed to offer a secure integration interface for THIRD PARTY partners.

{% hint style="info" %}
The Third party generic api requires api key.
{% endhint %}

[Request API Key](/quick-start)

**Base Url:**\
<http://154.113.16.142:8882/postingrest>

***

The interface is implemented as a RESTful web service, exposing the following methods:

* GetBVNDetails
* GetNIPAccount
* NIPFundTransfer
* GetNipBank
* ProvidusTransactionsStatus
* ProvidusFundsTransfer
* NIPFundTransferMultipleDebitAccounts

***

API Endpoints

### Get NIP Account

Reserved accounts are static accounts assigned to a specific user. They do not expire, but should be used judiciously, as there is a limit to the number of virtual accounts that can be created.

{% content-ref url="/pages/fQJhiKvpOjodZ4P6968t" %}
[GetNIPAccount](/transfer-services/getnipaccount)
{% endcontent-ref %}

***

### Create Dynamic Account

*Dynamic accounts are designed for one-time payments and can be assigned to different users. By default, they expire 10 minutes after creation (this can be extended up to a maximum of 48 hours) before being reassigned to another user. They must be used for a single payment before expiration.*

{% content-ref url="/pages/7KGmTmouxvVsvLyPySrC" %}
[Create Dynamic Account Number](/digital-collection-services/create-dynamic-account-number)
{% endcontent-ref %}

***

### Update Account Name

*The /PiPUpdateAccountName endpoint is used exclusively for reserved accounts. It allows you to update the account name. In most cases, if a reserved account has been assigned to a user who does not utilize it for transactions, you can reassign the account to another user by updating the account name—helping you manage your limited pool of virtual accounts efficiently.*

{% content-ref url="/pages/743lH3YkegL7OdVMQK4B" %}
[Broken mention](broken://pages/743lH3YkegL7OdVMQK4B)
{% endcontent-ref %}

***

### Blacklist / Whitelist Account

*The /PiPBlacklistAccount endpoint is used when you suspect that a user is using an account for fraudulent transactions. To prevent funds transferred to such an account from eventually entering your settlement account, you can call this endpoint to blacklist the account.*

*Please note that virtual accounts cannot be deleted—they can only be blacklisted using the /PiPBlacklistAccount endpoint. Also, blacklisted accounts can still receive funds; however, payment notifications will not be processed successfully until the blacklist flag is removed.*

*To remove a blacklist (i.e., to whitelist an account), use the /PiPBlacklistAccount endpoint with the appropriate flag.*

{% content-ref url="/pages/ksR2RABQImHvbNHnNM1P" %}
[Blacklist/Whitelist Account](/digital-collection-services/blacklist-whitelist-account)
{% endcontent-ref %}

***

### Verify Transaction by Session ID

*The verification endpoints are used to confirm that transactions sent to your webhook originate from Providus Bank and to retrieve detailed information about those transactions.*

*Typically, when our system sends a webhook notification, the fintech first calls the appropriate verification endpoint to validate the transaction before responding to the webhook.*

*You can verify a transaction using either the Session ID or Settlement ID provided in the webhook request or previously shared with the fintech, to confirm the transaction exists on our system.*

This endpoint is to verify a transaction by supplying the session id and credentials.

{% content-ref url="/pages/YCwNCIF7AvPztPz32iGc" %}
[Broken mention](broken://pages/YCwNCIF7AvPztPz32iGc)
{% endcontent-ref %}

***

### Verify Transaction by Settlement ID

This endpoint is to verify a transaction by supplying the session id and credentials.

{% content-ref url="/pages/YCwNCIF7AvPztPz32iGc" %}
[Broken mention](broken://pages/YCwNCIF7AvPztPz32iGc)
{% endcontent-ref %}

***

### Fintech Webhook

Fintech Webhook Endpoint (Your system should expose this endpoint to receive notifications)

{% content-ref url="/pages/M9CKQIMbxzS2alYSxQmS" %}
[Webhook Specification](/digital-collection-services/webhook-specification)
{% endcontent-ref %}

Notes

·      Dynamic accounts expire after 10 minutes (configurable up to 48 hours).

·      Reserved accounts do not expire but have a creation limit.

·      Funds are swept to your settlement account only upon successful webhook acknowledgment.

·      Duplicate settlement IDs must not be reprocessed.

·      Blacklisted accounts can still receive funds, but no notifications will be sent until whitelisted.


# GetNIPAccount

Validates the supplied account number and bank code (3-digit or 6-digit NIP bank code) and returns account details.

***

**URI**: /GetNIPAccount

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request Parameters** (JSON):

***

```json
{
  "accountNumber": "1018996198",
  "beneficiaryBank": "110000",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "bankCode": "110000",
  "accountName": "NNAJI, JOSHUA & VIVIAN",
  "transactionReference": "",
  "bvn": "",
  "responseMessage": "Approved or completed successfully",
  "accountNumber": "1018996198",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Error Completing Operation",
  "responseCode": "11"
}
```

{% endtab %}

{% tab title="400: Bad Request ." %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Error Completing Operation",
  "responseCode": "11"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Error Completing Operation",
  "responseCode": "11"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/GetNIPAccount \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"accountNumber":"1018996198","beneficiaryBank":"110000","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/GetNIPAccount"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "accountNumber": "1018996198",
    "beneficiaryBank": "110000",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class GetNIPAccount {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/GetNIPAccount");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"accountNumber\":\"1018996198\",\"beneficiaryBank\":\"110000\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/GetNIPAccount';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    accountNumber: '1018996198',
    beneficiaryBank: '110000',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/GetNIPAccount";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "accountNumber" => "1018996198",
    "beneficiaryBank" => "110000",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"accountNumber\":\"1018996198\",\"beneficiaryBank\":\"110000\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/GetNIPAccount", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "bankCode": "110000",
  "accountName": "NNAJI, JOSHUA & VIVIAN",
  "transactionReference": "",
  "bvn": "",
  "responseMessage": "Approved or completed successfully",
  "accountNumber": "1018996198",
  "responseCode": "00"
}
```


# NIPFundTransfer

Description: Transfers funds from a specified Providus account to another account in a different bank. The transactionReference must be unique for each transaction.

***

**URI**: /NIPFundTransfer

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request body**

```json
{
  "beneficiaryAccountName": "UGBO, CHARLES UMORE",
  "transactionAmount": "2000.45",
  "currencyCode": "NGN",
  "narration": "Testing",
  "sourceAccountName": "Nnamdi Adebayo Hamzat",
  "beneficiaryAccountNumber": "0045434120",
  "beneficiaryBank": "000013",
  "transactionReference": "20191119143854",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "transactionReference": "20191119143854",
  "sessionId": "999037230913163757005000082268",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/NIPFundTransfer \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"beneficiaryAccountName":"UGBO, CHARLES UMORE","transactionAmount":"2000.45","currencyCode":"NGN","narration":"Testing","sourceAccountName":"Nnamdi Adebayo Hamzat","beneficiaryAccountNumber":"0045434120","beneficiaryBank":"000013","transactionReference":"20191119143854","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/NIPFundTransfer"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "beneficiaryAccountName": "UGBO, CHARLES UMORE",
    "transactionAmount": "2000.45",
    "currencyCode": "NGN",
    "narration": "Testing",
    "sourceAccountName": "Nnamdi Adebayo Hamzat",
    "beneficiaryAccountNumber": "0045434120",
    "beneficiaryBank": "000013",
    "transactionReference": "20191119143854",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class NIPFundTransfer {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/NIPFundTransfer");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"beneficiaryAccountName\":\"UGBO, CHARLES UMORE\",\"transactionAmount\":\"2000.45\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"sourceAccountName\":\"Nnamdi Adebayo Hamzat\",\"beneficiaryAccountNumber\":\"0045434120\",\"beneficiaryBank\":\"000013\",\"transactionReference\":\"20191119143854\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/NIPFundTransfer';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    beneficiaryAccountName: 'UGBO, CHARLES UMORE',
    transactionAmount: '2000.45',
    currencyCode: 'NGN',
    narration: 'Testing',
    sourceAccountName: 'Nnamdi Adebayo Hamzat',
    beneficiaryAccountNumber: '0045434120',
    beneficiaryBank: '000013',
    transactionReference: '20191119143854',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/NIPFundTransfer";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "beneficiaryAccountName" => "UGBO, CHARLES UMORE",
    "transactionAmount" => "2000.45",
    "currencyCode" => "NGN",
    "narration" => "Testing",
    "sourceAccountName" => "Nnamdi Adebayo Hamzat",
    "beneficiaryAccountNumber" => "0045434120",
    "beneficiaryBank" => "000013",
    "transactionReference" => "20191119143854",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"beneficiaryAccountName\":\"UGBO, CHARLES UMORE\",\"transactionAmount\":\"2000.45\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"sourceAccountName\":\"Nnamdi Adebayo Hamzat\",\"beneficiaryAccountNumber\":\"0045434120\",\"beneficiaryBank\":\"000013\",\"transactionReference\":\"20191119143854\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/NIPFundTransfer", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "transactionReference": "20191119143854",
  "sessionId": "999037230913163757005000082268",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```


# GetNIPTransactionStatus

Validates a single transaction reference and returns the current status of the transaction. It is recommended to perform a status re-query for 15 minutes to confirm the final status.

***

**URI**: /GetNIPTransactionStatus

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request Parameters** (JSON):

```json
{
  "transactionReference": "1234567gkgk",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "amount": "2000.45",
  "recipientBankCode": "000013",
  "recipientAccountNumber": "0045434120",
  "transactionReference": "20191119143854|999037230913163757005000082268",
  "transactionDateTime": "2023-09-13 16:30:32",
  "currency": "NGN",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```
{
  "responseMessage": "Transaction does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
{
  "responseMessage": "Transaction does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```
{
  "responseMessage": "Transaction does not exist.",
  "responseCode": "01"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/GetNIPTransactionStatus \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"transactionReference":"1234567gkgk","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/GetNIPTransactionStatus"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "transactionReference": "1234567gkgk",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class GetNIPTransactionStatus {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/GetNIPTransactionStatus");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"transactionReference\":\"1234567gkgk\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/GetNIPTransactionStatus';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    transactionReference: '1234567gkgk',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/GetNIPTransactionStatus";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "transactionReference" => "1234567gkgk",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"transactionReference\":\"1234567gkgk\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/GetNIPTransactionStatus", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "amount": "2000.45",
  "recipientBankCode": "000013",
  "recipientAccountNumber": "0045434120",
  "transactionReference": "20191119143854|999037230913163757005000082268",
  "transactionDateTime": "2023-09-13 16:30:32",
  "currency": "NGN",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```


# GetNIPBanks

Returns a list of institutions enrolled on NIP with their respective bank codes.

***

**URI**: /GetNIPBanks

\
**HTTP Method**: GET

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Response:**

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

```javascript
{
  "banks": [
    {"bankCode": "090270", "bankName": "AB MICROFINANCE BANK"},
    {"bankCode": "070010", "bankName": "ABBEY MORTGAGE BANK"},
    {"bankCode": "090260", "bankName": "ABOVE ONLY MICROFINANCE BANK"},
    {"bankCode": "090197", "bankName": "ABU MICROFINANCE BANK"},
    {"bankCode": "000014", "bankName": "ACCESS BANK"},
    {"bankCode": "100013", "bankName": "ACCESS MOBILE"},
    {"bankCode": "000005", "bankName": "ACCESS(DIAMOND) BANK"},
    {"bankCode": "090134", "bankName": "ACCION MICROFINANCE BANK"},
    ...
  ],
  "responseMessage": "SUCCESS",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X GET http://154.113.16.142:8882/postingrest/GetNIPBanks \
-H "Accept: application/json" \
-H "Content-Type: application/json"
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/GetNIPBanks"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
response = requests.get(url, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class GetNIPBanks {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/GetNIPBanks");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/GetNIPBanks';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};

fetch(url, {
    method: 'GET',
    headers: headers
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/GetNIPBanks";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var response = await client.GetAsync("http://154.113.16.142:8882/postingrest/GetNIPBanks");
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "banks": [
    {"bankCode": "090270", "bankName": "AB MICROFINANCE BANK"},
    {"bankCode": "070010", "bankName": "ABBEY MORTGAGE BANK"},
    {"bankCode": "090260", "bankName": "ABOVE ONLY MICROFINANCE BANK"},
    {"bankCode": "090197", "bankName": "ABU MICROFINANCE BANK"},
    {"bankCode": "000014", "bankName": "ACCESS BANK"},
    {"bankCode": "100013", "bankName": "ACCESS MOBILE"},
    {"bankCode": "000005", "bankName": "ACCESS(DIAMOND) BANK"},
    {"bankCode": "090134", "bankName": "ACCION MICROFINANCE BANK"},
    ...
  ],
  "responseMessage": "SUCCESS",
  "responseCode": "00"
}
```


# ProvidusFundTransfer

Transfers funds from a specified Providus account to another Providus account.

***

**URI**: /ProvidusFundTransfer

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request** (JSON):

```json
{
  "creditAccount": "5900174721",
  "debitAccount": "1700313889",
  "transactionAmount": "2000.45",
  "currencyCode": "NGN",
  "narration": "Testing",
  "transactionReference": "20191119143501",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "amount": "100.0",
  "transactionReference": "2345677777",
  "currency": "NGN",
  "responseMessage": "OPERATION SUCCESSFUL",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```json
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```json
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Exception; Failed",
  "responseCode": "03"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/ProvidusFundTransfer \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"creditAccount":"5900174721","debitAccount":"1700313889","transactionAmount":"2000.45","currencyCode":"NGN","narration":"Testing","transactionReference":"20191119143501","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/ProvidusFundTransfer"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "creditAccount": "5900174721",
    "debitAccount": "1700313889",
    "transactionAmount": "2000.45",
    "currencyCode": "NGN",
    "narration": "Testing",
    "transactionReference": "20191119143501",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ProvidusFundTransfer {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/ProvidusFundTransfer");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"creditAccount\":\"5900174721\",\"debitAccount\":\"1700313889\",\"transactionAmount\":\"2000.45\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"transactionReference\":\"20191119143501\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/ProvidusFundTransfer';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    creditAccount: '5900174721',
    debitAccount: '1700313889',
    transactionAmount: '2000.45',
    currencyCode: 'NGN',
    narration: 'Testing',
    transactionReference: '20191119143501',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/ProvidusFundTransfer";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "creditAccount" => "5900174721",
    "debitAccount" => "1700313889",
    "transactionAmount" => "2000.45",
    "currencyCode" => "NGN",
    "narration" => "Testing",
    "transactionReference" => "20191119143501",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"creditAccount\":\"5900174721\",\"debitAccount\":\"1700313889\",\"transactionAmount\":\"2000.45\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"transactionReference\":\"20191119143501\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/ProvidusFundTransfer", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "amount": "100.0",
  "transactionReference": "2345677777",
  "currency": "NGN",
  "responseMessage": "OPERATION SUCCESSFUL",
  "responseCode": "00"
}
```


# GetProvidusTransactionStatus

Validates a single transaction reference and returns the status of a Providus-to-Providus transaction. It is recommended to perform a status requery for 15 minutes to confirm the final status.

***

**URI**: /GetProvidusTransactionStatus

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request body** (JSON):

```json
{
  "transactionReference": "2345677777",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "amount": "100.0",
  "creditAccount": "1700263070",
  "debitAccount": "5900085856",
  "transactionReference": "2345677777",
  "transactionDateTime": "2020-05-04 14:12:11.0",
  "currency": "NGN",
  "responseMessage": "OPERATION SUCCESSFUL",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```json
{
  "responseMessage": "Transaction does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```json
{
  "responseMessage": "Transaction does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```json
{
  "responseMessage": "Transaction does not exist.",
  "responseCode": "01"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/GetProvidusTransactionStatus \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"transactionReference":"2345677777","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/GetProvidusTransactionStatus"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "transactionReference": "2345677777",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class GetProvidusTransactionStatus {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/GetProvidusTransactionStatus");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"transactionReference\":\"2345677777\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/GetProvidusTransactionStatus';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    transactionReference: '2345677777',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/GetProvidusTransactionStatus";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "transactionReference" => "2345677777",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"transactionReference\":\"2345677777\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/GetProvidusTransactionStatus", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "amount": "100.0",
  "creditAccount": "1700263070",
  "debitAccount": "5900085856",
  "transactionReference": "2345677777",
  "transactionDateTime": "2020-05-04 14:12:11.0",
  "currency": "NGN",
  "responseMessage": "OPERATION SUCCESSFUL",
  "responseCode": "00"
}
```


# GetProvidusAccount

Returns details, including balance, for the account tied to the username making the call.

***

**URI**: /GetProvidusAccount

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request Parameters** (JSON):

***

```json
{
  "accountNumber": "1700263070",
  "userName": "test",
  "password": "test"
}
```

&#x20; Response body (JSON)

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
  "accountStatus": "ACTIVE",
  "emailAddress": "CHARLESBASS2@YAHOO.COM",
  "phoneNumber": "08054477605",
  "accountName": "CHARLES OMORE UGBO",
  "bvn": "22144577606",
  "accountNumber": "5900085856",
  "cbaCustomerID": "45439",
  "responseMessage": "SUCCESSFUL",
  "availableBalance": "996856.76",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

```json
{
  "responseMessage": "Account does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

```json
{
  "responseMessage": "Account does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

```json
{
  "responseMessage": "Account does not exist.",
  "responseCode": "01"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/GetProvidusAccount \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"accountNumber":"1700263070","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}
{% code overflow="wrap" fullWidth="true" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/GetProvidusAccount"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "accountNumber": "1700263070",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class GetProvidusAccount {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/GetProvidusAccount");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"accountNumber\":\"1700263070\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/GetProvidusAccount';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    accountNumber: '1700263070',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/GetProvidusAccount";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "accountNumber" => "1700263070",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"accountNumber\":\"1700263070\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/GetProvidusAccount", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "accountStatus": "ACTIVE",
  "emailAddress": "CHARLESBASS2@YAHOO.COM",
  "phoneNumber": "08054477605",
  "accountName": "CHARLES OMORE UGBO",
  "bvn": "22144577606",
  "accountNumber": "5900085856",
  "cbaCustomerID": "45439",
  "responseMessage": "SUCCESSFUL",
  "availableBalance": "996856.76",
  "responseCode": "00"
}
```


# NIPFundTransferMultipleDebitAccounts

Transfers funds from a specified settlement account to another account in a different bank, allowing flexibility to choose the debit account.

***

**URI**: /NIPFundTransferMultipleDebitAccounts

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request body** (JSON)

***

```json
{
  "beneficiaryAccountName": "Nathan Agbara",
  "transactionAmount": "50",
  "currencyCode": "NGN",
  "narration": "Testing",
  "debitAccount": "5900235871",
  "sourceAccountName": "NATHAN AGBARA",
  "beneficiaryAccountNumber": "0430294874",
  "beneficiaryBank": "000013",
  "transactionReference": "SDFGHJUKJ456UKJH34565",
  "userName": "test",
  "password": "test"
}
```

&#x20; Response body (JSON)

{% tabs %}
{% tab title="200 Account successfully retrieved" %}

```javascript
{
  "transactionReference": "35326323fghn",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

```json
{
  "responseMessage": "Account does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="400: Bad Request The server cannot process the request due to a client error, such as malformed syntax or invalid parameters in the request." %}

```json
{
  "responseMessage": "Account does not exist.",
  "responseCode": "01"
}
```

{% endtab %}

{% tab title="500: Internal Server Error Server encountered an unexpected error" %}

```json
{
  "responseMessage": "Account does not exist.",
  "responseCode": "01"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/NIPFundTransferMultipleDebitAccounts \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"beneficiaryAccountName":"Nathan Agbara","transactionAmount":"50","currencyCode":"NGN","narration":"Testing","debitAccount":"5900235871","sourceAccountName":"NATHAN AGBARA","beneficiaryAccountNumber":"0430294874","beneficiaryBank":"000013","transactionReference":"SDFGHJUKJ456UKJH34565","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}
{% code overflow="wrap" fullWidth="true" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/NIPFundTransferMultipleDebitAccounts"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "beneficiaryAccountName": "Nathan Agbara",
    "transactionAmount": "50",
    "currencyCode": "NGN",
    "narration": "Testing",
    "debitAccount": "5900235871",
    "sourceAccountName": "NATHAN AGBARA",
    "beneficiaryAccountNumber": "0430294874",
    "beneficiaryBank": "000013",
    "transactionReference": "SDFGHJUKJ456UKJH34565",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class NIPFundTransferMultipleDebitAccounts {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/NIPFundTransferMultipleDebitAccounts");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"beneficiaryAccountName\":\"Nathan Agbara\",\"transactionAmount\":\"50\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"debitAccount\":\"5900235871\",\"sourceAccountName\":\"NATHAN AGBARA\",\"beneficiaryAccountNumber\":\"0430294874\",\"beneficiaryBank\":\"000013\",\"transactionReference\":\"SDFGHJUKJ456UKJH34565\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/NIPFundTransferMultipleDebitAccounts';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    beneficiaryAccountName: 'Nathan Agbara',
    transactionAmount: '50',
    currencyCode: 'NGN',
    narration: 'Testing',
    debitAccount: '5900235871',
    sourceAccountName: 'NATHAN AGBARA',
    beneficiaryAccountNumber: '0430294874',
    beneficiaryBank: '000013',
    transactionReference: 'SDFGHJUKJ456UKJH34565',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/NIPFundTransferMultipleDebitAccounts";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "beneficiaryAccountName" => "Nathan Agbara",
    "transactionAmount" => "50",
    "currencyCode" => "NGN",
    "narration" => "Testing",
    "debitAccount" => "5900235871",
    "sourceAccountName" => "NATHAN AGBARA",
    "beneficiaryAccountNumber" => "0430294874",
    "beneficiaryBank" => "000013",
    "transactionReference" => "SDFGHJUKJ456UKJH34565",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"beneficiaryAccountName\":\"Nathan Agbara\",\"transactionAmount\":\"50\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"debitAccount\":\"5900235871\",\"sourceAccountName\":\"NATHAN AGBARA\",\"beneficiaryAccountNumber\":\"0430294874\",\"beneficiaryBank\":\"000013\",\"transactionReference\":\"SDFGHJUKJ456UKJH34565\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/NIPFundTransferMultipleDebitAccounts", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "requestSuccessful": true,
  "sessionId": "99990000554443332221",
  "responseMessage": "success",
  "responseCode": "00"
}

```


# Xpress Wallet API

The Xpress Wallet API allows seamless integration of wallet functionalities into your products. Build smarter and faster applications with features for authentication, user management, merchant operations, and wallet transactions. This API operates in both sandbox and production modes, with endpoints designed to handle user authentication, customer management, and merchant wallet details.

#### How It Works

* **Authentication**: Obtain access and refresh tokens via the login endpoint.
* **User Management**: Manage user profiles and passwords.
* **Merchant Operations**: Handle merchant registration, profile updates, KYC, and access key generation.
* **Wallet Management**: Retrieve merchant wallet details and customer information.

#### Objectives

* Enable secure login and token management.
* Provide tools for managing merchant and customer data.
* Facilitate wallet-related transactions and profiles.

### Base URL

The base URL for API requests is defined as {{base-url}}. Replace this variable with the appropriate environment URL (e.g., <https://api.xpresswallet.com> for production or a sandbox URL).

{% hint style="info" %}
The Third party generic api requires api key.
{% endhint %}

[Request API Key](/quick-start)

**Base Url:**\
[https://api.xpresswallet.com](https://api.xpresswallet.com/)

Scripts

```javascript
if (pm.response.code === 200 || pm.response.code === 201 || pm.response.code === 400 || pm.response.code === 403) {

    const accessToken = pm.response.headers.get("X-Access-Token")
    const refreshToken = pm.response.headers.get("X-Refresh-Token")

    if (accessToken) {
        pm.environment.set("access-token", accessToken);
    }

    if (refreshToken) {
        pm.environment.set("refresh-token", refreshToken);
    }
}
```

***

### Base URL

All endpoints are relative to the base URL:

```
{{base-url}}
```

### Authentication

Most endpoints require authentication via `X-Access-Token` and `X-Refresh-Token` headers. Some endpoints also use a Bearer Token for authorization.

**Headers**:

```json
{
  "X-Access-Token": "{{access-token}}",
  "X-Refresh-Token": "{{refresh-token}}"
}
```

For endpoints requiring Bearer Token:

```json
{
  "Authorization": "Bearer {{vault:authorization-secret}}"
}
```


# Authentication

Token-Based Authentication

* **Login**: Use the /auth/login endpoint to authenticate with email and password (base64-encoded) to receive X-Access-Token and X-Refresh-Token.
* **Refresh Tokens**: Use /auth/refresh/token with the X-Refresh-Token to obtain new access tokens.
* **Logout**: Invalidate tokens via /auth/logout.
* **Headers**:
  * X-Access-Token: Required for authenticated requests.
  * X-Refresh-Token: Used for token refresh.
  * Example: X-Access-Token: {{access-token}}

#### Sample Login Request

```json
{
  "email": "bWVyY2hhbnQxQG1haWxpbmF0b3IuY29t",
  "password": "cGFzc3dvcmQ="
}
```

#### Sample Response

```json
{
  "status": true,
  "data": {
    "id": "425bc461-9b6c-4036-b47a-9d96e4f21eba",
    "role": "USER",
    "email": "merchant1@mailinator.com",
    "lastName": "Obagunwa",
    "firstName": "Samson",
    "createdAt": "2021-08-16T22:59:27.026Z",
    "updatedAt": "2022-05-03T11:01:11.923Z"
  },
  "merchant": {
    "email": "merchant1@mailinator.com",
    "id": "e84a4677-3158-40ba-8967-f523c2315cf9",
    "lastName": "Obagunwa",
    "mode": "SANDBOX",
    "role": "Admin",
    "firstName": "Samson",
    "owner": false,
    "review": "PENDING",
    "businessName": "Caleb",
    "businessType": "Restaurants",
    "createdAt": "2022-05-03T10:18:19.172Z",
    "updatedAt": "2022-05-03T10:18:19.172Z"
  }
}
```

* Headers include X-Access-Token and X-Refresh-Token for subsequent requests.

### API Endpoints

#### Authentication

**Login**

* **Endpoint**: {{base-url}}/auth/login
* **Method**: POST
* **Description**: Authenticate a merchant and receive access and refresh tokens.
* **Request Body**:

  ```json
  {
    "email": "bWVyY2hhbnQxQG1haWxpbmF0b3IuY29t",
    "password": "cGFzc3dvcmQ="
  }
  ```
* **Response**: 200 OK with token headers and user/merchant data (see above).

**Logout**

* **Endpoint**: {{base-url}}/auth/logout
* **Method**: POST
* **Description**: Invalidate the current session tokens.
* **Headers**:
  * X-Access-Token: {{access-token}}
  * X-Refresh-Token: {{refresh-token}}
* **Response**: 200 OK (no body).

**Forget Password**

* **Endpoint**: {{base-url}}/auth/password/forget
* **Method**: POST
* **Description**: Request a password reset code via email.
* **Request Body**:

  ```json
  {
    "email": "demobaba@mailinator.com"
  }
  ```
* **Response**: 200 OK

  ```json
  {
    "status": true,
    "message": "Your reset code has been sent to your email. It expires in 24 hours."
  }
  ```

**Reset Password**

* **Endpoint**: {{base-url}}/auth/password/reset
* **Method**: POST
* **Description**: Reset the password using a reset code.
* **Request Body**:

  ```json
  {
    "resetCode": "3122489",
    "password": "password"
  }
  ```
* **Response**: 200 OK

  ```json
  {
    "status": true,
    "message": "Password reset successfully"
  }
  ```

**Refresh Tokens**

* **Endpoint**: {{base-url}}/auth/refresh/token
* **Method**: POST
* **Description**: Refresh access tokens using a valid refresh token.
* **Headers**: X-Refresh-Token: Cx9AH9ubWqG3JyBz8DZr-E6aTa8GKruNerzJRCDUFbyjM6ef
* **Response**: 200 OK with new X-Access-Token and X-Refresh-Token.

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request Parameters** (JSON):

***

```json
{
  "accountNumber": "1018996198",
  "beneficiaryBank": "110000",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "bankCode": "110000",
  "accountName": "NNAJI, JOSHUA & VIVIAN",
  "transactionReference": "",
  "bvn": "",
  "responseMessage": "Approved or completed successfully",
  "accountNumber": "1018996198",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Error Completing Operation",
  "responseCode": "11"
}
```

{% endtab %}

{% tab title="400: Bad Request ." %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Error Completing Operation",
  "responseCode": "11"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```json
{
  "requestSuccessful": false,
  "responseMessage": "Error Completing Operation",
  "responseCode": "11"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/GetNIPAccount \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"accountNumber":"1018996198","beneficiaryBank":"110000","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/GetNIPAccount"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "accountNumber": "1018996198",
    "beneficiaryBank": "110000",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class GetNIPAccount {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/GetNIPAccount");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"accountNumber\":\"1018996198\",\"beneficiaryBank\":\"110000\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/GetNIPAccount';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    accountNumber: '1018996198',
    beneficiaryBank: '110000',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/GetNIPAccount";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "accountNumber" => "1018996198",
    "beneficiaryBank" => "110000",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"accountNumber\":\"1018996198\",\"beneficiaryBank\":\"110000\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/GetNIPAccount", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "bankCode": "110000",
  "accountName": "NNAJI, JOSHUA & VIVIAN",
  "transactionReference": "",
  "bvn": "",
  "responseMessage": "Approved or completed successfully",
  "accountNumber": "1018996198",
  "responseCode": "00"
}
```


# Login

#### POST /auth/login

Logs in a merchant user and returns user and merchant details.

**Request Body:**

```json
{
  "email": "bWVyY2hhbnQxQG1haWxpbmF0b3IuY29t",
  "password": "cGFzc3dvcmQ="
}
```

**Example Request (Dart - http):**

```dart
var request = http.Request('POST', Uri.parse('{{base-url}}/auth/login'));
request.body = '''{\n\t"email": "bWVyY2hhbnQxQG1haWxpbmF0b3IuY29t",\n\t"password": "cGFzc3dvcmQ="\n}''';

http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

**Response (200 OK):**

```json
{
  "status": true,
  "data": {
    "id": "425bc461-9b6c-4036-b47a-9d96e4f21eba",
    "role": "USER",
    "email": "merchant1@mailinator.com",
    "lastName": "Obagunwa",
    "firstName": "Samson",
    "createdAt": "2021-08-16T22:59:27.026Z",
    "updatedAt": "2022-05-03T11:01:11.923Z"
  },
  "merchant": {
    "email": "merchant1@mailinator.com",
    "id": "e84a4677-3158-40ba-8967-f523c2315cf9",
    "lastName": "Obagunwa",
    "mode": "SANDBOX",
    "role": "Admin",
    "firstName": "Samson",
    "owner": false,
    "review": "PENDING",
    "callbackURL": null,
    "businessName": "Caleb",
    "businessType": "Restaurants",
    "parentMerchant": null,
    "canDebitCustomer": false,
    "sandboxCallbackURL": null,
    "createdAt": "2022-05-03T10:18:19.172Z",
    "updatedAt": "2022-05-03T10:18:19.172Z"
  }
}
```

####


# Logout

#### POST /auth/logout

Logs out the authenticated user.

**Request:**&#x4E;o body required.

**Example Request (Dart - http):**

```dart
var request = http.Request('POST', Uri.parse('{{base-url}}/auth/logout'));
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

####


# Forget Password

#### POST /auth/password/forget

Initiates a password reset by sending a reset code to the provided email.

**Request Body:**

```json
{
  "email": "demobaba@mailinator.com"
}
```

**Example Request (Dart - http):**

```dart
var headers = {
  'Authorization': '{{vault:bearer-token}}'
};
var request = http.Request('POST', Uri.parse('{{base-url}}/merchant/request-merchant-password-change'));
request.body = '''{\n\t"email":"demobaba@mailinator.com"\n}''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

**Response (200 OK):**

```json
{
  "status": true,
  "message": "Your reset code has been sent to your email. It expires in 24 hours."
}
```


# Reset password

#### POST /auth/password/reset

Resets the user password using a reset code.

**Request Body:**

```json
{
  "resetCode": "3122489",
  "password": "password"
}
```

**Example Request (Dart - http):**

```dart
var headers = {};
var request = http.Request('POST', Uri.parse('{{base-url}}/merchant/change-merchant-password'));
request.body = '''{\n\t"resetCode":"3122489",\n\t"password":"password"\n}''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

**Response (200 OK):**

```json
{
  "status": true,
  "message": "Password reset successfully"
}
```


# Refresh Token

#### POST /auth/refresh/token

Refreshes authentication tokens for the user.

**Request Headers:**

* X-Refresh-Token: Refresh token (e.g., Cx9AH9ubWqG3JyBz8DZr-E6aTa8GKruNerzJRCDUFbyjM6ef)

**Example Request (Dart - http):**

```dart
var headers = {
  'X-Refresh-Token': 'Cx9AH9ubWqG3JyBz8DZr-E6aTa8GKruNerzJRCDUFbyjM6ef'
};
var request = http.Request('POST', Uri.parse('{{base-url}}/auth/refresh/token'));
request.body = '''''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

**Response (200 OK):**

```json
{
  "status": true,
  "data": {
    "id": "425bc461-9b6c-4036-b47a-9d96e4f21eba",
    "role": "USER",
    "email": "merchant1@mailinator.com",
    "lastName": "Obagunwa",
    "firstName": "Samson",
    "createdAt": "2021-08-16T22:59:27.026Z",
    "updatedAt": "2021-08-16T22:59:27.026Z"
  },
  "merchant": {
    "role": "USER",
    "email": "merchant1@mailinator.com",
    "id": "fb2b0eb6-edc8-48f8-bc38-5c000e52a57e",
    "lastName": "Obagunwa",
    "mode": "SANDBOX",
    "firstName": "Samson",
    "review": "ENABLED",
    "callbackURL": "https://webhook.site/7e4f1819-7780-416d-8596-3dece233d785",
    "businessName": "Neyosoft",
    "businessType": "Electrical Electronics",
    "parentMerchant": "0cee2057-645e-48aa-b2f7-712e07cd0232",
    "canDebitCustomer": true,
    "sandboxCallbackURL": "http://localhost:50004/webhook/wallet",
    "createdAt": "2021-08-16T22:59:26.765Z",
    "updatedAt": "2022-01-31T17:39:36.193Z"
  }
}
```

###


# User

***

**URI**: /NIPFundTransfer

\
**HTTP Method**: POST

\
**Headers**:

* Accept: application/json
* Content-Type: application/json

**Request body**

```json
{
  "beneficiaryAccountName": "UGBO, CHARLES UMORE",
  "transactionAmount": "2000.45",
  "currencyCode": "NGN",
  "narration": "Testing",
  "sourceAccountName": "Nnamdi Adebayo Hamzat",
  "beneficiaryAccountNumber": "0045434120",
  "beneficiaryBank": "000013",
  "transactionReference": "20191119143854",
  "userName": "test",
  "password": "test"
}
```

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

```javascript
{
  "transactionReference": "20191119143854",
  "sessionId": "999037230913163757005000082268",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```
{
  "transactionReference": "20191119143501",
  "responseMessage": "TRANSACTION REFERENCE EXISTS",
  "responseCode": "7709"
}
```

{% endtab %}
{% endtabs %}

***

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```javascript
curl -X POST http://154.113.16.142:8882/postingrest/NIPFundTransfer \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"beneficiaryAccountName":"UGBO, CHARLES UMORE","transactionAmount":"2000.45","currencyCode":"NGN","narration":"Testing","sourceAccountName":"Nnamdi Adebayo Hamzat","beneficiaryAccountNumber":"0045434120","beneficiaryBank":"000013","transactionReference":"20191119143854","userName":"test","password":"test"}'
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "http://154.113.16.142:8882/postingrest/NIPFundTransfer"
headers = {"Accept": "application/json", "Content-Type": "application/json"}
data = {
    "beneficiaryAccountName": "UGBO, CHARLES UMORE",
    "transactionAmount": "2000.45",
    "currencyCode": "NGN",
    "narration": "Testing",
    "sourceAccountName": "Nnamdi Adebayo Hamzat",
    "beneficiaryAccountNumber": "0045434120",
    "beneficiaryBank": "000013",
    "transactionReference": "20191119143854",
    "userName": "test",
    "password": "test"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class NIPFundTransfer {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://154.113.16.142:8882/postingrest/NIPFundTransfer");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInput = "{\"beneficiaryAccountName\":\"UGBO, CHARLES UMORE\",\"transactionAmount\":\"2000.45\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"sourceAccountName\":\"Nnamdi Adebayo Hamzat\",\"beneficiaryAccountNumber\":\"0045434120\",\"beneficiaryBank\":\"000013\",\"transactionReference\":\"20191119143854\",\"userName\":\"test\",\"password\":\"test\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        StringBuilder response = new StringBuilder();
        String responseLine;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const fetch = require('node-fetch');

const url = 'http://154.113.16.142:8882/postingrest/NIPFundTransfer';
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const data = {
    beneficiaryAccountName: 'UGBO, CHARLES UMORE',
    transactionAmount: '2000.45',
    currencyCode: 'NGN',
    narration: 'Testing',
    sourceAccountName: 'Nnamdi Adebayo Hamzat',
    beneficiaryAccountNumber: '0045434120',
    beneficiaryBank: '000013',
    transactionReference: '20191119143854',
    userName: 'test',
    password: 'test'
};

fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = "http://154.113.16.142:8882/postingrest/NIPFundTransfer";
$headers = [
    "Accept: application/json",
    "Content-Type: application/json"
];
$data = [
    "beneficiaryAccountName" => "UGBO, CHARLES UMORE",
    "transactionAmount" => "2000.45",
    "currencyCode" => "NGN",
    "narration" => "Testing",
    "sourceAccountName" => "Nnamdi Adebayo Hamzat",
    "beneficiaryAccountNumber" => "0045434120",
    "beneficiaryBank" => "000013",
    "transactionReference" => "20191119143854",
    "userName" => "test",
    "password" => "test"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var content = new StringContent(
                "{\"beneficiaryAccountName\":\"UGBO, CHARLES UMORE\",\"transactionAmount\":\"2000.45\",\"currencyCode\":\"NGN\",\"narration\":\"Testing\",\"sourceAccountName\":\"Nnamdi Adebayo Hamzat\",\"beneficiaryAccountNumber\":\"0045434120\",\"beneficiaryBank\":\"000013\",\"transactionReference\":\"20191119143854\",\"userName\":\"test\",\"password\":\"test\"}",
                Encoding.UTF8,
                "application/json"
            );
            var response = await client.PostAsync("http://154.113.16.142:8882/postingrest/NIPFundTransfer", content);
            var responseString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseString);
        }
    }
}
```

{% endtab %}
{% endtabs %}

> The above command returns JSON structured like this:

```json
{
  "transactionReference": "20191119143854",
  "sessionId": "999037230913163757005000082268",
  "responseMessage": "Approved or completed successfully",
  "responseCode": "00"
}
```


# Get user profile

#### GET /user/profile

Retrieves the profile details of the authenticated merchant.

**Request Headers:**

* X-Access-Token: Access token
* X-Refresh-Token: Refresh token

**Example Request (Dart - http):**

```dart
var headers = {
  'X-Access-Token': '{{access-token}}',
  'X-Refresh-Token': '{{refresh-token}}'
};
var request = http.Request('GET', Uri.parse('{{base-url}}/user/profile'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

**Response (200 OK):**

```json
{
  "status": true,
  "data": {
    "id": "425bc461-9b6c-4036-b47a-9d96e4f21eba",
    "role": "USER",
    "email": "merchant1@mailinator.com",
    "lastName": "Obagunwa",
    "firstName": "Samson",
    "phoneNumber": "2348020245368",
    "MerchantId": "e84a4677-3158-40ba-8967-f523c2315cf9",
    "createdAt": "2021-08-16T22:59:27.026Z",
    "updatedAt": "2022-05-03T11:01:11.923Z",
    "Merchant": {
      "id": "e84a4677-3158-40ba-8967-f523c2315cf9",
      "email": "caleb@mailinator.com",
      "review": "PENDING",
      "businessName": "Caleb",
      "canDebitCustomer": false,
      "parentMerchant": null,
      "createdAt": "2022-05-03T10:18:19.172Z",
      "mode": "SANDBOX",
      "owner": false
    }
  },
  "permissions": [
    "BROWSE_CUSTOMERS",
    "UPDATE_CUSTOMERS",
    "CREATE_CUSTOMER_WALLET",
    "WALLET_CREDIT_DEBIT",
    "MANAGE_BALANCE_SETTLEMENT",
    "BROWSE_MERCHANT_WALLET",
    "ENABLE_DISABLE_WALLET",
    "SET_TRANSACTION_PIN",
    "MANAGE_TRANSFER",
    "BROWSE_TRANSACTIONS",
    "UPDATE_MERCHANT_DETAIL",
    "BROWSE_KEYS",
    "GENERATE_KEYS",
    "MANAGE_AIRTIME",
    "MANAGE_PREPAID_CARD",
    "INVITE_TEAM_MEMBER",
    "BROWSE_ROLES",
    "MANAGE_ROLES",
    "MANAGE_TEAM_MEMBER",
    "BROWSE_TEAM_MEMBER"
  ]
}
```


# Change user password

#### PUT /user/password

Changes the password of the authenticated user.

**Request Headers:**

* X-Access-Token: Access token
* X-Refresh-Token: Refresh token

**Request Body:**

```json
{
  "password": "password"
}
```

**Example Request (Dart - http):**

```dart
var headers = {
  'X-Access-Token': '{{access-token}}',
  'X-Refresh-Token': '{{refresh-token}}'
};
var request = http.Request('PUT', Uri.parse('{{base-url}}/user/password'));
request.body = '''{\n    "password": "123456"\n}''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
```

**Response (200 OK):**

```json
{
  "status": true,
  "message": "Password successfully changed."
}
```

###


# Merchant


# Customers


# Get All Customers

Retrieve a paginated list of all customers associated with the merchant.

* **Endpoint**: `GET {{base-url}}/customer`
* **Query Parameters**:

  * `page`: Page number (e.g., `1`).

**Headers**:

```json
{
  "Authorization": "Bearer {{vault:authorization-secret}}",
  "X-Access-Token": "{{access-token}}",
  "X-Refresh-Token": "{{refresh-token}}"
}
```

**Response**:

**200 OK**:

```json
{
  "status": true,
  "customers": [
    {
      "id": "1149d065-c5c9-4382-aec6-323090f31d9d",
      "bvn": "22192640723",
      "firstName": "Emma",
      "lastName": "Godwin",
      "BVNLastName": "OBAGUNWA",
      "BVNFirstName": "EMMANUEL",
      "email": "08030223346@bleyt.com",
      "nameMatch": false,
      "phoneNumber": "08030223346",
      "dateOfBirth": "1991-09-13",
      "createdAt": "2020-09-16T12:01:51.520Z",
      "updatedAt": "2020-09-16T12:01:51.520Z",
      "walletId": "0bea0968-c43a-47fe-a83a-f7b514194aba"
    },
    ...
  ],
  "metadata": {
    "page": 1,
    "totalRecords": 7,
    "totalPages": 1
  }
}
```

### Sample Implementation

{% tabs %}
{% tab title="Curl" %}
{% code overflow="wrap" %}

```bash
curl --request GET \
  --url '{{base-url}}/customer?page=1' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}'
```

{% endcode %}
{% endtab %}

{% tab title="Dart" %}

```
// Some code
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
}

response = requests.get('{{base-url}}/customer?page=1', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

{% endtab %}

{% tab title="Java" %}

```python
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/customer?page=1");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript" %}

{% endtab %}

{% tab title="PHP" %}

{% endtab %}
{% endtabs %}

####


# Get Customer Details

Retrieve details of a specific customer by their ID.

* **Endpoint**: `GET {{base-url}}/customer/:customerId`
* **Path Parameters**:
  * `customerId`: The unique ID of the customer (e.g., `d5e31dbd-ec51-4932-86a6-d92ee5a49957`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "customer": {
        "id": "1149d065-c5c9-4382-aec6-323090f31d9d",
        "bvn": "22192640723",
        "firstName": "Emma",
        "lastName": "Godwin",
        "BVNLastName": "OBAGUNWA",
        "BVNFirstName": "EMMANUEL",
        "email": "08030223346@bleyt.com",
        "nameMatch": false,
        "phoneNumber": "08030223346",
        "dateOfBirth": "1991-09-13",
        "createdAt": "2020-09-16T12:01:51.520Z",
        "updatedAt": "2020-09-16T12:01:51.520Z",
        "walletId": "0bea0968-c43a-47fe-a83a-f7b514194aba"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Find Customer by Phone Number

Retrieve customer details using their phone number.

* **Endpoint**: `GET {{base-url}}/customer/phone?phoneNumber={phoneNumber}`
* **Query Parameters**:
  * `phoneNumber`: The customer's phone number (e.g., `08020245350`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "customer": {
        "id": "1149d065-c5c9-4382-aec6-323090f31d9d",
        "firstName": "Emma",
        "lastName": "Godwin",
        "walletId": "0bea0968-c43a-47fe-a83a-f7b514194aba"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/customer/phone?phoneNumber=08030223346'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Update Customer Profile

Update a customer's profile information.

* **Endpoint**: `PUT {{base-url}}/customer/{customerId}`
* **Path Parameters**:
  * `customerId`: The unique ID of the customer (e.g., `6834b937-bdf0-430e-9600-90009cd5c92e`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "firstName": "Updated",
    "lastName": "James",
    "address": "No 10, Adewale street",
    "phoneNumber": "08048584833",
    "metadata": {
      "others": "anything"
    }
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "customer": {
        "firstName": "Updated",
        "lastName": "Customer",
        "email": "democustomer1@qa.team",
        "phoneNumber": "08030223344",
        "dateOfBirth": "1991-09-13"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('PUT', Uri.parse('{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff'));
  request.body = '''{
    "firstName": "Updated"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Wallet


# Create Customer Wallet

Create a wallet for a customer.

* **Endpoint**: `POST {{base-url}}/wallet`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "bvn": "22181029322",
    "firstName": "First",
    "lastName": "User",
    "dateOfBirth": "1992-05-16",
    "phoneNumber": "08020245368",
    "email": "access2emma@gmail.com",
    "address": "No 10, Adewale Ajasin University",
    "metadata": {
      "even-more": "Other data",
      "additional-data": "some more data"
    }
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "customer": {
        "id": "5de468b7-de5f-414e-b948-1f2f336c3c5e",
        "metadata": {
          "even-more": "Other data",
          "additional-data": "some more data"
        },
        "bvn": "22181029312",
        "currency": "NGN",
        "dateOfBirth": "1992-05-16",
        "phoneNumber": "08020245356",
        "lastName": "Adekunle",
        "firstName": "Ridwan",
        "BVNLastName": "Adekunle",
        "BVNFirstName": "Ridwan",
        "nameMatch": true,
        "email": "08020245356@bleyt.com",
        "mode": "SANDBOX",
        "MerchantId": "c56d9ba0-588b-43ef-9ba5-9e70e2187180",
        "tier": "TIER_2",
        "updatedAt": "2021-02-22T16:32:01.468Z",
        "createdAt": "2021-02-22T16:32:01.468Z",
        "address": null
      },
      "wallet": {
        "id": "0080bd12-0d81-4b9d-9e0b-74c670e09c53",
        "mode": "SANDBOX",
        "email": "08020245356@bleyt.com",
        "currency": "NGN",
        "bankName": "Providus Bank",
        "bankCode": "000023",
        "accountName": "MERCHANT(ids-ridwan adekunle)",
        "accountNumber": "9964189288",
        "accountReference": "xX1jAsqtUHnM4epteTrcDTGWL",
        "updatedAt": "2021-02-22T16:32:04.361Z",
        "createdAt": "2021-02-22T16:32:04.361Z",
        "bookedBalance": 0,
        "availableBalance": 0,
        "status": "ACTIVE",
        "updated": false,
        "walletType": "Customers",
        "walletId": "5de468b7-de5f-414e-b948-1f2f336c3c5e"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/wallet'));
  request.body = '''{
    "bvn": "22181029312",
    "firstName": "Ridwan",
    "lastName": "Adekunle",
    "dateOfBirth": "1992-05-16",
    "phoneNumber": "08020245356",
    "address": "No 10, Adewale Ajasin University",
    "metadata": {
      "even-more": "Other data",
      "additional-data": "some more data"
    }
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get All Wallets

Retrieve a list of all customer wallets.

* **Endpoint**: `GET {{base-url}}/wallet`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "wallets": [
        {
          "email": "democustomer1@qa.team",
          "id": "2ac94bae-90cb-4dd4-852c-93169980d00a",
          "lastName": "Customer",
          "firstName": "Demo",
          "status": "ACTIVE",
          "bankName": "Providus Bank",
          "bankCode
    ```


# Transactions

#### Get Batch Transaction Details

Retrieve details of a specific batch transaction using a reference ID.

* **Endpoint**: `GET {{base-url}}/transaction/batch/:reference`
* **Path Parameters**:
  * `reference`: The unique transaction reference (e.g., `8ede8w340ddk3erowr3ef63`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": {
        "id": "1",
        "type": "DEBIT",
        "source": "Merchant",
        "reference": "8ede8w340ddk3erowr3ef63",
        "status": "SUCCESS",
        "passed": ["ref1", "ref2"],
        "failed": [],
        "createdAt": "2023-01-01T12:00:00Z",
        "updatedAt": "2023-01-01T12:00:00Z"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/transaction/batch/8ede8w340ddk3erowr3ef63'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Transfer


# Get bank list

Retrieve a list of supported banks.

* **Endpoint**: `GET {{base-url}}/transfer/banks`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "banks": [
        {"code": "090270", "name": "AB MICROFINANCE BANK"},
        {"code": "000014", "name": "ACCESS BANK"},
        {"code": "000013", "name": "GTBANK PLC"},
        ...
      ]
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/transfer/banks'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get bank account details

Verify bank account details using sort code and account number.

* **Endpoint**: `GET {{base-url}}/transfer/account/details?sortCode={sortCode}&accountNumber={accountNumber}`
* **Query Parameters**:
  * `sortCode`: Bank sort code (e.g., `000023`).
  * `accountNumber`: Bank account number (e.g., `1700263070`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "account": {
        "bankCode": "000013",
        "accountName": "NNAJI, JOSHUA & VIVIAN",
        "accountNumber": "0167421242"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/transfer/account/details?sortCode=000013&accountNumber=0167421242'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Merchant bank transfer

Initiate a bank transfer from a merchant account.

* **Endpoint**: `POST {{base-url}}/transfer/bank`
* **Headers**:

  ```json
  {
    "Authorization": "Bearer {{vault:authorization-secret}}",
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "amount": 220,
    "sortCode": "000023",
    "narration": "Just kidding",
    "accountNumber": "1700263070",
    "accountName": "Obagunwa Emmanuel",
    "metadata": {"customer-data": "some customer details"}
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Transaction successfully completed.",
      "transfer": {
        "amount": 100,
        "charges": 10.5,
        "vat": 0.7875,
        "reference": "Lf9PAUXREbIyUM2tKU1nGJP2W3vxpLV5s18R",
        "total": 111.2875,
        "metadata": {"customer-data": "some customer details"},
        "sessionId": "965755343713226737061061390325",
        "destination": "0167421242/000013",
        "transactionReference": "0496626196169490",
        "description": "Transfer of NGN 100 to Obagunwa Emmanuel (0167421242/GTBANK PLC)"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/transfer/bank'));
  request.body = '''{
    "amount": 100,
    "sortCode": "000013",
    "narration": "Just kidding",
    "accountNumber": "0167421242",
    "accountName": "Obagunwa Emmanuel",
    "metadata": {"customer-data": "some customer details"}
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Customer Bank Transfer

Initiate a bank transfer from a customer account.

* **Endpoint**: `POST {{base-url}}/transfer/bank/customer`
* **Headers**:

  ```json
  {
    "Authorization": "Bearer {{vault:authorization-secret}}",
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "amount": 150,
    "sortCode": "110005",
    "narration": "Just kidding",
    "accountNumber": "5400403011",
    "accountName": "Obagunwa Emmanuel",
    "customerId": "66f5a260-9462-4d36-ade1-beccd57e52bd",
    "metadata": {"customer-data": "some customer details"}
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Transaction successfully completed.",
      "transfer": {
        "amount": 1,
        "charges": 10.5,
        "vat": 0.7875,
        "reference": "AFYF1zFVJgwtV5YQ1wMjH7tmaQnNz6S8BqAQ",
        "total": 12.2875,
        "metadata": {"customer-data": "some customer details"},
        "sessionId": "694183772508885572057985059318",
        "destination": "0167421242/000013",
        "transactionReference": "9533043993045314",
        "description": "Transfer of NGN 1 to Obagunwa Emmanuel (0167421242/GTBANK PLC)"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/transfer/bank/customer'));
  request.body = '''{
    "amount": 1,
    "sortCode": "000013",
    "narration": "Just kidding",
    "accountNumber": "0167421242",
    "accountName": "Obagunwa Emmanuel",
    "customerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
    "metadata": {"customer-data": "some customer details"}
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Merchant Batch Bank Transfer

Initiate multiple bank transfers in a single batch.

* **Endpoint**: `POST {{base-url}}/transfer/bank/batch`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  [
    {
      "amount": 600,
      "sortCode": "000013",
      "narration": "Just kidding",
      "accountNumber": "0167421242",
      "accountName": "Obagunwa Emmanuel",
      "metadata": {"customer-data": "some customer details"}
    },
    {
      "amount": 300,
      "sortCode": "000013",
      "narration": "Just kidding",
      "accountNumber": "0167421242",
      "accountName": "Obagunwa Emmanuel",
      "metadata": {"customer-data": "some customer details"}
    }
  ]
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Transaction has been submitted."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/transfer/bank/batch'));
  request.body = '''[
    {
      "amount": 5000,
      "sortCode": "000013",
      "narration": "Just kidding",
      "accountNumber": "0167421242",
      "accountName": "Obagunwa Emmanuel",
      "metadata": {"customer-data": "some customer details"}
    },
    {
      "amount": 300,
      "sortCode": "000013",
      "narration": "Just kidding",
      "accountNumber": "0167421242",
      "accountName": "Obagunwa Emmanuel",
      "metadata": {"customer-data": "some customer details"}
    }
  ]''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Customer to Customer Wallet Transfer

Transfer funds between customer wallets.

* **Endpoint**: `POST {{base-url}}/transfer/wallet`
* **Headers**:

  ```json
  {
    "Authorization": "Bearer {{vault:authorization-secret}}",
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "amount": 200,
    "fromCustomerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
    "toCustomerId": "a2c40f33-489c-480f-9d24-e2742502b85f"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Transaction successfully completed.",
      "data": {
        "amount": 200,
        "reference": "ZUxe2hsW0PZWRH96u0MJrMkcwmtnLe4HczmD",
        "transaction_fee": 10,
        "total": 210,
        "target_customer_id": "a2c40f33-489c-480f-9d24-e2742502b85f",
        "source_customer_id": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
        "target_customer_wallet": "75d3cb93-eb95-4b7b-b650-b5907dce526d",
        "source_customer_wallet": "b222dee2-4e45-483c-89c7-1afe72c9bcab",
        "description": "Fund transfer between customers"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/transfer/wallet'));
  request.body = '''{
    "amount": 200,
    "fromCustomerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
    "toCustomerId": "a2c40f33-489c-480f-9d24-e2742502b85f"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Card


# Card Setup

Configure card settings for a merchant.

* **Endpoint**: `PUT {{base-url}}/card/setup`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "appId": "test",
    "appKey": "test",
    "prepaidCardPrefix": "5061000110195",
    "loadingAccountName": "Emmanuel Adeniyi",
    "loadingAccountNumber": "1029384857",
    "loadingAccountSortcode": "001256"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Card setup information successfully updated."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('PUT', Uri.parse('{{base-url}}/card/setup'));
  request.body = '''{
    "appId": "test",
    "appKey": "test",
    "prepaidCardPrefix": "5061000110195",
    "loadingAccountName": "Emmanuel Adeniyi",
    "loadingAccountNumber": "1029384857",
    "loadingAccountSortcode": "001256"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Create Card

Create a new card for a customer.

* **Endpoint**: `POST {{base-url}}/card`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "address1": "10 Sonola Street, Osogbo",
    "address2": "20 Sonola Street, Osogbo",
    "customerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Card created successfully."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/card'));
  request.body = '''{
    "address1": "10 Sonola Street, Osogbo",
    "address2": "20 Sonola Street, Osogbo",
    "customerId": "c938a018-8987-4411-97c5-e456868741e8"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Activate Card

Activate a card for a customer.

* **Endpoint**: `POST {{base-url}}/card/activate`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "amount": 200,
    "last6": "202010",
    "customerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Card activated successfully."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/card/activate'));
  request.body = '''{
    "last6": "000352",
    "customerId": "c938a018-8987-4411-97c5-e456868741e8"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get Card Balance

Retrieve the balance and limits of a customer's card.

* **Endpoint**: `GET {{base-url}}/card/balance?customerId={customerId}`
* **Query Parameters**:
  * `customerId`: The customer's unique ID (e.g., `aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": {
        "id": "b2c1552e-f8e0-4e58-8a1a-d62ddde08133",
        "ledgerBalance": "120000",
        "availableBalance": "6723",
        "goodsLimit": "1400000",
        "goodsNrTransLimit": "5",
        "cashLimit": "0",
        "cashNrTransLimit": "0",
        "paymentLimit": "1400000",
        "paymentNrTransLimit": "5",
        "cardNotPresentLimit": "1400000",
        "depositCreditLimit": "1000000",
        "updatedAt": "2020-10-19T15:25:13.501Z",
        "createdAt": "2020-10-19T15:25:13.501Z",
        "deletedAt": null
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/card/balance?last6=000352'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Fund Card

Add funds to a customer's card.

* **Endpoint**: `POST {{base-url}}/card/fund`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "amount": 150,
    "customerId": "9093ac1f-74e9-499b-bf5e-0bdf9c6c9a20"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Card funded successfully."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/card/fund'));
  request.body = '''{
    "amount": 100,
    "customerId": "ce43795c-f90f-40cf-b46e-1e1c49abf110"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Team


# Invite Team Member

Send an invitation to a new team member.

* **Endpoint**: `POST {{base-url}}/team/invitations`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "roleId": "1e9f0636-1e3c-409a-a8bd-3b037410530f",
    "email": "team2@mailinator.com",
    "approvalLimit": 0
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Invitation successfully sent."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/team/invitations'));
  request.body = '''{
    "role": "Secretary",
    "email": "neyo@test.com"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get Team Members

Retrieve a list of team members.

* **Endpoint**: `GET {{base-url}}/team/members`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": [
        {
          "id": "0b9bce55-fb6a-4249-a08b-5fb6802febac",
          "role": "Customer Representative",
          "email": "team1@mailinator.com",
          "lastName": "Doe",
          "firstName": "John",
          "approvalLimit": 0
        },
        {
          "id": "8e51036e-d88c-424c-83f1-0e2c9e2d415f",
          "role": "Customer Representative",
          "email": "team2@mailinator.com",
          "lastName": "Adeniyi",
          "firstName": "Emma",
          "approvalLimit": 0
        }
      ]
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/team/members'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```

####


# Get All Invitations

Retrieve a paginated list of team invitations.

* **Endpoint**: `GET {{base-url}}/team/invitations?page={page}&perPage={perPage}`
* **Query Parameters**:
  * `page`: Page number (e.g., `1`).
  * `perPage`: Number of items per page (e.g., `20`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": [
        {
          "id": "d3448217-ddb0-413f-a6eb-332e00bb270c",
          "email": "neyo@test.com",
          "role": "Secretary",
          "accepted": false,
          "createdAt": "2020-12-02T22:26:13.323Z",
          "updatedAt": "2020-12-02T22:26:13.323Z"
        }
      ]
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/team/invitations'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Resend Invitation

Resend an invitation to a team member.

* **Endpoint**: `POST {{base-url}}/team/invitations/resend`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "email": "team1@mailinator.com"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Invitation successfully resend."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/team/invitations/resend'));
  request.body = '''{
    "email": "neyo@test.com"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Accept Invitation

Accept a team invitation.

* **Endpoint**: `POST {{base-url}}/team/invitations/accept`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "invitationCode": "dfnacefu;iavbklsfjakls;dfjncaksdjfakl;sdj",
    "firstName": "Emma",
    "lastName": "Adeniyi",
    "phoneNumber": "08035458867",
    "password": "cGFzc3dvcmQ="
  }
  ```
* **Response**:
  * **200 OK**: (Successful acceptance)
  * **400 Bad Request**:

    ```json
    {
      "status": false,
      "message": "An account with the provided details already exists."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/team/invitations/accept'));
  request.body = '''{
    "email": "team2@mailinator.com",
    "firstName": "Emma",
    "lastName": "Adeniyi",
    "phoneNumber": "08035458867",
    "password": "cGFzc3dvcmQ="
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get Merchant List

Retrieve a list of merchants associated with the team.

* **Endpoint**: `GET {{base-url}}/team/merchants`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": [
        {
          "id": "151b73ed-93b8-4ed8-9288-6e290c2af38e",
          "role": "Secretary",
          "name": "Neyosoft"
        }
      ]
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/team/merchants'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Switch Merchant

Switch the active merchant account.

* **Endpoint**: `POST {{base-url}}/team/merchants/switch`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "merchantId": "0cee2057-645e-48aa-b2f7-712e07cd0232"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Merchant successfully switched."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/team/merchants/switch'));
  request.body = '''{
    "merchantId": "151b73ed-93b8-4ed8-9288-6e290c2af38e"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Update Member Information

Update a team member's information.

* **Endpoint**: `PUT {{base-url}}/team/member/{memberId}`
* **Path Parameters**:
  * `memberId`: The unique ID of the team member (e.g., `0b9bce55-fb6a-4249-a08b-5fb6802febac`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "approvalLimit": 500,
    "roleId": "477cd8ea-55c4-4a3a-ab24-d3e7bbcb283c"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Member information successfully updated."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('PUT', Uri.parse('{{base-url}}/team/member/0b9bce55-fb6a-4249-a08b-5fb6802febac'));
  request.body = '''{
    "approvalLimit": 500
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Roles & Permission


# Get All Permissions

Retrieve a list of all available permissions.

* **Endpoint**: `GET {{base-url}}/team/permissions`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": [
        {"name": "BROWSE_CUSTOMERS", "description": "View customers information"},
        {"name": "UPDATE_CUSTOMERS", "description": "Update customers information"},
        {"name": "CREATE_CUSTOMER_WALLET", "description": "Create wallet for customers"},
        ...
      ]
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/team/permissions'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get All Roles

Retrieve a list of all roles.

* **Endpoint**: `GET {{base-url}}/team/roles`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": [
        {
          "id": "36fb6cdc-c107-4550-9a2b-2c23ec8a78b9",
          "name": "Driver",
          "permissions": ["INVITE_TEAM_MEMBER"]
        },
        ...
      ]
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/team/roles'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Create Role

Create a new role with specified permissions.

* **Endpoint**: `POST {{base-url}}/team/roles`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "name": "Customer Representative",
    "permissions": ["BROWSE_CUSTOMERS", "UPDATE_CUSTOMERS", "CREATE_CUSTOMER_WALLET"]
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Role successfully created.",
      "data": {
        "id": "36fb6cdc-c107-4550-9a2b-2c23ec8a78b9",
        "name": "Driver",
        "permissions": ["INVITE_TEAM_MEMBER"]
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/team/roles'));
  request.body = '''{
    "name": "Driver",
    "permissions": ["INVITE_TEAM_MEMBER"]
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Update Role

Update an existing role's name and permissions.

* **Endpoint**: `PATCH {{base-url}}/team/roles/{roleId}`
* **Path Parameters**:
  * `roleId`: The unique ID of the role (e.g., `36fb6cdc-c107-4550-9a2b-2c23ec8a78b9`).
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "name": "Driver",
    "permissions": ["INVITE_TEAM_MEMBER", "TRANSFER_TO_BANK"]
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Role successfully updated.",
      "data": {
        "id": "36fb6cdc-c107-4550-9a2b-2c23ec8a78b9",
        "name": "Driver",
        "permissions": ["INVITE_TEAM_MEMBER", "TRANSFER_TO_BANK"]
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('PATCH', Uri.parse('{{base-url}}/team/roles/36fb6cdc-c107-4550-9a2b-2c23ec8a78b9'));
  request.body = '''{
    "name": "Driver",
    "permissions": ["INVITE_TEAM_MEMBER", "TRANSFER_TO_BANK"]
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Account verification

Verify a merchant account using an activation code.

* **Endpoint**: `PUT {{base-url}}/merchant/verify`
* **Body**:

  ```json
  {
    "activationCode": "9004546"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Your account has been successfully verified."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var request = http.Request('PUT', Uri.parse('{{base-url}}/merchant/verify'));
  request.body = '''{
    "activationCode": "5581413"
  }''';
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Resend Verification Code

Resend a verification code to a merchant's email.

* **Endpoint**: `POST {{base-url}}/merchant/verify/resend`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "email": "demoneyo@qa.team"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Your verification code has been sent to your email. It expires in 24 hours"
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/merchant/resend-activation-code'));
  request.body = '''{
    "email": "demoneyo@qa.team"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Complete Merchant KYC

Submit KYC documents for merchant registration.

* **Endpoint**: `PUT {{base-url}}/merchant/complete-merchant-registration`
* **Body** (form-data):
  * `cac_pack`: File (e.g., `/C:/herlabytes/Medilog/src/assets/images/avatar.png`)
  * `directorsBVN`: BVN number (e.g., `22192640723`)
  * `merchantId`: Merchant ID (e.g., `2c5356fc-1127-4e67-a001-2ae170731bee`)
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Your Documents have been uploaded and Pending Review"
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var request = http.MultipartRequest('PUT', Uri.parse('{{base-url}}/merchant/complete-merchant-registration'));
  request.fields.addAll({
    'directorsBVN': '22222222226',
    'merchantId': '46791573-12d5-4f65-9868-f09a6a18aa74'
  });
  request.files.add(await http.MultipartFile.fromPath('cac_pack', '/Users/Herlarbs/Downloads/Bleyt Glide Development Scope.pdf'));
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get Merchant Profile

Retrieve the profile of the logged-in merchant.

* **Endpoint**: `GET {{base-url}}/merchant/profile`
* **Headers**:

  ```json
  {
    "Authorization": "Bearer {{vault:authorization-secret}}",
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": {
        "id": "c56d9ba0-588b-43ef-9ba5-9e70e2187180",
        "bvn": null,
        "slug": "IDS",
        "email": "idris@herlabytes.com",
        "phoneNumber": "2347065948710",
        "callbackURL": "https://656c12875b57.ngrok.io/v1/webhook/test",
        "businessName": "Herlabytes",
        "businessType": "FINANCIAL-SERVICES",
        "merchantType": "PLATINUM",
        "review": "PENDING",
        "walletReservationCharge": 20,
        "bvnChargeV1": 0,
        "bvnVerificationCharge": 40,
        "walletToWalletTransfer": 20,
        "airtimeCharge": 10,
        "transferCharges": {
          "max5000": 20,
          "max50000": 35,
          "min50000": 52
        },
        "contractCode": null,
        "apiKey": null,
        "mode": "SANDBOX",
        "fundingRate": 0.85,
        "fundingRateMax": 200,
        "sandboxCallbackURL": "https://656c12875b57.ngrok.io/v1/webhook/test",
        "tier_1_daily_limit": 10000,
        "tier_2_daily_limit": 200000,
        "tier_3_daily_limit": 1000000000,
        "tier_1_min_balance": 0,
        "tier_2_min_balance": 0,
        "tier_3_min_balance": 0,
        "baseCustomerWalletCredit": 1200,
        "canLogin": true,
        "sendEmail": true,
        "autoCardFunding": false,
        "createdAt": "2021-01-27T12:25:16.761Z",
        "updatedAt": "2021-03-03T00:11:15.548Z"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/merchant/profile'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Update Merchant Profile

Update the merchant's profile information.

* **Endpoint**: `PATCH {{base-url}}/merchant/profile`
* **Headers**:

  ```json
  {
    "Authorization": "Bearer {{vault:authorization-secret}}",
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "canLogin": true,
    "sendEmail": true,
    "callbackURL": "http://localhost:50004/webhook/wallet",
    "sandboxCallbackURL": "https://webhook.site/7e4f1819-7780-416d-8596-3dece233d785"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "message": "Profiile successfully updated"
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('PATCH', Uri.parse('{{base-url}}/merchant/profile'));
  request.body = '''{
    "lastName": "Michael"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get Merchant Access Keys

Retrieve the merchant's access keys.

* **Endpoint**: `GET {{base-url}}/merchant/my-access-keys`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": {
        "privateKey": "sk_sandbox_A7piqhVbmy5dzuvUQRWDIWAscnG9ZhtkmU90LdhbtR1vvi1W",
        "publicKey": "pk_sandbox_OsCl755PRpMq0tc1YxGuesXTgVBzprF2mAB8vXUuozuxyldi"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/merchant/my-access-keys'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Generate Access Keys

Generate new access keys for the merchant.

* **Endpoint**: `POST {{base-url}}/merchant/generate-access-keys`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": {
        "publicKey": "pk_sandbox_a3vSGlBiRipd0Mg6tzvSxrMlhkWyTrLCGwxfoPYEsUp9Qe69",
        "privateKey": "sk_sandbox_EZ1Ysvzeb3PxPw2SfwQis8fsAWbsAjPghMrjoff0KfMhVxF0"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/merchant/my-access-keys'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Switch Account Mode

Switch the merchant's account mode between SANDBOX and PRODUCTION.

* **Endpoint**: `POST {{base-url}}/merchant/account-mode`
* **Headers**:

  ```json
  {
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Body**:

  ```json
  {
    "mode": "PRODUCTION"
  }
  ```
* **Response**:
  * **200 OK**: (Successful switch)
  * **400 Bad Request**:

    ```json
    {
      "status": false,
      "message": "Kindly complete your account verification/setup before switching account mode."
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('POST', Uri.parse('{{base-url}}/merchant/account-mode'));
  request.body = '''{
    "mode": "SANDBOX"
  }''';
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Merchant Registration

Register a new merchant account.

* **Endpoint**: `POST {{base-url}}/merchant`
* **Body**:

  ```json
  {
    "firstName": "Yemi",
    "lastName": "Alade",
    "password": "cGFzc3dvcmQ=",
    "accountNumber": "9988776633",
    "phoneNumber": "08055484569",
    "businessName": "Yemi-Alade",
    "email": "neyosoft3@mailinator.com",
    "businessType": "FINANCIAL-SERVICES",
    "sendEmail": true
  }
  ```
* **Response**:
  * **201 Created**:

    ```json
    {
      "status": true,
      "requireVerification": true,
      "message": "Your activation code has been sent to your email. It expires in 24 hours"
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var request = http.Request('POST', Uri.parse('{{base-url}}/merchant'));
  request.body = '''{
    "firstName": "Demo",
    "lastName": "User",
    "password": "password",
    "businessName": "Neyosoft",
    "phoneNumber": "+2349034514808",
    "email": "demoneyo@mailinator.com",
    "businessType": "FINANCIAL-SERVICES"
  }''';
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```


# Get Merchant Wallet

Retrieve the merchant's wallet details.

* **Endpoint**: `GET {{base-url}}/merchant/wallet`
* **Headers**:

  ```json
  {
    "Authorization": "Bearer {{vault:authorization-secret}}",
    "X-Access-Token": "{{access-token}}",
    "X-Refresh-Token": "{{refresh-token}}"
  }
  ```
* **Response**:
  * **200 OK**:

    ```json
    {
      "status": true,
      "data": {
        "id": "cbaade0f-c413-479c-b405-e40406c70a80",
        "email": "merchant1@mailinator.com",
        "bankName": "Providus Bank",
        "bankCode": "101",
        "accountName": "Samsung Limited",
        "businessName": "Samsung Limited",
        "accountNumber": "8857460982",
        "bookedBalance": 0,
        "availableBalance": 0,
        "accountReference": "gscbOelLaMy41ogFDgjgern3C7LKHnnS87TO",
        "createdAt": "2021-08-16T22:59:27.074Z",
        "updatedAt": "2021-08-16T22:59:27.074Z"
      }
    }
    ```
* **Sample Code (Dart)**:

  ```dart
  var headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
  };
  var request = http.Request('GET', Uri.parse('{{base-url}}/merchant/wallet'));
  request.headers.addAll(headers);
  http.StreamedResponse response = await request.send();
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  } else {
    print(response.reasonPhrase);
  }
  ```

***


# Code Samples

## API Code Samples for Customer and Wallet Management

Below are code samples for each endpoint in the Customer and Wallet Management API, implemented in cURL, Python, Java, JavaScript, PHP, and C#. Each sample corresponds to the respective endpoint for interacting with the API.

***

### Customer Management

#### Get All Customers

* **cURL**:

```bash
curl --request GET \
  --url '{{base-url}}/customer?page=1' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
}

response = requests.get('{{base-url}}/customer?page=1', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/customer?page=1");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
};

fetch('{{base-url}}/customer?page=1', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/customer?page=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var response = await client.GetAsync("{{base-url}}/customer?page=1");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Get Customer Details

* **cURL**:

```bash
curl --request GET \
  --url '{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
}

response = requests.get('{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
};

fetch('{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var response = await client.GetAsync("{{base-url}}/customer/1149d065-c5c9-4382-aec6-323090f31d9d");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Find Customer by Phone Number

* **cURL**:

```bash
curl --request GET \
  --url '{{base-url}}/customer/phone?phoneNumber=08030223346' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
}

response = requests.get('{{base-url}}/customer/phone?phoneNumber=08030223346', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/customer/phone?phoneNumber=08030223346");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
};

fetch('{{base-url}}/customer/phone?phoneNumber=08030223346', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/customer/phone?phoneNumber=08030223346");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var response = await client.GetAsync("{{base-url}}/customer/phone?phoneNumber=08030223346");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Update Customer Profile

* **cURL**:

```bash
curl --request PUT \
  --url '{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "firstName": "Updated"
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "firstName": "Updated"
}

response = requests.put('{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("PUT");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"firstName\": \"Updated\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff', {
    method: 'PUT',
    headers: headers,
    body: JSON.stringify({
        firstName: "Updated"
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"firstName": "Updated"}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"firstName\": \"Updated\"}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PutAsync("{{base-url}}/customer/49d4ea6d-d3dc-490c-800d-7c50b89cf8ff", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

### Wallet Management

#### Create Customer Wallet

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "bvn": "22181029312",
    "firstName": "Ridwan",
    "lastName": "Adekunle",
    "dateOfBirth": "1992-05-16",
    "phoneNumber": "08020245356",
    "address": "No 10, Adewale Ajasin University",
    "metadata": {
        "even-more": "Other data",
        "additional-data": "some more data"
    }
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "bvn": "22181029312",
    "firstName": "Ridwan",
    "lastName": "Adekunle",
    "dateOfBirth": "1992-05-16",
    "phoneNumber": "08020245356",
    "address": "No 10, Adewale Ajasin University",
    "metadata": {
        "even-more": "Other data",
        "additional-data": "some more data"
    }
}

response = requests.post('{{base-url}}/wallet', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"bvn\": \"22181029312\", \"firstName\": \"Ridwan\", \"lastName\": \"Adekunle\", \"dateOfBirth\": \"1992-05-16\", \"phoneNumber\": \"08020245356\", \"address\": \"No 10, Adewale Ajasin University\", \"metadata\": {\"even-more\": \"Other data\", \"additional-data\": \"some more data\"}}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        bvn: "22181029312",
        firstName: "Ridwan",
        lastName: "Adekunle",
        dateOfBirth: "1992-05-16",
        phoneNumber: "08020245356",
        address: "No 10, Adewale Ajasin University",
        metadata: {
            "even-more": "Other data",
            "additional-data": "some more data"
        }
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"bvn": "22181029312", "firstName": "Ridwan", "lastName": "Adekunle", "dateOfBirth": "1992-05-16", "phoneNumber": "08020245356", "address": "No 10, Adewale Ajasin University", "metadata": {"even-more": "Other data", "additional-data": "some more data"}}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"bvn\": \"22181029312\", \"firstName\": \"Ridwan\", \"lastName\": \"Adekunle\", \"dateOfBirth\": \"1992-05-16\", \"phoneNumber\": \"08020245356\", \"address\": \"No 10, Adewale Ajasin University\", \"metadata\": {\"even-more\": \"Other data\", \"additional-data\": \"some more data\"}}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Get All Wallets

* **cURL**:

```bash
curl --request GET \
  --url '{{base-url}}/wallet' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
}

response = requests.get('{{base-url}}/wallet', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
};

fetch('{{base-url}}/wallet', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var response = await client.GetAsync("{{base-url}}/wallet");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Get Customer Wallet

* **cURL**:

```bash
curl --request GET \
  --url '{{base-url}}/wallet/customer?customerId=5de468b7-de5f-414e-b948-1f2f336c3c5e' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
}

response = requests.get('{{base-url}}/wallet/customer?customerId=5de468b7-de5f-414e-b948-1f2f336c3c5e', headers=headers)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/customer?customerId=5de468b7-de5f-414e-b948-1f2f336c3c5e");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}'
};

fetch('{{base-url}}/wallet/customer?customerId=5de468b7-de5f-414e-b948-1f2f336c3c5e', {
    method: 'GET',
    headers: headers
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/customer?customerId=5de468b7-de5f-414e-b948-1f2f336c3c5e");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var response = await client.GetAsync("{{base-url}}/wallet/customer?customerId=5de468b7-de5f-414e-b948-1f2f336c3c5e");
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Credit Wallet

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/credit' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "amount": 200,
    "reference": "14kg34dqe3rkyd23wo",
    "customerId": "d818688f-50ca-4b9c-9693-ca7c6c3988ad",
    "metadata": {
        "some-data": "sample data",
        "more-data": "any value here"
    }
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "amount": 200,
    "reference": "14kg34dqe3rkyd23wo",
    "customerId": "d818688f-50ca-4b9c-9693-ca7c6c3988ad",
    "metadata": {
        "some-data": "sample data",
        "more-data": "any value here"
    }
}

response = requests.post('{{base-url}}/wallet/credit', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/credit");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"amount\": 200, \"reference\": \"14kg34dqe3rkyd23wo\", \"customerId\": \"d818688f-50ca-4b9c-9693-ca7c6c3988ad\", \"metadata\": {\"some-data\": \"sample data\", \"more-data\": \"any value here\"}}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet/credit', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        amount: 200,
        reference: "14kg34dqe3rkyd23wo",
        customerId: "d818688f-50ca-4b9c-9693-ca7c6c3988ad",
        metadata: {
            "some-data": "sample data",
            "more-data": "any value here"
        }
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/credit");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"amount": 200, "reference": "14kg34dqe3rkyd23wo", "customerId": "d818688f-50ca-4b9c-9693-ca7c6c3988ad", "metadata": {"some-data": "sample data", "more-data": "any value here"}}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"amount\": 200, \"reference\": \"14kg34dqe3rkyd23wo\", \"customerId\": \"d818688f-50ca-4b9c-9693-ca7c6c3988ad\", \"metadata\": {\"some-data\": \"sample data\", \"more-data\": \"any value here\"}}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet/credit", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Debit Wallet

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/debit' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "amount": 200,
    "reference": "34k3e4f4ek4t4",
    "customerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
    "metadata": {
        "some-data": "sample data",
        "more-data": "any value here"
    }
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "amount": 200,
    "reference": "34k3e4f4ek4t4",
    "customerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
    "metadata": {
        "some-data": "sample data",
        "more-data": "any value here"
    }
}

response = requests.post('{{base-url}}/wallet/debit', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/debit");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"amount\": 200, \"reference\": \"34k3e4f4ek4t4\", \"customerId\": \"aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050\", \"metadata\": {\"some-data\": \"sample data\", \"more-data\": \"any value here\"}}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet/debit', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        amount: 200,
        reference: "34k3e4f4ek4t4",
        customerId: "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050",
        metadata: {
            "some-data": "sample data",
            "more-data": "any value here"
        }
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/debit");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"amount": 200, "reference": "34k3e4f4ek4t4", "customerId": "aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050", "metadata": {"some-data": "sample data", "more-data": "any value here"}}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"amount\": 200, \"reference\": \"34k3e4f4ek4t4\", \"customerId\": \"aa4e9eea-d7a5-4ac2-a211-dc6d59b0c050\", \"metadata\": {\"some-data\": \"sample data\", \"more-data\": \"any value here\"}}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet/debit", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Freeze Customer Wallet

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/close' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "customerId": "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "customerId": "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"
}

response = requests.post('{{base-url}}/wallet/close', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/close");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"customerId\": \"49d4ea6d-d3dc-490c-800d-7c50b89cf8ff\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet/close', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        customerId: "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/close");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"customerId": "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"customerId\": \"49d4ea6d-d3dc-490c-800d-7c50b89cf8ff\"}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet/close", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Unfreeze Customer Wallet

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/enable' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "customerId": "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "customerId": "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"
}

response = requests.post('{{base-url}}/wallet/enable', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/enable");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"customerId\": \"49d4ea6d-d3dc-490c-800d-7c50b89cf8ff\"}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet/enable', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        customerId: "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/enable");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"customerId": "49d4ea6d-d3dc-490c-800d-7c50b89cf8ff"}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"customerId\": \"49d4ea6d-d3dc-490c-800d-7c50b89cf8ff\"}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet/enable", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Batch Credit Customer Wallets

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/batch-credit-customer-wallet' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "batchReference": "afsdfeadsfasrgasdfasd6",
    "transactions": [
        {
            "amount": 200,
            "reference": "afsdfeadsfasrgasdfas4d",
            "customerId": "1149d065-c5c9-4382-aec6-323090f31d9d"
        },
        {
            "amount": 4000,
            "reference": "afsdfeadsfasrgasd5fase",
            "customerId": "c938a018-8987-4411-97c5-e456868741e8"
        }
    ]
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "batchReference": "afsdfeadsfasrgasdfasd6",
    "transactions": [
        {
            "amount": 200,
            "reference": "afsdfeadsfasrgasdfas4d",
            "customerId": "1149d065-c5c9-4382-aec6-323090f31d9d"
        },
        {
            "amount": 4000,
            "reference": "afsdfeadsfasrgasd5fase",
            "customerId": "c938a018-8987-4411-97c5-e456868741e8"
        }
    ]
}

response = requests.post('{{base-url}}/wallet/batch-credit-customer-wallet', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/batch-credit-customer-wallet");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"batchReference\": \"afsdfeadsfasrgasdfasd6\", \"transactions\": [{\"amount\": 200, \"reference\": \"afsdfeadsfasrgasdfas4d\", \"customerId\": \"1149d065-c5c9-4382-aec6-323090f31d9d\"}, {\"amount\": 4000, \"reference\": \"afsdfeadsfasrgasd5fase\", \"customerId\": \"c938a018-8987-4411-97c5-e456868741e8\"}]}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet/batch-credit-customer-wallet', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        batchReference: "afsdfeadsfasrgasdfasd6",
        transactions: [
            {
                amount: 200,
                reference: "afsdfeadsfasrgasdfas4d",
                customerId: "1149d065-c5c9-4382-aec6-323090f31d9d"
            },
            {
                amount: 4000,
                reference: "afsdfeadsfasrgasd5fase",
                customerId: "c938a018-8987-4411-97c5-e456868741e8"
            }
        ]
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/batch-credit-customer-wallet");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"batchReference": "afsdfeadsfasrgasdfasd6", "transactions": [{"amount": 200, "reference": "afsdfeadsfasrgasdfas4d", "customerId": "1149d065-c5c9-4382-aec6-323090f31d9d"}, {"amount": 4000, "reference": "afsdfeadsfasrgasd5fase", "customerId": "c938a018-8987-4411-97c5-e456868741e8"}]}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"batchReference\": \"afsdfeadsfasrgasdfasd6\", \"transactions\": [{\"amount\": 200, \"reference\": \"afsdfeadsfasrgasdfas4d\", \"customerId\": \"1149d065-c5c9-4382-aec6-323090f31d9d\"}, {\"amount\": 4000, \"reference\": \"afsdfeadsfasrgasd5fase\", \"customerId\": \"c938a018-8987-4411-97c5-e456868741e8\"}]}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet/batch-credit-customer-wallet", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Batch Debit Customer Wallets

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/batch-debit-customer-wallet' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "batchReference": "88adsf8hssa43sefas8df8ahhjefasdff14",
    "transactions": [
        {
            "amount": 250,
            "reference": "dkfajdfsdjjjssd23sfjasdfasdkfjds12",
            "customerId": "a2c40f33-489c-480f-9d24-e2742502b85f"
        },
        {
            "amount": 30000,
            "reference": "dkfajdfsdjjjdsfjasd45fssasdkfjds20",
            "customerId": "cdf29144-10f7-4805-8389-3928050904f7"
        }
    ]
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "batchReference": "88adsf8hssa43sefas8df8ahhjefasdff14",
    "transactions": [
        {
            "amount": 250,
            "reference": "dkfajdfsdjjjssd23sfjasdfasdkfjds12",
            "customerId": "a2c40f33-489c-480f-9d24-e2742502b85f"
        },
        {
            "amount": 30000,
            "reference": "dkfajdfsdjjjdsfjasd45fssasdkfjds20",
            "customerId": "cdf29144-10f7-4805-8389-3928050904f7"
        }
    ]
}

response = requests.post('{{base-url}}/wallet/batch-debit-customer-wallet', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/batch-debit-customer-wallet");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"batchReference\": \"88adsf8hssa43sefas8df8ahhjefasdff14\", \"transactions\": [{\"amount\": 250, \"reference\": \"dkfajdfsdjjjssd23sfjasdfasdkfjds12\", \"customerId\": \"a2c40f33-489c-480f-9d24-e2742502b85f\"}, {\"amount\": 30000, \"reference\": \"dkfajdfsdjjjdsfjasd45fssasdkfjds20\", \"customerId\": \"cdf29144-10f7-4805-8389-3928050904f7\"}]}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            System.out.println(conn.getResponseMessage());
        }
    }
}
```

* **JavaScript**:

```javascript
const headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
};

fetch('{{base-url}}/wallet/batch-debit-customer-wallet', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        batchReference: "88adsf8hssa43sefas8df8ahhjefasdff14",
        transactions: [
            {
                amount: 250,
                reference: "dkfajdfsdjjjssd23sfjasdfasdkfjds12",
                customerId: "a2c40f33-489c-480f-9d24-e2742502b85f"
            },
            {
                amount: 30000,
                reference: "dkfajdfsdjjjdsfjasd45fssasdkfjds20",
                customerId: "cdf29144-10f7-4805-8389-3928050904f7"
            }
        ]
    })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error(response.statusText);
})
.then(data => console.log(data))
.catch(error => console.error(error));
```

* **PHP**:

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{{base-url}}/wallet/batch-debit-customer-wallet");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: {{access-token}}',
    'X-Refresh-Token: {{refresh-token}}',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"batchReference": "88adsf8hssa43sefas8df8ahhjefasdff14", "transactions": [{"amount": 250, "reference": "dkfajdfsdjjjssd23sfjasdfasdkfjds12", "customerId": "a2c40f33-489c-480f-9d24-e2742502b85f"}, {"amount": 30000, "reference": "dkfajdfsdjjjdsfjasd45fssasdkfjds20", "customerId": "cdf29144-10f7-4805-8389-3928050904f7"}]}');

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo $response;
} else {
    echo curl_error($ch);
}

curl_close($ch);
?>
```

* **C#**:

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("X-Access-Token", "{{access-token}}");
            client.DefaultRequestHeaders.Add("X-Refresh-Token", "{{refresh-token}}");

            var content = new StringContent(
                "{\"batchReference\": \"88adsf8hssa43sefas8df8ahhjefasdff14\", \"transactions\": [{\"amount\": 250, \"reference\": \"dkfajdfsdjjjssd23sfjasdfasdkfjds12\", \"customerId\": \"a2c40f33-489c-480f-9d24-e2742502b85f\"}, {\"amount\": 30000, \"reference\": \"dkfajdfsdjjjdsfjasd45fssasdkfjds20\", \"customerId\": \"cdf29144-10f7-4805-8389-3928050904f7\"}]}",
                Encoding.UTF8,
                "application/json"
            );

            var response = await client.PostAsync("{{base-url}}/wallet/batch-debit-customer-wallet", content);
            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
            else
            {
                Console.WriteLine(response.ReasonPhrase);
            }
        }
    }
}
```

#### Customer Batch Credit Customer Wallets

* **cURL**:

```bash
curl --request POST \
  --url '{{base-url}}/wallet/customer-batch-credit-customer-wallet' \
  --header 'Content-Type: application/json' \
  --header 'X-Access-Token: {{access-token}}' \
  --header 'X-Refresh-Token: {{refresh-token}}' \
  --data '{
    "batchReference": "88adsf8hasefas8df8ahhjefasdff8",
    "customerId": "c938a018-8987-4411-97c5-e456868741e8",
    "recipients": [
        {
            "amount": 180,
            "reference": "dkfajdfsdjjjdsfjasdfasdkfjds9",
            "customerId": "de304d11-ca4e-491f-8851-9ca09a0084a3"
        },
        {
            "amount": 500,
            "reference": "dkfajdfsdjjjdsfjasdfasdkfjds10",
            "customerId": "f75774b0-6f99-4029-92a9-2dfe7e15d3f0"
        }
    ]
}'
```

* **Python**:

```python
import requests

headers = {
    'X-Access-Token': '{{access-token}}',
    'X-Refresh-Token': '{{refresh-token}}',
    'Content-Type': 'application/json'
}

data = {
    "batchReference": "88adsf8hasefas8df8ahhjefasdff8",
    "customerId": "c938a018-8987-4411-97c5-e456868741e8",
    "recipients": [
        {
            "amount": 180,
            "reference": "dkfajdfsdjjjdsfjasdfasdkfjds9",
            "customerId": "de304d11-ca4e-491f-8851-9ca09a0084a3"
        },
        {
            "amount": 500,
            "reference": "dkfajdfsdjjjdsfjasdfasdkfjds10",
            "customerId": "f75774b0-6f99-4029-92a9-2dfe7e15d3f0"
        }
    ]
}

response = requests.post('{{base-url}}/wallet/customer-batch-credit-customer-wallet', headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print(response.reason)
```

* **Java**:

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("{{base-url}}/wallet/customer-batch-credit-customer-wallet");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("X-Access-Token", "{{access-token}}");
        conn.setRequestProperty("X-Refresh-Token", "{{refresh-token}}");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        String jsonInputString = "{\"batchReference\": \"88adsf8hasefas8df8ahhjefasdff8\", \"customerId\": \"c938a018-8987-4411-97c5-e456868741e8\", \"recipients\": [{\"amount\": 180, \"reference\": \"dkfajdfsdjjjdsfjasdfasdkfjds9\", \"customerId\": \"de304d11-ca4e-491f-8851-9ca09a0084a3\"}, {\"amount\": 500, \"reference\": \"dkfajdfsdjjjdsfjasdfasdkfjds10\", \"customerId\": \"f75774b0-6f99-4029-92a9-2dfe7e15d3f0\"}]}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in
```


# API Reference

Dive into the specifics of each API endpoint by checking out our complete documentation.

## API Reference

### Introduction

Welcome to the API Reference for \[Your API Name]. This page provides detailed information about the available endpoints, request methods, parameters, and response formats for integrating with our APIs.

### Authentication

Before making requests to our API, ensure proper authentication. Refer to the Authentication section for details on how to include authentication credentials in your requests.

### Base URL

The base URL for all API endpoints is: `https://api.example.com/v1`

### Available Endpoints

**Endpoint**

* **Path:** `/endpoint/path`
* **HTTP Method:** `GET` (or other applicable methods)

**Request Parameters**

List and describe the parameters required for this endpoint:

* `parameter1`: Description of the parameter.
* `parameter2`: Description of the parameter.

**Example Request**

Provide an example of how to structure the API request:

```http
GET https://api.example.com/v1/endpoint/path?parameter1=value1&parameter2=value2
```

**Response**

Describe the structure of the response, including possible status codes and response body:

```json
jsonCopy code{
  "key1": "value1",
  "key2": "value2"
}
```

**Example Response**

Provide an example of a typical API response:

```json
jsonCopy code{
  "status": "success",
  "data": {
    "key1": "value1",
    "key2": "value2"
  }
}
```

### Authentication

To authenticate your requests, include the following headers in your API calls:

* `Authorization`: Bearer \[Your Access Token]
* Other authentication headers if applicable

### Rate Limiting

Our API has rate limits to ensure fair usage. Refer to the [Rate Limiting](https://chat.openai.com/#rate-limiting) section for details on the allowed number of requests.

### Error Handling

Review the [Error Handling](https://chat.openai.com/#error-handling) section for information on how errors are communicated and how to troubleshoot common issues.

### Conclusion

Thank you for exploring our API Reference. If you have any questions or need assistance, please contact our support team at \[<appsupport@providusbank.com>].

Happy coding!


# Authentication

## Authentication

To make authorized requests to our API, you need to include the appropriate authentication credentials in your requests. Currently, we support the following authentication methods:

### 1. API Key Authentication

Include your API key in the request headers using the following format:

```http
Authorization: api-key YOUR_API_KEY
```


# OAuth 2.0 Authentication

Subpage 2: Rate Limiting


# Error Handling

Our API communicates errors through standard HTTP status codes and provides detailed error messages in the response body. Here are common HTTP status codes and their meanings:

### Common HTTP Status Codes

* **200 OK:** The request was successful.
* **400 Bad Request:** The request was malformed or invalid.
* **401 Unauthorized:** Authentication failed or missing credentials.
* **404 Not Found:** The requested resource was not found.
* **429 Too Many Requests:** Exceeded rate limits.

### Handling Errors

When an error occurs, the API response includes a JSON object with an `error` field containing the error message. Example:

```json
{
  "error": "Invalid API key. Please provide a valid key."
}
```


# Data Formats

Our API supports multiple data formats for both request payloads and response bodies. Here are the primary formats:

### 1. JSON (Default)

* **Request:** Ensure your request payload is in valid JSON format.
* **Response:** All responses are in JSON format by default.

Example Request:

```json
{
  "key1": "value1",
  "key2": "value2"
}
```

### 2. Form-Data

For certain endpoints, you may need to send data using the `application/x-www-form-urlencoded` format.

Example Request:

```http
httpCopy codePOST /endpoint
Content-Type: application/x-www-form-urlencoded

key1=value1&key2=value2
```

### 3. File Uploads

If your application requires file uploads, use the `multipart/form-data` format.

Example Request:

```http
httpCopy codePOST /upload
Content-Type: multipart/form-data

file=@/path/to/file.txt
```

Make sure to check the documentation for each endpoint to determine the required data format.

### 4. Pagination

For resource-intensive endpoints that return large sets of data, our API supports pagination. This allows you to retrieve a subset of data in each request.

### Query Parameters

* **`page`:** Specifies the page number (e.g., `page=1`, `page=2`).
* **`per_page`:** Specifies the number of items per page (e.g., `per_page=10`).

### Example Request

```http
GET /large-data-endpoint?page=2&per_page=20
```

### Example Response

```json
jsonCopy code{
  "data": [
    // ...items for page 2
  ],
  "meta": {
    "page": 2,
    "per_page": 20,
    "total_items": 100
  }
}
```


# Sandbox

Welcome to Our API Playground!

#### Overview

Welcome to our API Playground, where you can experiment and test our APIs using industry-standard tools. This space is designed to help developers, whether you're integrating our APIs into your applications or exploring the possibilities of our platform.

#### What is the API Playground?

Our API Playground is a virtual space where you can interact with our APIs using popular tools such as Postman, Newman, Swagger, and Pact. It allows you to:

* Explore API Endpoints: Understand the capabilities of our APIs by exploring available endpoints.
* Test API Requests: Use tools like Postman and Newman to make sample API requests and observe responses.
* Access Documentation: View detailed API documentation, including Swagger specifications.
* Implement Contract Testing: Utilize Pact for consumer-driven contract testing to ensure compatibility.

#### Key Features

1. **Tool Integration:** Use Postman for a user-friendly interface, Newman for command-line automation, Swagger for comprehensive documentation, and Pact for contract testing.
2. **Documentation Access:** Explore detailed API documentation directly within the Swagger UI.
3. **Interactive Testing:** Leverage the interactive capabilities of tools like Postman to make requests and receive immediate feedback.
4. **Contract Testing:** Implement Pact for ensuring compatibility between API consumers and providers.

#### How to Get Started

1. **Tool Setup:**
   * Install [Postman](https://www.postman.com/downloads/), [Newman](https://www.npmjs.com/package/newman), and other relevant tools.
2. **Explore Endpoints:**
   * Use Postman to explore available endpoints and understand their functionality.
3. **Test API Requests:**
   * Make sample API requests using Postman or Newman to observe responses.
4. **Access Swagger Documentation:**
   * View comprehensive API documentation through the Swagger UI.
5. **Contract Testing:**
   * Explore Pact for implementing consumer-driven contract testing.
6. **Provide Feedback:**
   * Have suggestions or encountered an issue? Share your thoughts through Postman or other relevant feedback channels.

#### Important Notes

* **Authentication:** Some endpoints may require authentication. Refer to the documentation for details on how to authenticate your requests using tools like Postman.
* **Feedback Matters:** Your feedback using these tools helps us improve our APIs. Don't hesitate to let us know how we can enhance your experience.

#### Start Exploring!

Begin your API exploration journey using Postman, Newman, Swagger, Pact, and other tools in our API Playground. If you have any questions or need assistance, feel free to reach out to our support team.


# Advanced Setup of Postman for API Sandbox

## Introduction

Postman is a feature-rich tool for API development and testing. This guide provides an in-depth walkthrough of setting up Postman for interaction with your API Sandbox.

## Prerequisites

1. **Download and Install Postman:**
   * [Download Postman](https://www.postman.com/downloads/)
2. **Access to API Sandbox:**
   * Obtain the API endpoint, request methods, and any required authentication details for your Sandbox environment.

## Steps

### 1. Install Postman

Download and install Postman on your machine following the [official installation guide](https://learning.postman.com/docs/getting-started/installation-and-updates/).

### 2. Open Postman

Launch Postman on your machine.

### 3. Create a New Request

* Click on the "New" button to create a new request.
* Enter a name for your request and create a new collection if necessary.

### 4. Configure Request Details

* Set the request type (GET, POST, PUT, DELETE, etc.).
* Enter the Sandbox API endpoint in the request URL field.

### 5. Authentication

If your Sandbox requires authentication:

* Navigate to the "Authorization" tab.
* Choose the appropriate authentication type:
  * **Basic Auth:**
    * Username: `your_username`
    * Password: `your_password`
  * **Bearer Token:**
    * Token: `your_access_token`
  * **OAuth 2.0:**
    * Configure OAuth settings as provided.

### 6. Headers and Body

* Navigate to the "Headers" tab.
* Add any necessary headers for your API:
  * **Sample Headers:**
    * `Content-Type: application/json`
    * `Authorization: Bearer your_access_token`
* Switch to the "Body" tab to input request parameters or payload if applicable.
  * Choose the appropriate data format (e.g., JSON, form-data).
  * Input request parameters or payload.
  * **Sample JSON Body:**

    ```json
    {
      "key1": "value1",
      "key2": "value2"
    }
    ```

### 7. Pre-request Scripts

Utilize pre-request scripts for dynamic data generation or environment setup:

* Navigate to the "Pre-request Scripts" tab.
* Write scripts in JavaScript to manipulate variables or set up dynamic data.

### 8. Tests

Write tests to validate the API response:

* Navigate to the "Tests" tab.
* Write JavaScript tests to verify status codes, response body, or any custom validation.

### 9. Environments

Use environments to manage different configurations:

* Click on the gear icon in the top right.
* Manage environments for various stages (e.g., development, staging, production).
* Utilize environment variables in your requests.

### 10. Monitor and Automation

Explore Postman's monitoring and automation capabilities:

* Set up monitors to regularly run and test your APIs.
* Create collections and use Newman for command-line automation.

### 11. Share and Collaborate

Share your collections with teammates:

* Click on "Share" to generate a public link or collaborate within teams.

## Conclusion

You've now set up Postman with advanced features for interacting with your API Sandbox. Customize the provided sample parameters according to your API testing and development needs.

Happy testing!




---

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

