Kringle - Release/25.04

by Vamsi Krishna

**Published On **: 04 June 2025
**Stage Deployment On: **30 May 2025 **Production Go-Live On: **The release date will be communicated by account manager.

The following APIs are impacted by this release. Changes may include new parameters, updated logic, or behavior enhancements. Please refer to the corresponding API documentation links provided alongside each entry for complete details.

URL Endpoint

API Name

Current Payload

New Payload

/v1/payments

Create International Wire (Swift) Transfer

{

"paymentType": "CREDIT",
"paymentRail": "SWIFT",
"amount": 10,
"originator": {
"accountId": 123456
},
"recipient": {
"accountId": "456789",
"name": "David Wise",
"accountNumber": 950003434343,
"accountType": "CHECKING",
"recipientType": "INDIVIDUAL",
"address": {
"line1": "123 Main Street",
"city": "Park City",
"stateCode": "CA",
"countryCode": "US",
"postalCode": 85281
},
"bankInformation": {
"swiftCode": "BUKBGB22"
}
}
}

{

  "paymentType": "CREDIT",
  "paymentRail": "SWIFT",
  "amount": 10,
  "originator": {
    "accountId": 123456
  },
  "recipient": {
    "accountId": "456789",
    "name": "David Wise",
    "accountNumber": 950003434343,
    "accountType": "CHECKING",
    "recipientType": "INDIVIDUAL",
    "address": {
      "line1": "123 Main Street",
      "city": "Park City",
      "stateCode": "CA",
      "countryCode": "US",
      "postalCode": 85281
    },
    "bankInformation": {
      "swiftCode": "BUKBGB22",
      "agent": {
        "name": "Citibank Luxembourg",
        "identifier": "CITILULX",
        "address": [   "31 Z.A. Bourmicht",
  "L-8070 Bertrange"],
        "country": "LU",
        "stateOrProvince": "Luxembourg District",
        "city": "Bertrange",
        "postalCode": "8070"
      }
    }
  }
}

**Published On **: 12 May 2025
**Stage Deployment On: **12 May 2025 **Production Go-Live On: **The release date will be communicated by account manager.

The following APIs are impacted by this release. Changes may include new parameters, updated logic, or behavior enhancements. Please refer to the corresponding API documentation links provided alongside each entry for complete details.

API GroupAPI NameExisting EndpointNew EndpointCurrent PayloadNew PayloadCurrent ResponseNew Response
LoanPre Closure Loanv1/loans/{loanId}/transactions?command=foreclosurev1/loans/\{loanId}?command=preclosure{
"transactionDate":"29 March 2025",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"note":"PreClosing Loan"
}
{
"transactionDate":"29 March 2025",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"preclosureReasonCodeId": 3100,
}
{
"loanId": 3106,
"changes": {
"transactionDate": [
2025,
3,
30
],
"transactions": [
85900
],
"eventAmount": -1000,
"note": "fsdfdsf"
}
}
{
"loanId": 3106,
"changes": {
"transactionDate": [
2025,
3,
30
],
"transactions": [
85900
],
"eventAmount": -1000,
"preclosureReason" : { -- NEW
"id": 4001,
"name": "Bankruptcy",
"codeName": "LOAN_PRECLOSURE_REASON"
}
}
}
LoanLoan PreClosure Templatev1/loans/{loanId}/transactions/template?command=foreclosure&dateFormat=dd+MMMM+yyyy&locale=en&transactionDate=30+March+2025v1/loans/{loanId}/transactions/template?command=preclosure&dateFormat=dd+MMMM+yyyy&locale=en&transactionDate=30+March+2025NANANA...

"loanPreClosureReasonOptions": [
{
"id": 3001,
"name": "Bankruptcy",
"position": 0,
"active": true,
"mandatory": false,
"systemDefined": true,
"parentId": 0,
"codeName": "LOAN_PRECLOSURE_REASON",
"isMasked": false
},
{
"id": 3002,
"name": "Job loss",
"position": 1,
"active": true,
"mandatory": false,
"systemDefined": true,
"parentId": 0,
"codeName": "LOAN_PRECLOSURE_REASON",
"isMasked": false
},

.
.]
...
LoanLoan Write-off/v1/loans/{loanId}/transactions?command=writeoffv1/loans/\{loanId}?command=writeoff{
"transactionDate":"30 March 2025",
"note":"Testing",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
{
"transactionDate":"29 March 2025",
"locale":"en",
"dateFormat":"dd MMMM yyyy",
"writeoffReasonCodeId": 4100,
}
{
"id": "85896",
"officeId": 1,
"clientId": 16601,
"loanId": 3104,
"resourceId": 85896,
"changes": {
"transactionDate": "30 March 2025",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"status": {
"id": 601,
"code": "loanStatusType.closed.written.off",
"value": "Closed (written off)",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": true,
"closedRescheduled": false,
"closed": true,
"overpaid": false
},
"closedOnDate": "30 March 2025",
"writtenOffOnDate": "30 March 2025",
}
}
{
"id": "85896",
"officeId": 1,
"clientId": 16601,
"loanId": 3104,
"resourceId": 85896,
"changes": {
"transactionDate": "30 March 2025",
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"status": {
"id": 601,
"code": "loanStatusType.closed.written.off",
"value": "Closed (written off)",
"pendingApproval": false,
"waitingForDisbursal": false,
"active": false,
"closedObligationsMet": false,
"closedWrittenOff": true,
"closedRescheduled": false,
"closed": true,
"overpaid": false
},
"closedOnDate": "30 March 2025",
"writtenOffOnDate": "30 March 2025",
"writeoffReason" : { -- NEW
"id": 4001,
"name": "Legal Settlement or Court Order",
"codeName": "LOAN_WRITEOFF_REASON"
}
}
}
LoanLoan PreClosure Templatev1/loans/{loanId}/transactions/template?command=writeoffv1/loans/\{loanId}/transactions/template?command=writeoffNANANA...

"loanWriteoffReasonOptions": [
{
"id": 4001,
"name": "Legal Settlement or Court Order",
"position": 0,
"active": true,
"mandatory": false,
"systemDefined": true,
"parentId": 0,
"codeName": "LOAN_WRITEOFF_REASON",
"isMasked": false
},
{
"id": 4002,
"name": "Government Loan Waiver Programs",
"position": 1,
"active": true,
"mandatory": false,
"systemDefined": true,
"parentId": 0,
"codeName": "LOAN_WRITEOFF_REASON",
"isMasked": false
},

.
.]
...

Notes API's

Notes API to support different entities and different entity_note_types

EntityNote TypeAction
CLIENT1.clientUPDATE,
DELETE
APPROVE,
REJECT,
REVIEW,
VERIFY
SUSPICIOUS_CLIENT_AUDIT1.ofac.checkOFAC_CHECK
SAVINGS_ACCOUNT1.review

2.block- NEW

3.blockAmount- NEW

4.close- NEW
SUSPEND,
REVIEW,
BLOCK,
UNBLOCK,
BLOCK_DEBIT,
UNBLOCK_DEBIT,
BLOCK_CREDIT,
UNBLOCK_CREDIT,
CLOSE,
HOLD_AMOUNT,
RELEASE_AMOUNT
WITHDRAW
SAVINGS_TRANSACTION1.reviewREVIEW
LOAN1.loan

2.approval - NEW

3.rejection - NEW

4.preclosure - NEW

5.writeoff - NEW
UPDATE
APPROVE
REJECT
REVIEW
WAIVE
WRITE_OFF
PRECLOSE
LOAN_TRANSACTIONreviewREVIEW
GROUPreviewREVIEW
DEBIT_CARDreview- NEW

suspend- NEW

block- NEW

unblock- NEW
REVIEW
SUSPEND
BLOCK
UNBLOCK
CREDIT_CARDreview- NEW

suspend- NEW

block- NEW

unblock- NEW
REVIEW
SUSPEND
BLOCK
UNBLOCK
CARD_AUTHORIZATIONreviewREVIEW
SHARE_ACCOUNTreviewREVIEW
DISPUTEdispute

approve - NEW

reject - NEW

adjust - NEW
REVIEW
APPROVE
REJECT
ADJUST
COMPLIANCE_REVIEWcompliancereview

approve - NEW

reject - NEW
REVIEW
APPROVE
REJECT

New APIs

POST API

API NAMEMethodURL EndpointDescription
Create notePOST/{resourceType}/{resourceId}/notes?actionAlong with the notes Payload, BO should send the m_suspicious_client_audit's id in the payload, which means that the OFAC note is added to specific audit.

Request

PayloadDescription
Current{
"note":"False positive DOB non-match."
}
No Changes

Response

Status CodeCurrent ResponseNew Response
200{
"id": "3179",
"officeId": 1,
"clientId": 16601,
"resourceId": 3179
}
{
"id": "3179",
"officeId": 1,
"resourceId": 3179,
"entityType": "client",
"entityId": 16601,
"actionType": "ofac.check"

}

GET API

API NameMethodEndpoint
Get NotesGETOne Single API to fetch all Entity Notes
/{resourceType}/{resourceId}/notes

Response

Status CodeCurrent ResponseNew Response
200[{
"id": 3179,
"clientId": 16601,
"noteType": {
"id": 1200,
"code": "ofac.check",
"value": "OFAC check note"
},
"note": "False positive DOB non-match.",
"createdById": 9500,
"createdByUsername": "balajibouser",
"createdOn": "2025-02-27 17:18:58",
"updatedById": 9500,
"updatedByUsername": "balajibouser",
"updatedOn": "2025-02-27 17:18:58",
"cardAuthorizationId": 0,
"cardId": 0
}, {
"id": 2983,
"clientId": 16601,
"noteType": {
"id": 100,
"code": "ofac.check",
"value": "OFAC check note"
},
"note": "Blocked this client",
"createdById": 1,
"createdByUsername": "admin",
"createdOn": "2025-02-13 10:18:15",
"updatedById": 1,
"updatedByUsername": "admin",
"updatedOn": "2025-02-13 10:18:15",
"cardAuthorizationId": 0,
"cardId": 0
}]
[{
"id": 3179,
"entityType": {
"id": 1200,
"code": "client",
"value": "clients"
},
"entityId": 16601,
"actionType": {
"id": 1200,
"code": "ofac.check",
"value": "OFAC check note"
},
"note": "False positive DOB non-match."
}, {
"id": 2983,
"entityType": "client",
"entityId": 16601,
"actionType": {
"id": 100,
"code": "client",
"value": "OFAC check note"
},
"note": "Blocked this client"
}]

Add Reason codes for : 1. Block Account, 2. Block Amount & 3. Close Account

APIs Undergoing Change

Get API - Account Block/ Account Close / Amount Block Template

URL Endpoint





Description

There is no changes required in the API. Pass the query parameters name.
The below are the Code Name:
ACCOUNT_BLOCK_REASON
AMOUNT_BLOCK_REASON
ACCOUNT_CLOSE_REASON

Request
No Changes

Status CodeNew Section in Response Proposed Response Message/Description/Error MessageDescription
Current...

"savingsAccountBlockReasonOptions": [
{
"id": 3001,
"name": "KYC Non-Compliance",
"position": 0,
"active": true,
"mandatory": false,
"systemDefined": true,
"parentId": 0,
"codeName": "ACCOUNT_BLOCK_REASON",
"isMasked": false
},
{
"id": 3002,
"name": "Suspicious Transactions",
"position": 1,
"active": true,
"mandatory": false,
"systemDefined": true,
"parentId": 0,
"codeName": "ACCOUNT_BLOCK_REASON",
"isMasked": false
},

.
.]
...
New section savingsAccountBlockReasonOptions.

Will be fetched from M_CODE and MCODE Values Table.

POST API - Blocking Account

URL Endpoint

Request

Current PayloadNew PayloadDescription
Current{
"reason":"dgfgdfg"
}
{
"blockReasonCodeId": 5100,
}
reason code - will be fetched in template and used here.

Response

Status CodeCurrent ResponseNew ResponseDescription
200{
"id": "4865",
"officeId": 1,
"clientId": 5139,
"savingsId": 4865,
"resourceId": 4865,
"changes": {
"subStatus": {
"id": 400,
"code": "SavingsAccountSubStatusEnum.block",
"value": "Block",
"none": false,
"inactive": false,
"dormant": false,
"escheat": false,
"block": true,
"blockCredit": false,
"blockDebit": false
}
}
}
{
"id": "4865",
"officeId": 1,
"clientId": 5139,
"savingsId": 4865,
"resourceId": 4865,
"changes": {
"subStatus": {
"id": 400,
"code": "SavingsAccountSubStatusEnum.block",
"value": "Block",
"none": false,
"inactive": false,
"dormant": false,
"escheat": false,
"block": true,
"blockCredit": false,
"blockDebit": false
},
"blockReason" : { -- NEW
"id": 3002,
"name": "Suspicious Transactions",
"codeName": "ACCOUNT_BLOCK_REASON"
}
}

}
New Section blockReason will be added

POST API - Blocking/Hold Amount

Request

Current PayloadNew PayloadDescription
Current{
"reference":"Hold $45",
"transactionAmount":45
}
{
"transactionAmount":45
"holdAmountReasonCodeId": 6100
}
reason code - will be fetched in template and used here.

Response

Status CodeCurrent ResponseNew ResponseDescription
200{
"id": "265",
"resourceId": 265
}
{
"id": "265",
"resourceId": 265,
"changes": {
"savingsAmountOnHold": 45, -- NEW
"blockAmountReason" : { -- NEW
"id": 3002,
"name": "Suspicious Transactions",
"codeName": "AMOUNT_BLOCK_REASON"
}
}

}
New Section blockReason will be added

POST API - Closing Account

URL Endpointv1/savingsaccounts/4865?command=close

Request

Current PayloadNew PayloadDescription
Current{
"closedOnDate":"01 April 2025",
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"withdrawBalance":false,
"postInterestValidationOnClosure":true,
"ignoreNegativeBalance":false,
"paymentTypeId":1
}

or

{
"closedOnDate":"01 April 2025",
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"withdrawBalance":true,
"postInterestValidationOnClosure":true,
"ignoreNegativeBalance":false,
"paymentTypeId":1
}
{
"closedOnDate":"01 April 2025",
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"withdrawBalance":false,
"postInterestValidationOnClosure":true,
"ignoreNegativeBalance":false,
"paymentTypeId":1
"closeReasonCodeId": 5100
}
reason code - will be fetched in template and used here.

Response

Status CodeCurrent ResponseNew ResponseDescription
200{
"id": "1195",
"officeId": 1,
"clientId": 1798,
"savingsId": 1195,
"resourceId": 1195,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"closedOnDate": "01 April 2025",
"status": "CLOSED"
}
}
{
"id": "1195",
"officeId": 1,
"clientId": 1798,
"savingsId": 1195,
"resourceId": 1195,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"closedOnDate": "01 April 2025",
"status": "CLOSED",
"closeReason" : { -- NEW
"id": 6002,
"name": "Suspicious Transactions",
"codeName": "ACCOUNT_CLOSE_REASON"
}
}
}
New Section closeReason will be added
403{
"developerMessage": "Request was understood but caused a domain rule violation.",
"httpStatusCode": "403",
"defaultUserMessage": "Errors contain reason for domain rule violation.",
"userMessageGlobalisationCode": "validation.msg.domain.rule.violation",
"errors": [
{
"developerMessage": "Please do a post interest on the closing date",
"defaultUserMessage": "Please do a post interest on the closing date",
"userMessageGlobalisationCode": "error.msg.postInterest.notDone",
"parameterName": "id",
"value": null,
"args": []
}
]
}

POST API - Schedule Closing Account

URL Endpointv1/savingsaccounts/4865?command=scheduleclose

Request

Current PayloadNew Payload
Current{
"closedOnDate":"03 April 2025",
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"withdrawBalance":true,
"postInterestValidationOnClosure":true,
"paymentTypeId":1,
"reason":"Closing due to Suspicious Transactions"
}
{
"closedOnDate":"03 April 2025",
"dateFormat":"dd MMMM yyyy",
"locale":"en",
"withdrawBalance":true,
"postInterestValidationOnClosure":true,
"paymentTypeId":1,
"closeReasonCodeId": 5100
}

Response

Current ResponseNew Response
200{
"id": "1195",
"officeId": 1,
"clientId": 1798,
"savingsId": 1195,
"resourceId": 1195,
"changes": {
"locale": "en",
"dateFormat": "dd MMMM yyyy",
"closedOnDate": "01 April 2025",
"status": "CLOSED"
}
}
{
"id": "17364",
"officeId": 1,
"clientId": 18712,
"savingsId": 17364,
"resourceId": 17364,
"changes": {
"subStatus": {
"id": 400,
"code": "SavingsAccountSubStatusEnum.block",
"value": "Block",
"none": false,
"inactive": false,
"dormant": false,
"escheat": false,
"block": true,
"blockCredit": false,
"blockDebit": false
},
"closeReason": {
"id": 7779,
"name": "KYC Non-Compliance",
"codeName": "ACCOUNT_CLOSE_REASON"
}
}
}

NEW API - Cancel Switch Classification

URL Endpoint/v1/clients/{clientId}?command=cancelSwitchclassification
Request Payload{
"switchClassificationRequestId": 651
}
Response{
"id": "193",
"clientId": 193,
"resourceId": 193,
"data": {
"cancelledClassificationId": 4867,
"oldClassificationId": 4868
}
}

March Release Notes

by Vamsi Krishna
Hello Everyone, Please, find the release notes!

This document outlines upcoming changes to **Mbanq’s APIs**, which will take effect **from 15th March 2025**. These updates are in compliance with the **Sponsor Bank’s new guidelines** on client information sharing. As part of this mandate, specific parameters must be transmitted to the Sponsor Bank **on a daily basis**.

### 📅 Key Dates

* **15th March 2025** – Mandatory go-live date for all platforms
* **3rd March 2025** – Sandbox availability for testing

### 🚨 Affected APIs

The following APIs will be updated. For each, the corresponding API documentation link is provided:

| API Group                             | API Document Link                                                                                                                        |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **AUTH API**                          | [https://apidocs.cloud.mbanq.com/reference/requestaccesstoken](https://apidocs.cloud.mbanq.com/reference/requestaccesstoken)             |
| **Get Client Template API**           | [https://apidocs.cloud.mbanq.com/reference/getclienttemplate](https://apidocs.cloud.mbanq.com/reference/getclienttemplate)               |
| **Create Client API**                 | [https://apidocs.cloud.mbanq.com/reference/createclient](https://apidocs.cloud.mbanq.com/reference/createclient)                         |
| **Edit Client API**                   | [https://apidocs.cloud.mbanq.com/reference/updateclient](https://apidocs.cloud.mbanq.com/reference/updateclient)                         |
| **Get Client API**                    | [https://apidocs.cloud.mbanq.com/reference/getclientbyid](https://apidocs.cloud.mbanq.com/reference/getclientbyid)                       |
| **Create Client Document Record API** | [https://apidocs.cloud.mbanq.com/reference/createclientidentifier-1](https://apidocs.cloud.mbanq.com/reference/createclientidentifier-1) |
| **Edit Client Document Record API**   | [https://apidocs.cloud.mbanq.com/reference/editclientidentifier](https://apidocs.cloud.mbanq.com/reference/editclientidentifier)         |
| **List Client Document Record API**   | [https://apidocs.cloud.mbanq.com/reference/listclientidentifiers](https://apidocs.cloud.mbanq.com/reference/listclientidentifiers)       |

This document provides a comparison between the **existing payload** and the **updated payload**, clearly highlighting the changes made. The goal is to ensure clarity on how the **data structure has evolved** and what **modifications** have been implemented.

***

### 👥 Impact of API Usage on Clientele Base

#### 🆕 New Clients

The updated APIs will be used to onboard new customers to the platform, ensuring they are integrated using the most **current data structure and functionality**.

#### ♻️ Existing Clients

For customers **onboarded on and after 1st January 2025**, the platform will:

* Share an **XLS** or **JSON** file containing the relevant client data with the **Mbanq team**
* The Mbanq team will **manually update** the records in the system
* This ensures **legacy customer data aligns** with the new API structure

***

### 1. 🔐 AUTH API

* **Affected API Endpoint**: `/oauth/token`  
* **Method**: `POST`  
* **Type of Change**: Modification  
* **API Doc**: *Request Access Token*  
* **Note**: Passing headers in the AUTH API is **only necessary** if the user credentials are stored and managed on **Mbanq**.

#### 📝 Description of Change

The **IP address** and **device identifier** (such as **device ID** or **browser fingerprint**) of the devices (mobile or system) used by end customers must be **captured and sent** using this API **each time** the user logs in or authenticates.

<table>
  <thead>
    <tr>
      <th>Description</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>New Headers</td>
      <td>
        X-FORWARDED-FOR : 222.12.211.12 -- New<br />
        X-DEVICE-FINGERPRINT : 09BD47A5-9380-40E3-AFF8-592D5E433 -- New
      </td>
    </tr>
  </tbody>
</table>

#### Definitions

| Field                | Type   | Optional | Description                                                                                                                                                                                                                                                                                                             |
| -------------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| X-FORWARDED-FOR      | string | required | The IP address refers to the numerical label assigned to the device used during the account opening process. It identifies the device's location on a network and is used for tracking and verifying the origin of the account activity.                                                                                |
| X-DEVICE-FINGERPRINT | string | required | A device ID/browser fingerprint is a unique identifier generated by analyzing various attributes of a user's browser and device configuration. The resulting fingerprint is a single, distinctive string that represents the combination of these attributes, allowing for the identification of the browser or device. |

***

### 2. Get Client Template

**Affected API Endpoint(s):** `/v1/clients/template`\
**Method:** `GET`\
**Type of Change:** Modification\
**API Doc:** *Create Client*

#### Description of Change

When adding a new client, their occupation or designation must be captured. The selection should be made from a predefined list of occupations/designations. If the provided occupation does not match any value in the predefined list, it should be categorized as **"Others"**.

<table>
  <thead>
    <tr>
      <th>Status Code</th>
      <th>Sample Response</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>200</td>
      <td>
        {
          "clientOccupationOptions": [ ---New
            {
              "id": 10013,
              "name": "Sales Executive",
              "position": 0,
              "description": "",
              "active": true,
              "mandatory": false,
              "systemDefined": false,
              "parentId": 0,
              "codeName": "Occupation",
              "isMasked": false
            },
            {
              "id": 10014,
              "name": "Marketing Executive",
              "position": 0,
              "description": "",
              "active": true,
              "mandatory": false,
              "systemDefined": false,
              "parentId": 0,
              "codeName": "Occupation",
              "isMasked": false
            },
            {
              "id": 10015,
              "name": "Professor",
              "position": 0,
              "description": "",
              "active": true,
              "mandatory": false,
              "systemDefined": false,
              "parentId": 0,
              "codeName": "Occupation",
              "isMasked": false
            },
            {
              "id": 10015,
              "name": "Driver",
              "position": 0,
              "description": "",
              "active": true,
              "mandatory": false,
              "systemDefined": false,
              "parentId": 0,
              "codeName": "Occupation",
              "isMasked": false
            },
            {
              "id": 10015,
              "name": "Others",
              "position": 0,
              "description": "",
              "active": true,
              "mandatory": false,
              "systemDefined": false,
              "parentId": 0,
              "codeName": "Occupation",
              "isMasked": false
            }
          ]
        }
      </td>
    </tr>
  </tbody>
</table>

### 3. Create Client API

**Affected API Endpoint:** `/v1/clients`\
**Method:** `POST`\
**Type of Change:** Modification\
**API Doc:** *Create Client*

#### Description of Change

The client’s occupation needs to be captured upon onboarding a new client. The IP address and device identifier (device ID or browser fingerprint) of the devices (mobile or system) used by end customers must be captured and sent using this API each time the end client is onboarding either via mobile app or browser.

<table>
  <thead>
    <tr>
      <th>Description</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>New Headers</td>
      <td>
        X-FORWARDED-FOR : 222.12.211.12 -- New<br />
        X-DEVICE-FINGERPRINT : 09BD47A5-9380-40E3-AFF8-592D5E433 -- New
      </td>
    </tr>
  </tbody>
</table>

#### Definitions

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>New Payload</td>
      <td>
        <pre>
        {
          "address": [],
          "familyMembers": [],
          "officeId": 3,
          "isStaff": true,
          "staffId": null,
          "legalFormId": 1,
          "firstname": "john",
          "lastname": "doe",
          "occupationId": 31, // NEW
          "active": false,
          "dateFormat": "dd MMMM yyyy",
          "activationDate": "18 February 2025",
          "submittedOnDate": "18 February 2025",
          "savingsProductId": null
        }
        </pre>
      </td>
    </tr>
  </tbody>
</table>

***

### 4. Edit Client API

**Affected API Endpoint:** `/v1/clients/{clientId}`\
**Method:** `PUT`\
**Type of Change:** Modification\
**API Doc:** *Update Client*

#### Description of Change

The client’s occupation needs to be captured upon editing/updating the personal information of a client if the occupation is changed.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>New Payload</td>
      <td>
        <pre>
        {
          "legalFormId": 1,
          "firstname": "john",
          "lastname": "doe",
          "occupationId": 31, -- New
          "emailAddress": "[[email protected]](mailto:[email protected])",
          "mobileCountryCode": "+1",
          "mobileNo": "9999888777",
          "dateOfBirth": "05 May 1993",
          "submittedOnDate": "29 January 2025",
          "activationDate": "29 January 2025",
          "isStaff": false,
          "isOptedForMLAStatus": false,
          "currentMLAStatus": "",
          "genderId": 634,
          "clientNonPersonDetails": {
            "incorpValidityTillDate": ""
          },
          "active": true,
          "locale": "en",
          "dateFormat": "dd MMMM yyyy"
        }
        </pre>
      </td>
    </tr>
  </tbody>
</table>

### Definitions for New Fields Above

| Field          | Type    | Optional | Description                                                                                                                                                                                     |
| -------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `occupationId` | integer | required | The occupation refers to the profession, job title, or primary field of work of the account holder. This information provides insight into the account holder's employment status and industry. |

### 5. Get Client API

**Affected API Endpoint:** `v1/clients`\
**Method:** `GET`\
**Type of Change:** Modification\
**API Doc:** *Get Client Details*

#### Description of Change

The client's occupation information will be included in the response along with other fields.

<table>
  <thead>
    <tr>
      <th>Status Code</th>
      <th>Sample Response</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>200</td>
      <td>
        <pre>
        "occupation": {
          "id": 10013,
          "name": "Sales Executive",
          "position": 0,
          "description": "",
          "active": true,
          "mandatory": false,
          "systemDefined": false,
          "parentId": 0,
          "codeName": "Occupation",
          "isMasked": false
        },
        </pre>
      </td>
    </tr>
  </tbody>
</table>

### 6. Create Client Document Record API

**Affected API Endpoint:** `/v1/clients/{clientId}/identifiers`\
**Method:** `POST`\
**Type of Change:** Modification\
**API Doc:** [Create Client Identifier](https://apidocs.cloud.mbanq.com/reference/createclientidentifier)

#### Description of Change

The `issuedDate` (client document issued date) must be recorded when adding a new client document record.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>New Payload</td>
      <td>
        <pre>
        {
          "locale": "en",
          "dateFormat": "dd MMMM yyyy",
          "documentTypeId": 646,
          "status": "ACTIVE",
          "documentKey": "34543543",
          "description": "  43534543",
          "expiryDate": "18 February 2025",
          "issuedBy": "US Gov",
          "issuedDate": "8 February 2020" -- New
        }
        </pre>
      </td>
    </tr>
  </tbody>
</table>

***

### 7. Edit Client Document Record API

**Affected API Endpoint:** `/v1/clients/{clientId}/identifiers/{identifierId}`\
**Method:** `PUT`\
**Type of Change:** Modification\
**API Doc:** *Edit Client Document Record*

#### Description of Change

The `issuedDate` (client document issued date) must be recorded when updating a client document record.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>New Payload</td>
      <td>
        <pre>
        {
          "locale": "en",
          "dateFormat": "dd MMMM yyyy",
          "documentTypeId": 646,
          "status": "ACTIVE",
          "documentKey": "34543543",
          "description": "  43534543",
          "expiryDate": "18 February 2025",
          "issuedBy": "US Gov",
          "issuedDate": "8 February 2020" -- New
        }
        </pre>
      </td>
    </tr>
  </tbody>
</table>

#### Definitions for New Fields Above

| Field        | Type   | Optional | Description                                                                                                                                                                                                                             |
| ------------ | ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `issuedDate` | string | required | Represents the date when a document or identifier was issued. This date is critical for tracking the validity period of certain documents, such as passports and licenses, and can also be used to ensure that documents are up to date |

### 8. List Client Document Records API

**Affected API Endpoint:** `v1/clients/{clientId}/identifiers`\
**Method:** `GET`\
**Type of Change:** Modification\
**API Doc:** *List Client Document Records*

#### Description of Change

The `issuedDate` of the client identifier will be included in the response along with other fields.

<table>
  <thead>
    <tr>
      <th>Status Code</th>
      <th>Sample Response</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>200</td>
      <td>
        <pre>
        "issuedDate": "2025-03-03 02:05:13" -- New
        </pre>
      </td>
    </tr>
  </tbody>
</table>

### Migration Plan

* The API changes will be available in the Stage environment starting March 4, 2025, and will become mandatory in production from March 15, 2025.
* For existing clients onboarded on the Mbanq platform on or after January 1, 2025, fintech partners are requested to submit the XLS file following the example provided below

***

## June 2024

**June 2024** - We have updated our API Guides to make them more comprehensive both technically and from a business user's perspective. In many places we have added business process descriptions that provide explanations for financial service processes. These updated guides should aid you in getting your Mbanq integration up and running more quickly.