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