All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 4s
209 lines
4.7 KiB
Markdown
209 lines
4.7 KiB
Markdown
# Account Lookup & Transfer
|
|
|
|
Two-step process: look up the recipient to validate the account and get the holder name, then execute the transfer.
|
|
|
|
All endpoints are on the WebView subdomain. See [README](README.md) for cookie and AJAX header format.
|
|
|
|
```
|
|
Referer: https://faisamobilex-wv.mib.com.mv/transfer/quick
|
|
```
|
|
|
|
---
|
|
|
|
## Step 1 — Account Lookup
|
|
|
|
The lookup endpoint depends on the format of the input:
|
|
|
|
| Input format | Endpoint | Body field |
|
|
|---|---|---|
|
|
| Starts with `7`, exactly 13 digits | `AjaxAlias/getIPSAccount` | `benefAccount` |
|
|
| Starts with `9`, exactly 17 digits | `ajaxBeneficiary/getAccountName` | `accountNo` |
|
|
| Starts with `7` or `9`, exactly 7 digits | `AjaxAlias/getAlias` | `aliasName` |
|
|
| Starts with `A` followed by 6 digits | `AjaxAlias/getAlias` | `aliasName` |
|
|
| Contains `@` (email) | `AjaxAlias/getAlias` | `aliasName` |
|
|
|
|
---
|
|
|
|
### 1a. IPS Account — BML / local bank (13 digits, starts with `7`)
|
|
|
|
```
|
|
POST https://faisamobilex-wv.mib.com.mv/AjaxAlias/getIPSAccount
|
|
```
|
|
|
|
Body: `benefAccount=7700000000000`
|
|
|
|
**Response**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"responseCode": "2",
|
|
"accountName": "ACCOUNT HOLDER NAME",
|
|
"bankBic": "MALBMVMV"
|
|
}
|
|
```
|
|
|
|
- `accountName` — account holder name
|
|
- `bankBic` — bank BIC (e.g. `MALBMVMV` for BML)
|
|
- Account number is the input itself — not returned in response
|
|
|
|
Use `bankNo=3` and `transferLocal` for the transfer.
|
|
|
|
---
|
|
|
|
### 1b. MIB Internal Account (17 digits, starts with `9`)
|
|
|
|
```
|
|
POST https://faisamobilex-wv.mib.com.mv/ajaxBeneficiary/getAccountName
|
|
```
|
|
|
|
Body: `accountNo=90100000000000000`
|
|
|
|
**Response**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"accountName": "ACCOUNT HOLDER NAME"
|
|
}
|
|
```
|
|
|
|
- `accountName` may be at root level or inside a `data` object — check both
|
|
- Bank is always MIB (`MADVMVMV`)
|
|
|
|
Use `bankNo=2` and `transferInternal` for the transfer.
|
|
|
|
---
|
|
|
|
### 1c. Favara Alias — shortcodes, A-IDs, emails
|
|
|
|
```
|
|
POST https://faisamobilex-wv.mib.com.mv/AjaxAlias/getAlias
|
|
```
|
|
|
|
Body: `aliasName=<alias>`
|
|
|
|
**Response**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"responseCode": "2",
|
|
"data": {
|
|
"BfyNm": "Account Holder Name",
|
|
"CdtrAcct": {
|
|
"Acct": "90100000000000000",
|
|
"FinInstnId": "MADVMVMV"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
- `BfyNm` — beneficiary name (trim whitespace)
|
|
- `CdtrAcct.Acct` — resolved account number to use for the transfer
|
|
- `CdtrAcct.FinInstnId` — bank BIC (`MADVMVMV` = MIB, `MALBMVMV` = BML)
|
|
|
|
Use `bankNo=2` (MIB) or `3` (BML/local) depending on `FinInstnId`, and the matching transfer endpoint.
|
|
|
|
---
|
|
|
|
### Lookup Errors
|
|
|
|
All three lookup endpoints return `success: false` with a human-readable `reasonText` on failure:
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"reasonText": "Account not found"
|
|
}
|
|
```
|
|
|
|
Always show `reasonText` directly to the user.
|
|
|
|
---
|
|
|
|
## Step 2 — Execute Transfer
|
|
|
|
Two endpoints depending on the destination bank:
|
|
|
|
| `bankNo` | Endpoint | Destination |
|
|
|---|---|---|
|
|
| `2` | `ajaxTransfer/transferInternal` | MIB internal account |
|
|
| `3` | `ajaxTransfer/transferLocal` | BML or other local bank |
|
|
|
|
```
|
|
POST https://faisamobilex-wv.mib.com.mv/ajaxTransfer/transferInternal
|
|
POST https://faisamobilex-wv.mib.com.mv/ajaxTransfer/transferLocal
|
|
```
|
|
|
|
### Request Body (form-urlencoded)
|
|
|
|
| Field | Description |
|
|
|---|---|
|
|
| `benefName` | Recipient name (from lookup) |
|
|
| `benefNo` | `0` (not a saved contact) |
|
|
| `fromAccountNo` | Source account number |
|
|
| `benefAccountNo` | Destination account number |
|
|
| `transferCy` | Currency numeric code (`"462"` = MVR, `"840"` = USD) |
|
|
| `benefCurrencyCode` | Same as `transferCy` |
|
|
| `amount` | Amount as string (e.g. `"100.00"`) |
|
|
| `bankNo` | `2` = MIB internal, `3` = local/BML |
|
|
| `purpose` | Transfer purpose; send `"-"` if blank |
|
|
| `otp` | OTP from the user |
|
|
| `otpType` | `"3"` (SMS/authenticator OTP) |
|
|
|
|
### Response — Success
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"trxId": "TRX20260516001",
|
|
"date": "2026-05-16 15:10:25"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
| Field | Description |
|
|
|---|---|
|
|
| `trxId` | Transaction ID |
|
|
| `date` | Completion timestamp |
|
|
|
|
### Response — Failure
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"reasonText": "Insufficient balance"
|
|
}
|
|
```
|
|
|
|
`reasonText` contains the error reason. On HTTP `419`, the session has expired — re-login required.
|
|
|
|
---
|
|
|
|
## Transfer Type Summary
|
|
|
|
| Recipient | Lookup endpoint | `bankNo` | Transfer endpoint |
|
|
|---|---|---|---|
|
|
| MIB (17-digit `9…`) | `getAccountName` | `2` | `transferInternal` |
|
|
| BML (13-digit `7…`) | `getIPSAccount` | `3` | `transferLocal` |
|
|
| Favara alias → MIB | `getAlias` | `2` | `transferInternal` |
|
|
| Favara alias → BML | `getAlias` | `3` | `transferLocal` |
|
|
|
|
---
|
|
|
|
## Currency Codes
|
|
|
|
| `transferCy` | Currency |
|
|
|---|---|
|
|
| `"462"` | MVR (Maldivian Rufiyaa) |
|
|
| `"840"` | USD |
|
|
|
|
---
|
|
|
|
|
|
|
|
---
|
|
|
|
[← Personal Profile](07-profile.md) **Next →** [Contacts](09-contacts.md)
|