Transaction service
Transaction service contains;
- Account and Kyc management APIs
- Transaction APIs i.e Portfolio subscription and redemption api's
- Wallet Management APIs
Account Management
Endpoint:
/api/v1/getclientaccountinfo
Method: GET
Get new client account info
Response Payload
{
"transId": 0,
"clientType": "I",
"clientGroupId": 1,
"surname": "Elizabeth",
"firstname": "Lilian",
"othernames": "Nwachinekene",
"dateOfBirth": "1984-09-19T00:00:00",
"emailAddress": "godwin.amadi@itapsolutions.net",
"bvn": "3884545",
"address1": "06, Greg Close Off Peter Odili Road",
"address2": "Ikeja",
"city": "Lagos",
"state": null,
"country": "NGN",
"zipcode": null,
"mobileNumber": "081384057777777",
"gender": "F",
"titleCode": "Mrs",
"maritalStatus": "s",
"nationality": "NGA",
"occupation": "Finance Manager",
"religion": null,
"mothersMaidenName": null,
"placeOfBirth": "Ogun State",
"identificationType": "NATIONALID",
"identificationNumber": null,
"identificationExpiry": null,
"classCode": null,
"nin": "20345456",
"clientGroupName": "Individual",
"diasporaClient": null,
"referralCode": null,
"referredBy": null,
"pep": true,
"sourceOfIncomeName": "business and salary ",
"netWorth": 100000000,
"emailIndemnity": true
}
Endpoint:
/api/v1/getclientfullinfo
Method: GET
Get client full info
Response Payload
{
"surname": "Elizabeth",
"firstname": "Lilian",
"othernames": "Nwachinekene",
"clientType": "I",
"accountNo": "00598702",
"titleCode": "Mrs",
"agentCode": "678",
"address1": "06, Greg Close Off Peter Odili Road",
"address2": "Ikeja",
"emailAddress": "godwin.amadi@itapsolutions.net",
"city": "Lagos",
"state": null,
"country": "NGN",
"contactPerson": null,
"dateOfBirth": "1984-09-19T00:00:00",
"gender": "F",
"maritalStatus": "s",
"mobileNumber": "081384057777777",
"nationality": "NGA",
"tier": null,
"pep": true,
"bvn": "3884545"
}
Endpoint:
- /api/v1/updateindividualclientaccountinfo
- /api/v1/submitindividualclientaccountinfo
Method: POST
Submit or update individual account info
Request Payload
{
"transId": 0,
"clientType": "s",
"clientGroupId": 0,
"surname": "string",
"firstname": "string",
"othernames": "string",
"dateOfBirth": "2026-10-20T12:18:08.679Z",
"emailAddress": "string",
"bvn": "string",
"address1": "string",
"address2": "string",
"city": "string",
"state": "string",
"country": "string",
"zipcode": "string",
"mobileNumber": "string",
"gender": "s",
"titleCode": "string",
"maritalStatus": "s",
"nationality": "string",
"occupation": "string",
"religion": "string",
"mothersMaidenName": "string",
"placeOfBirth": "string",
"identificationType": "string",
"identificationNumber": "string",
"identificationExpiry": "2026-10-20T12:18:08.679Z",
"classCode": "string",
"nin": "string",
"clientGroupName": "string",
"diasporaClient": true,
"pep": true,
"sourceOfIncomeName": "string",
"netWorth": 0,
"emailIndemnity": true
}
Request Fields Further information
| Field | API to call |
|---|---|
country |
/api/v1/getcountries |
nationality |
/api/v1/getcountries |
gender |
/api/v1/getgender |
maritalStatus |
/api/v1/getmaritalstatus |
titleCode |
/api/v1/gettitles |
identificationType |
/api/v1/getidentitytypes |
Endpoint:
- /api/v1/updatecorporateclientaccountinfo
- /api/v1/submitcorporateclientaccountinfo
Method: POST
Submit corporate account info
Request Payload
{
"transId": 0,
"clientType": "s",
"registeredCompanyNumber": "string",
"clientGroupId": 0,
"companyName": "string",
"dateOfIncorporation": "2026-10-20T13:42:07.317Z",
"emailAddress": "string",
"bvn": "string",
"address1": "string",
"address2": "string",
"city": "string",
"state": "string",
"country": "str",
"zipcode": "str",
"mobileNumber": "string",
"identificationType": "string",
"identificationNumber": "string",
"identificationExpiry": "2026-10-20T13:42:07.317Z",
"classCode": "string",
"nin": "string",
"diasporaClient": true,
"clientGroupName": "string"
}
Request Fields Further information
| Field | API to call |
|---|---|
country |
/api/v1/getcountries |
Endpoint:/api/v1/sendclientmessagetorelationshipmanager
Method: POST
Send relationship manager an email message
Request Payload
{ "message": "string" }
Request Fields Further information
| Field | Description |
|---|---|
message |
Email Message |
Endpoint:/api/v1/createnextofkin
Method: POST
Create client next of kin
Request Payload
{
"transId": 0,
"relationship": "string",
"surname": "string",
"firstname": "string",
"othernames": "string",
"titleCode": "string",
"gender": "s",
"address": "string",
"telephoneNo": "string",
"email": "string",
"state": "string",
"town": "string",
"country": "str"
}
Request Fields Further information
| Field | API to call |
|---|---|
country |
code => /api/v1/getcountries |
gender |
value => /api/v1/getgender |
titleCode |
titleCode => /api/v1/gettitles |
Endpoint:
/api/v1/getnextofkins
Method: GET
Get next of kins
Response Payload
[
{
"transId": 1022,
"clientId": 0,
"relationship": "brother",
"surname": "Amadi",
"firstname": "Richard",
"othernames": null,
"titleCode": "Mr",
"gender": "M",
"address": null,
"telephoneNo": null,
"email": "godwinstones747@gmail.com",
"state": null,
"town": null,
"country": "NGN"
}
]
Endpoint:/api/v1/createbankaccount
Method: POST
Create client bank account
Request Payload
{
"beneficiaryCompanyId": 0,
"beneficiaryAccountNo": "string",
"currencyCode": "str",
"beneficiaryName": "string",
"beneficiarySortCode": "string",
"beneficiaryBankSwiftCode": "string",
"iban": "string",
"countryCode": "str",
"intermediaryBank": "string",
"intermediaryBankAccountNo": "string",
"intermediaryBankSwiftCode": "string",
"bankAddress": "string"
}
| Field | API to call | Description |
|---|---|---|
beneficiaryCompanyId |
companyId => /api/v1/getbanks | companyId |
beneficiaryAccountNo |
null | Account Number of beneficiary |
currencyCode |
code => /api/v1/getcurrencies | currency |
beneficiaryName |
null | Beneficiary Name |
beneficiarySortCode |
null | bank sort code |
beneficiaryBankSwiftCode |
null | bank swift code |
iban |
null | iban |
countryCode |
code => /api/v1/getcountries | country code |
intermediaryBank |
null | Intermediary bank if any |
intermediaryBankAccountNo |
null | Intermediary Bank Account No if any |
intermediaryBankSwiftCode |
null | intermediaryBankSwiftCode if Any |
bankAddress |
null | Used in foreign currency bank accounts |
Respond Payload ( 200 status Code)
{
"status": true,
"message": "Success",
"object": null
}
Endpoint:/api/v1/getclientbankaccounts
Method: GET
Get client bank accounts
Response Payload
[
{
"transId": 1085,
"clientId": 4,
"bankName": "ACCESS BANK PLC",
"beneficiaryAccountNo": "8138405789",
"currency": "NGN",
"beneficiaryName": "Richard Amadi",
"beneficiarySortCode": "",
"beneficiaryBankSwiftCode": "",
"iban": "",
"countryCode": "NGA",
"intermediaryBank": null,
"intermediaryBankAccountNo": null,
"bankAddress": null,
"intermediaryBankSwiftCode": null
}
]
Endpoint:
/api/v1/disableclientbankaccount/{accountNo}
Method: POST
Disable Client Bank Account
Query Param
{accountNo} : string
| Field | Description |
|---|---|
accountNo |
client account nunmber |
Endpoint:
/api/v1/disableclientbankaccount/{bankaccounttransid}
Method: POST
Disable Client Bank Account using uniqueidentifyer
Query Param
{accountNo} : string
| Field | Description |
|---|---|
bankaccounttransid |
transId in => /api/v1/getclientbankaccounts |
Document Management
Endpoint:
/api/v1/getclientpendingdocuments
Method: GET
- Get pending documents
- Lists all required KYC documents and indicates the upload status of each document, specifying whether it has been provided or is still outstanding.
Sample Response Payload
[
{
"document": "Account Opening Form",
"uploaded": 0,
"documentId": "85E2C5AF9E",
"clientId": 4
},
{
"document": "Birth Cert",
"uploaded": 1,
"documentId": "11D162D32E",
"clientId": 4
}
]
| Field | Description |
|---|---|
document |
Name of document |
uploaded |
upload status. if 0 = false , and if 1 = true |
document |
ID of document |
document |
client Id |
Endpoint:
/api/v1/getclientpendingdocumentstatus
/api/v1/getkycregistrationstatus
/api/v1/getkycdocumentuploadstatus
Method: GET
- Get pending document status
- List all required documents yet to be provided or uploaded by client
Sample Response Payload
{ "status": false, "message": "5 document(s) upload pending" }
Endpoint:/api/v1/uploadclientdocument
Method: POST
- Upload client document
- Upload Client Documents Maximum file size is 5mb
Request Payload
| Field | Description |
|---|---|
Files |
IForm File format for documents |
DocumentId |
Get documentId from /api/v1/getclientpendingdocuments |
Comment |
comment |
The document Id used in the request payload above demonstrates the document the client intends to upload
Endpoint:/api/v1/getclientkycfiles
Method: GET
- Get client Kyc files
- Gets all uploaded kyc documents
Respond Payload
[ { "documentName": "Birth certificate", "document": "/9j/4AAQSkZJRgABAQEBLAEsAAD/..." } ]
| Field | Description |
|---|---|
document |
base64 encoded string |
documentName |
document name |
Endpoint:
/api/v1/uploadclientphoto
Method: POST
- Upload Client Photo
Request Payload
{ "base64": "string", "filename": "string" }
Endpoint:/api/v1/getclientphoto
Method: GET
- Get Client Photo
Sample Respond Payload
{ "clientId": 4, "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAA" }
| Field | Description |
|---|---|
clientId |
client id |
photo |
base64 encoded string |
Portfolio Subscription and Redemption Management
- Portfolios are exposed to the xfund client api through the xfund core system. This is configured on the Setup online portfolio page on the xfund core application.
- Once configured, the products become available on the Client API for client investment activities.
- When you call /api/v1/getclientinvestibleproducts , you get to see all products exposed to the xfund client api
Funds are identified with the below portfolioType integers
- Mutual Funds => 2
- Mutual Funds/Money Market funds => 3
- Fixed income and Liability => 9
- sma(separately managed accounts) => 1
API that presents all portfolioTypes is /api/v1/getportfoliotypes
Mutual Funds Subscription and Redemption Management
Endpoint:
/api/v1/getclientinvestiblemutualfundproducts
Method: GET
- returns client's mutual fund investible products
- Lists all available mutual funds clients can invest into
Sample Respond Payload
[
{
"portfolioName": "RSA Fund",
"clientPortfolioCode": null,
"portfolioType": 2,
"myProduct": false,
"portfolioId": 820,
"productMandate": "Retirement Savings Account Scheme",
"portfolioTypeName": "mutualfund",
"minimumHoldingPeriod": 60,
"minimumInvestment": 0,
"minimumSubsequentInvestment": 0,
"custodianName": "iTap Custodian",
"earlyRedemptionPenaltyRate": 20,
"assetClassInfo": null,
"currency": "NGN",
"currentValue": 1944414.84,
"cost": 2294308.54,
"bidPrice": 0.86061117911538,
"offerPrice": 1.402744973031354,
"return": 5.55,
"subProducts": []
}
]
| Field | Description |
|---|---|
portfolioId |
fund unique identifier |
portfolioTypeName |
Describe the type of fund i.e mutual fund |
Endpoint:
/api/v1/previewmutualfundsubscription
/api/v1/reviewmutualfundsubscription
Method: POST
- Preview Mutualfund Subscription
Sample Request Payload
{ "portfolioId": 820, "amount": 1000 }
| Field | Description |
|---|---|
portfolioId |
portfolioId => /api/v1/getclientinvestiblemutualfundproducts |
Sample Respond Payload
{
"status": true,
"message": "Success",
"object": {
"portfolioName": "RSA Fund",
"portfolioId": 820,
"amount": 1000,
"offerPrice": 1.402744973031354,
"transactionUnits": 712.888,
"currency": "NGN"
}
}
Clients can subscribe to a mutual fund using either of the following approache:
- Existing Sub-account: Subscribe using an existing mutual fund sub-account number.
- New Sub-account: If the client does not have a mutual fund sub-account number, client can create one before the proceed with subscription. Alternatively, the client can subscribe directly to the mutual fund, and the system will automatically generate a sub-account number for the subscription.
Mutual fund subscription with an existing mutual fund sub account number
Endpoint:
/api/v1/mutualfundsubscription
Method: POST
- Mutualfund Subscription
Sample Request Payload
{ "mutualfundAccountNo": "string", "amount": 0 }
| Field | Description |
|---|---|
mutualfundAccountNo |
subAccountNumbe => /api/v1/getmutualfundaccounts/{portfolioid} |
amount |
investment amount |
Sample Response Payload
{
"status": true,
"message": "string"
}
To Create a sub account number before mutual fund subscription;
Endpoint:
/api/v1/createnewmutualfundsubaccount
Method: POST
- Create new mutualfund sub account
Request Payload
{
"mutualfundAccountName": "string",
"portfolioId": 0,
"isDividendPayOut": true
}
| Field | Description |
|---|---|
mutualfundAccountName |
Preferred Mutual fund account name e.g investement, vacation etc |
portfolioId |
portfolioId => /api/v1/getclientinvestiblemutualfundproducts |
isDividendPayOut |
Dividend payout mandate. if True => pay out divident and if false => don't |
Sample Response Payload
{
"status": true,
"message": "Success",
"object": {
"subAccountName": "rent",
"subAccountNumber": "00598702-16-10"
}
}
After a sub account has been created, you can then proceed to mutual fund subscription => /api/v1/createnewmutualfundsubaccount
Mutual fund subscription with no sub account number
- Initiate a mutual fund subscription and the system will automatically generate a sub-account number for the subscription.
Endpoint:
/api/v1/mutualfundsubscriptionnoaccount
Method: POST
- Mutualfund Subscription with no mutualfund account
Request Payload
{ "portfolioId": 0, "amount": 0 }
| Field | Description |
|---|---|
portfolioId |
portfolioId => /api/v1/getclientinvestiblemutualfundproducts |
Sample Response Payload
{ "status": true, "message": "string" }
Mutual Fund Redemption APIs
Endpoint:
- /api/v1/previewmutualfundredemption
- /api/v1/reviewmutualfundredemption
Method: POST
- Preview Mutualfund Redemption
- Review Mutualfund Redemption
Request Payload
{ "mutualfundAccountNo": "string", "amount": 0 }
| Field | Description |
|---|---|
mutualfundAccountNo |
subAccountNumber => /api/v1/getmutualfundaccounts/{portfolioid} |
Sample Response Payload
{
"status": true,
"message": "Success",
"object": {
"amount": 1000,
"description": "Redemption Lilian Nwachinekene Elizabeth||00598702-16-1]||1,161.9649 @ 0.8606",
"penalCharge": 0,
"totalUnits": 1161.9649,
"unitHolding": 2259810.0069,
"balanceB4Redemption": 1944817.754614944,
"balanceAfterRedemption": 1943817.7546322644,
"investmentAccount": "00598702-16-1",
"clientAccount": "00598702",
"mutualFundInterest": 0,
"minimumRedemptionPeriod": 60,
"fundCode": "RSA Fund",
"schemeType": 2,
"bidPrice": 0.86061117911538
"clientBankAccounts": [
{
"transId": 1041,
"beneficiaryAccountNo": "0031841013"
}
]
}
}
Endpoint: /api/v1/mutualfundredemption
Method: POST
- Mutualfund Redemption
Request Payload
{ "mutualfundAccountNo": "string", "amount": 0 }
| Field | Description |
|---|---|
mutualfundAccountNo |
subAccountNumber => /api/v1/getmutualfundaccounts/{portfolioid} |
Sample Response Payload
{ "status": true, "message": "string" }
Additional mutualfund APIs
Endpoint:
- /api/v1/getmutualfundpayoutmandate
- /api/v1/getmutualfunddividendpayoutmandate
- /api/v1/getmutualfundpayoutmandates
Method: POST
- Gets the Mutual Fund Payout Mandate
Request Param
{mutualfundClientSubAccountNo} : string
| Field | Description |
|---|---|
mutualfundClientSubAccountNo |
subAccountNumber => /api/v1/getmutualfundaccounts/{portfolioid} |
Sample Response payload
{ "subAccountNumber": "00598702-16-1", "dividendPayOutStatus": true }
Endpoint: /api/v1/mutualfunddividendpayoutmandate
Method: POST
- Mutualfund Dividend Payout Mandate
- Set the payout mandate to a specific mutualfund subaccount number
Request payload
{ "clientSubAccount": "string", "isCashPayout": true }
| Field | Description |
|---|---|
clientSubAccount |
subAccountNumber => /api/v1/getmutualfundaccounts/{portfolioid} |
Sample Response payload
{ "status": true, "message": "string" }
Fixed Income and Liability Subscription and Redemption Management
A liability product can be configured in multiple currencies, allowing subscriptions and redemptions to be processed in the currency associated with the selected product.
Example: A liability product named Agric can be configured in different currencies, such as:
- Agric (Naira)
- Agric (USD)
Each currency-specific product supports subscriptions and redemptions in its respective currency.
Endpoint: /api/v1/getclientinvestiblefixedreturnproducts
Method: POST
- To get all investible liability products that clients can invest into
- returns the client's investible fixed return products
Note: All liability products have the portfolioType of 9
Sample Response payload
[
{
"portfolioName": "string",
"clientPortfolioCode": "string",
"portfolioType": 0,
"myProduct": true,
"portfolioId": 0,
"productMandate": "string",
"portfolioTypeName": "string",
"minimumHoldingPeriod": 0,
"minimumInvestment": 0,
"minimumSubsequentInvestment": 0,
"custodianName": "string",
"earlyRedemptionPenaltyRate": 0,
"assetClassInfo": "string",
"currency": "string",
"currentValue": 0,
"cost": 0,
"bidPrice": 0,
"offerPrice": 0,
"return": 0,
"subProducts": "string"
}
]
Endpoint: /api/v1/reviewfixedincomesubscriptionorder
Method: POST
- Review Fixed Income Liability Buy Order
Request payload
{
"securityProductId": 0,
"portfolioId": 0,
"currency": "str",
"faceValue": 0,
"tenor": 0,
"planCode": "string",
"isStp": true
}
| Field | Description or API to call |
|---|---|
securityProductId |
securityProductId => /api/v1/getliabilityproducts/{portfolioid} |
portfolioId |
portfolioId => /api/v1/getclientinvestiblefixedreturnproducts |
currency |
code => /api/v1/getcurrencies |
tenor |
tenor => /api/v1/getproducttenor/{productid} |
planCode |
custom description |
isStp |
By default straight through process is true unless when disabled or set to false |
- /api/v1/getproducttenor/{productid} as seen in tenor => {productid} is gotten from /api/v1/getliabilityproducts/{portfolioid}
Sample Response payload
{
"status": true,
"message": "Success",
"object": {
"direction": "BUY",
"security": "AGRIC",
"faceValue": 1000,
"settlementDate": "2026-10-22T00:00:00+01:00",
"grossInterestRate": 10.5,
"grossIncome": 8.63,
"netIncome": 7.77,
"tenor": 30,
"maturityDate": "2026-11-21T00:00:00+01:00",
"grossMaturityValue": 1008.63,
"netMaturityValue": 1007.77,
"witholdingTaxAmount": 0.86,
"preliquidationChargeRate": "0%"
}
}
Endpoint: /api/v1/fixedincomesubscriptionorder
Method: POST
- Fixed Income Liability Buy Order
Request payload
{
"securityProductId": 0,
"portfolioId": 0,
"currency": "str",
"faceValue": 0,
"tenor": 0,
"planCode": "string",
"isStp": true
}
| Field | Description or API to call |
|---|---|
securityProductId |
securityProductId => /api/v1/getliabilityproducts/{portfolioid} |
portfolioId |
portfolioId => /api/v1/getclientinvestiblefixedreturnproducts |
currency |
code => /api/v1/getcurrencies |
tenor |
tenor => /api/v1/getproducttenor/{productid} |
planCode |
custom description |
isStp |
By default straight through process is true unless when disabled or set to false |
- /api/v1/getproducttenor/{productid} as seen in tenor => {productid} is gotten from /api/v1/getliabilityproducts/{portfolioid}
Sample Response payload
{
"status": true,
"message": "Success",
"object": {
"direction": "BUY",
"security": "AGRIC",
"faceValue": 1000,
"settlementDate": "2026-10-22T00:00:00+01:00",
"grossInterestRate": 10.5,
"grossIncome": 8.63,
"netIncome": 7.77,
"tenor": 30,
"maturityDate": "2026-11-21T00:00:00+01:00",
"grossMaturityValue": 1008.63,
"netMaturityValue": 1007.77,
"witholdingTaxAmount": 0.86,
"preliquidationChargeRate": "0%"
}
}
Endpoint: /api/v1/reviewfixedincomeredemptionorder
Method: POST
- Review Fixed Income Liability Sell Order
Request payload { "purchaseReferenceNo": "string", "faceValue": 0, "isStp": true }
| Field | Description or API to call |
|---|---|
purchaseReferenceNo |
referenceNo => /api/v1/getfixedincomeproductonlinebalances/{portfolioid} |
isStp |
straight through process instruction. Defaults to true |
faceValue |
amount to redeem |
purchaseReferenceNo can be retrieved from either of the below apis
- /api/v1/getfixedincomeproductbalances/{portfolioid} : returns the client's product balance as at the last valuation
- /api/v1/getfixedincomeproductonlinebalances/{portfolioid} : returns the client's product online balance
Sample Response payload
{
"status": true,
"message": "Success",
"object": {
"faceValue": 1000,
"liquidationDate": "2026-10-22T00:00:00+01:00",
"interestRate": 10.5,
"grossIncome": 3.74,
"maturityDate": "2026-06-07T00:00:00",
"netProceeds": 1003.37,
"witholdingTaxAmount": 0.37,
"witholdingTaxRate": 10,
"preliquidationCharge": 0,
"preliquidationChargeRate": 0
}
}
Endpoint: /api/v1/fixedincomeredemptionorder
Method: POST
- Fixed Income Liability Sell Order
Request payload
{
"purchaseReferenceNo": "string",
"faceValue": 0,
"isStp": true
}
| Field | Description or API to call |
|---|---|
purchaseReferenceNo |
referenceNo => /api/v1/getfixedincomeproductbalances/{portfolioid} |
isStp |
straight through process instruction. Defaults to true |
faceValue |
amount to redeem |
- /api/v1/getfixedincomeproductbalances/{portfolioid} : returns the client's product balance as at the last valuation
- /api/v1/getfixedincomeproductonlinebalances/{portfolioid} : returns the client's product online balance
Sample Response payload
{
"status": true,
"message": "Success",
"object": {
"faceValue": 1000,
"liquidationDate": "2026-10-22T00:00:00+01:00",
"interestRate": 10.5,
"grossIncome": 3.74,
"maturityDate": "2026-06-07T00:00:00",
"netProceeds": 1003.37,
"witholdingTaxAmount": 0.37,
"witholdingTaxRate": 10,
"preliquidationCharge": 0,
"preliquidationChargeRate": 0
}
}
Additional Fixedincome and liability APIs
Endpoint: /api/v1/fixedincometopupreview
Method: POST
- Review fixed Income Liability Topup
- review additional capital investment into a running liability subscription
Request payload
{
"referenceNo": "string",
"additionalPrincipal": 0,
"planCode": "string"
}
| Field | Description or API to call |
|---|---|
referenceNo |
referenceNo => /api/v1/getfixedincomeproductbalances/{portfolioid} |
additionalPrincipal |
additional principal |
planCode |
custom investment plan description |
Sample Response payload
{
"status": true,
"message": "Success",
"object": {
"topupTransId": 0,
"referenceNo": "AGR-1753DC87C9A2",
"posterityReferenceNo": "AGR-6CC2D3517472",
"disposalReferenceNo": "AGR-E324B5A065E4",
"ancestorReferenceNo": "AGR-054CE2B6864E",
"valueDate": "2026-10-22T00:00:00+01:00",
"maturityDate": "2026-10-23T00:00:00+01:00",
"tenor": 1,
"faceValue": 7198.35,
"maturityValue": 7200.42,
"additionalPrincipal": 1000,
"netInterestRate": 9.45,
"grossInterestRate": 10.5
}
}
Endpoint: /api/v1/fixedincometopupfromwallet
Method: POST
- Fixed Income Liability Topup From Wallet
- Topup additional capital into a running liability subscription
Request payload
{
"referenceNo": "string",
"additionalPrincipal": 0,
"planCode": "string"
}
| Field | Description or API to call |
|---|---|
referenceNo |
referenceNo => /api/v1/getfixedincomeproductbalances/{portfolioid} |
additionalPrincipal |
additional principal |
planCode |
custom investment plan description |
Sample Response payload
{
"status": true,
"message": "Success",
"object": {
"topupTransId": 0,
"referenceNo": "AGR-1753DC87C9A2",
"posterityReferenceNo": "AGR-6CC2D3517472",
"disposalReferenceNo": "AGR-E324B5A065E4",
"ancestorReferenceNo": "AGR-054CE2B6864E",
"valueDate": "2026-10-22T00:00:00+01:00",
"maturityDate": "2026-10-23T00:00:00+01:00",
"tenor": 1,
"faceValue": 7198.35,
"maturityValue": 7200.42,
"additionalPrincipal": 1000,
"netInterestRate": 9.45,
"grossInterestRate": 10.5
}
}
Wallet Management
A wallet holds a client's funds, providing liquidity that can be used to subscribe to available portfolios or investment products. Clients can also withdraw funds from their wallets directly to their registered bank accounts.
A client's wallet is funded through a virtual account integrated with a financial institution. Once the integration is completed, each client can transfer funds into their assigned virtual account. Upon successful processing of the payment, the corresponding amount is credited to the client's wallet balance.
Endpoint: /api/v1/walletwithdrawalrequest
Method: POST
- Initiate a withdrawal request from client wallet balance to his bank account
Wallet withdrawal request can either be straight through (STP) or non-stp, depending on what the business has configured at the core application level.
-
Straight-Through Processing (STP): When STP is enabled, withdrawal requests are processed automatically, and the funds are paid directly into the client's bank account without manual intervention.
-
Non-STP Processing: When STP is disabled, withdrawal requests are forwarded to the back-office team for verification, approval, and payout processing.
Recommendation: Non-STP processing is recommended because it allows the business to verify and approve withdrawal requests before disbursing funds to clients, providing greater control over the withdrawal process.
Request payload
{
"currencyCode": "string",
"amount": 0,
"beneficiaryBankAccountNo": "string",
"transactionPin": "string"
}
| Field | Description or API to call |
|---|---|
currencyCode |
code => /api/v1/getcurrencies |
beneficiaryBankAccountNo |
beneficiaryAccountNo => /api/v1/getclientbankaccounts |
transactionPin |
Transaction pin |
amount |
withdrawal amount |
Sample response payload { "status": true, "message": "string" }
Endpoint: /api/v1/interwallettransfer
Method: POST
- Inter Wallet Transfer
- Transfer between 2 wallet accounts
Request payload
{
"beneficiaryAccountNo": "string",
"amount": 0,
"transactionPin": "string",
"currencyCode": "string",
"description": "string"
}
| Field | Description or API to call |
|---|---|
currencyCode |
code => /api/v1/getcurrencies |
beneficiaryBankAccountNo |
beneficiary wallet account number |
transactionPin |
Transaction pin |
amount |
transfer amount |
description |
description |
Sample response payload { "status": true, "message": "string" }
Endpoint: /api/v1/getpendingwithdrawals
Method: GET
- Get Pending withdrawals
- Use this when stp is enabled
Endpoint: /api/v1/getpendingwithdrawalswithnostp
Method: GET
- Get Pending withdrawals with no stp Check.
- Use this when stp is disabled
Endpoint: /api/v1/getbeneficiarywalletinfobyemailaddress
Method: GET
- Gets Beneficiary Wallet Info By Email Address
Endpoint: /api/v1/getbeneficiarywalletinfobyphoneno
Method: GET
- Gets Beneficiary Wallet Info By Phone Number
Additional wallet utility APIs
Endpoint: /api/v1/topupwallet
Method: POST
- Topup wallet
This API is intended for use during the testing phase or in the User Acceptance Testing (UAT) environment to fund client wallets during development and integration. It enables developers to test fund subscriptions and other wallet-related transaction processes without requiring actual deposits through the integrated virtual account. Note: This API should be restricted to non-production environments and should not be used to fund client wallets in production.
Request payload
{
"clientAccountNo": "string",
"currencyCode": "string",
"amount": 0,
"walletAccountNo": "string",
"uniqueReferenceNo": "string",
"narration": "string"
}
| Field | Description or API to call |
|---|---|
clientAccountNo |
accountNo => /api/v1/getclientfullinfo |
currencyCode |
code => /api/v1/getcurrencies |
amount |
Amount |
walletAccountNo |
walletAccountNo => /api/v1/getclientwalletprofiles |
uniqueReferenceNo |
unique reference number. [minLength : 1] |
Narration |
Narration |
Endpoint: /api/v1/debitwallet
Method: POST
- Debit wallet
This API is intended for use during the testing phase or in the User Acceptance Testing (UAT) environment to debit client wallets during development and integration. It enables developers to test wallet withdrawals and and other processes that require a reduction in the client's wallet balance.
Note: This API should be restricted to non-production environments and should not be used to debit client wallets in production.
Request payload
{
"currencyCode": "string",
"amount": 0,
"walletBankAccountNo": "string",
"beneficiaryBankAccountNo": "string",
"transactionPin": 0,
"charges": 0
}
| Field | Description or API to call |
|---|---|
beneficiaryBankAccountNo |
beneficiaryAccountNo => /api/v1/getclientbankaccounts |
currencyCode |
code => /api/v1/getcurrencies |
amount |
Amount |
walletBankAccountNo |
walletAccountNo => /api/v1/getclientwalletprofiles |
transactionPin |
Transaction pin |