All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 4s
138 lines
3.5 KiB
Markdown
138 lines
3.5 KiB
Markdown
# Accounts & Balances
|
|
|
|
Account numbers and balances are returned by the **Select Profile** call (`routePath: P47`). The login init call (`A41`) returns an empty `accountBalance` array — balances are only available after `P47`.
|
|
|
|
---
|
|
|
|
## Select Profile — `sfunc=n`, `routePath: P47`
|
|
|
|
**Key**: session key (from `sfunc=i` response)
|
|
|
|
**Request**:
|
|
```json
|
|
{
|
|
"sfunc": "n",
|
|
"xxid": "<session xxid>",
|
|
"data": {
|
|
"profileType": "<profileType from A41 operatingProfiles>",
|
|
"profileId": "<profileId from A41 operatingProfiles>",
|
|
"nonce": "<computed nonce>",
|
|
"appId": "<appId>",
|
|
"sodium": "<random 20-bit int>",
|
|
"routePath": "P47",
|
|
"xxid": "<session xxid>"
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"reasonCode": "101",
|
|
"reasonText": "Profile Selected!",
|
|
"landingPage": "0",
|
|
"accountBalance": [ ... ],
|
|
"accessRights": { ... },
|
|
"services": []
|
|
}
|
|
```
|
|
|
|
To switch between profiles (personal ↔ business), call `P47` again with the other profile's `profileId` and `profileType`.
|
|
|
|
---
|
|
|
|
## Profiles (from `A41` response)
|
|
|
|
The `A41` login init response includes `operatingProfiles`:
|
|
|
|
```json
|
|
{
|
|
"operatingProfiles": [
|
|
{
|
|
"profileId": "<profile ID>",
|
|
"customerProfileId": "<customer profile ID>",
|
|
"annexId": "<annex ID>",
|
|
"customerId": "<customer ID>",
|
|
"name": "<display name>",
|
|
"cifType": "Individual",
|
|
"customerImage": "<image hash>",
|
|
"profileType": "0",
|
|
"color": "<hex color>"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
| `profileType` | Meaning |
|
|
|---|---|
|
|
| `"0"` | Individual (personal) |
|
|
| `"1"` | Sole Proprietor (business) |
|
|
|
|
---
|
|
|
|
## `accountBalance` Array
|
|
|
|
Each element represents one account:
|
|
|
|
```json
|
|
{
|
|
"cif": "<CIF number>",
|
|
"accountNumber": "<full account number>",
|
|
"accountBriefName": "<short label, e.g. 'SAR MVR - Savings'>",
|
|
"template": "<display template ID>",
|
|
"currencyCode": "<ISO 4217 numeric>",
|
|
"currencyName": "<ISO 4217 alpha>",
|
|
"accountTypeName": "<account type label>",
|
|
"transfer": "Y",
|
|
"branchName": "<branch name>",
|
|
"availableBalance": "<decimal string>",
|
|
"currentBalance": "<decimal string>",
|
|
"blockedAmount": "<decimal string, may be negative>",
|
|
"settlementBalance": "<decimal string>",
|
|
"mvrBalance": "<MVR equivalent>",
|
|
"statusDesc": "Active"
|
|
}
|
|
```
|
|
|
|
| Field | Description |
|
|
|---|---|
|
|
| `accountNumber` | Full account number |
|
|
| `accountBriefName` | Human-readable account label |
|
|
| `currencyCode` | ISO 4217 numeric (e.g. `"462"` = MVR, `"840"` = USD) |
|
|
| `currencyName` | ISO 4217 alpha (e.g. `"MVR"`, `"USD"`) |
|
|
| `accountTypeName` | Account type (e.g. `"Saving Account"`) |
|
|
| `availableBalance` | Spendable balance (decimal string) |
|
|
| `currentBalance` | Ledger balance (decimal string) |
|
|
| `blockedAmount` | Held/blocked funds — negative means funds are held |
|
|
| `settlementBalance` | Balance including pending settlements |
|
|
| `mvrBalance` | All balances converted to MVR for unified display |
|
|
| `transfer` | `"Y"` if usable as transfer source |
|
|
| `statusDesc` | Account status (e.g. `"Active"`) |
|
|
| `cif` | Customer Information File number |
|
|
| `template` | UI template ID |
|
|
|
|
> All balance fields are **decimal strings**, not numbers — parse with `Decimal` for precision.
|
|
|
|
---
|
|
|
|
## `accessRights`
|
|
|
|
```json
|
|
{
|
|
"numAccounts": "<number of accounts>",
|
|
"packageRights": "[1,2,3,4,6,7,8,9,10,11,12]",
|
|
"roleRights": "[]"
|
|
}
|
|
```
|
|
|
|
`packageRights` is a JSON array encoded as a string — parse it separately.
|
|
|
|
---
|
|
|
|
|
|
|
|
---
|
|
|
|
[← Login Flow](02-login.md) **Next →** [Transaction History](04-history.md)
|