Internal Service

The Internal Service is a dedicated module within the Xfund Client API that enables direct communication with the Xfund Core application without requiring individual clients to authenticate or log in through the default client authentication flow.

The module requires a one-time authentication through a central login process. Once authenticated, the integrating application can perform portfolio subscriptions, redemptions, and other supported transaction activities on behalf of specific clients. Clients are identified using unique identifiers such as account numbers or email addresses.

The Internal Service operates independently of the default client module and must be explicitly enabled through the application configuration before it can be used.

Use Case

The Internal Service is suitable for businesses that already have an existing client-facing application with their own login and authentication mechanisms but want to make Xfund investment products available to their clients.

In this scenario, the existing application manages client authentication, while the Internal Service enables the application to interact with Xfund Core to facilitate investment activities, including portfolio subscriptions, redemptions, and other supported transactions.

Authentication

Endpoint: /api/v1/InternalService/auth/login

Method: POST

  • Account Login

Request payload

{
  "username": "string",
  "password": "string"
}
Field Description or API to call
username xfund integration username
password password

Sample Response payload

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkdvZHdpbiIsInN1YiI6",
  "userName": "Godwin",
  "message": "Success"
}

Account creation and management

Endpoint: /api/v1/InternalService/createclient

Method: POST

  • Create new client

Request payload

{
  "fullname": "string",
  "clientType": "s",
  "surname": "string",
  "clientGroupId": 0,
  "source": "string",
  "clientId": 0,
  "firstname": "string",
  "othernames": "string",
  "dateOfBirthOrIncorporation": "2026-10-23T02:08:37.947Z",
  "agentCode": "string",
  "emailAddress": "string",
  "alternateEmailAddress": "string",
  "bvn": "string",
  "chn": "string",
  "prospectiveClient": true,
  "address1": "string",
  "address2": "string",
  "city": "string",
  "state": "string",
  "country": "str",
  "zipcode": "string",
  "mobileNumber": "string",
  "gender": "s",
  "titleCode": "string",
  "maritalstatus": "s",
  "nationality": "str",
  "occupation": "string",
  "religion": "string",
  "mothersmaidenname": "string",
  "placeofbirth": "string",
  "identificationType": "string",
  "identificationNumber": "string",
  "identificationExpiry": "2026-10-23T02:08:37.947Z",
  "nin": "string",
  "diasporaClient": true,
  "enableOnlineAccess": true,
  "accountVerificationMessage": "string",
  "classCode": "string",
  "tier": 0,
  "accountNo": "string",
  "referenceNo": "string",
  "registeredCompanyNumber": "string",
  "contactPerson": "string",
  "minorRelationshipId": 0,
  "parentClientId": 0,
  "referredBy": "string",
  "pep": true,
  "sourceOfIncomeName": "string",
  "netWorth": 0,
  "emailIndemnity": true,
  "taxId": "string"
}

Clients on the system are identified as below;

  • Individual => I
  • Cooperate => C
  • Minor => M

    Minor clients must be registered under a parent

ClientType => I or C or M

Field Description or API to call
clientType "I" or "C" or "M"
clientGroupId" transId => /api/v1/getclientgroup/{clientType}
source account creation channel. It defaults to xfundfront
country code => /api/v1/getcountries
gender value => /api/v1/getgender
titleCode titleCode => /api/v1/gettitles
maritalstatus value => /api/v1/getmaritalstatus
nationality code => /api/v1/getcountries
identificationType code => /api/v1/getidentitytypes
pep political exposed person

sample Response payload

{
  "status": true,
  "message": "Success",
  "object": {
    "fullname": "Godwin Amadii",
    "clientType": "I",
    "surname": "Amadii",
    "clientGroupId": 1,
    "source": "xfundfront",
    "approved": false,
    "clientId": 3972,
    "firstname": "Godwin",
    "othernames": null,
    "contactPerson": null,
    "contactPersonEmail": null,
    "contactPersonPhoneNo": null,
    "dateOfBirthOrIncorporation": "2000-12-12T00:00:00",
    "agentCode": null,
    "emailAddress": "amadigodwin774@gmail.com",
    "alternateEmailAddress": null,
    "bvn": null,
    "chn": null,
    "crmId": null,
    "prospectiveClient": false,
    "address1": null,
    "address2": null,
    "city": null,
    "state": null,
    "country": "NGA",
    "zipcode": null,
    "mobileNumber": null,
    "gender": "M",
    "titleCode": null,
    "maritalstatus": null,
    "nationality": "NGA",
    "occupation": null,
    "religion": null,
    "mothersmaidenname": null,
    "placeofbirth": null,
    "identificationType": null,
    "identificationNumber": null,
    "nin": "10123345800",
    "diasporaClient": false,
    "enableOnlineAccess": true,
    "onlineAccessDate": null,
    "deactivated": false,
    "accountVerificationMessage": null,
    "houseHoldName": null,
    "partnerCode": null,
    "classCode": null,
    "tier": null,
    "identificationExpiry": null,
    "accountNo": "00253767",
    "referenceNo": null,
    "registeredCompanyNumber": null,
    "pep": false,
    "referralCode": "2378c4",
    "referredBy": null,
    "sourceOfIncomeName": null,
    "emailIndemnity": false,
    "taxId": null,
    "parentClientId": null,
    "minorRelationshipId": null,
    "netWorth": 0
  }
}

Endpoint: /api/v1/InternalService/updateclient

Method: POST

  • Update client

Endpoint: /api/v1/InternalService/getclient/{accountno}

Method: GET

  • Get client using the client account number

Request query param {accountno}: client xfund account number generated after a client is onboarded onto xfund

Endpoint: /api/v1/InternalService/getclientaccountinfo/{accountno}

Method: GET

  • Get new client account info

Request query param {accountno}: client xfund account number generated after a client is onboarded onto xfund

Endpoint: /api/v1/InternalService/getclients/{bvn}

Method: GET

  • Get client info using bvn(bank verification number)

Sample response payload

[
  {
    "fullname": "John Chinedu Adebayo",
    "bvn": "22777678901",
    "accountNo": "00682201"
  }
]

Endpoint: /api/v1/InternalService/getclientsbyphonenumber/{phonenumber}

Method: GET

  • returns client details

Sample response payload

[
  {
    "createdDate": "2022-09-16T18:43:11.597",
    "accountNo": "00645399",
    "fullname": "Movis Limited",
    "bvn": "000000",
    "approved": true
  }
]

Endpoint: /api/v1/InternalService/getclientsbycreateddate/{createddate}

Method: GET

  • returns client details

Sample response payload

[
  {
    "createdDate": "2025-08-04T11:36:13.64",
    "accountNo": "00818801",
    "fullname": "ITAPMMF",
    "bvn": null,
    "approved": true
  }
]

Endpoint: /api/v1/InternalService/createbankaccount/{accountno}

Method: POST

Request query param {accountno}: client xfund account number generated after client is onboarded onto xfund

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/InternalService/disableclientbankaccount/{accountno}/{bankaccounttransid}

Method: POST

  • Disable Client Bank Account using uniqueidentifyer

Request query param {accountno}: client xfund account number generated after client is onboarded onto xfund {bankaccounttransid}: transId in => /api/v1/InternalService/getclientbankaccounts/{accountno}

Respond Payload ( 200 status Code)

{
  "status": true,
  "message": "Success",
  "object": null
}

Endpoint: /api/v1/InternalService/createnextofkin/{accountno}

Request query param {accountno}: client xfund account number generated after client is onboarded onto xfund

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/InternalService/getclientbankaccounts/{accountno}

  • returns client bank accounts

Request query param
{accountno}: client xfund account number generated after client is onboarded onto xfund

Endpoint: /api/v1/InternalService/getvirtualaccounts/{accountno}
Method: GET

  • returns list of client virtual accounts

Request query param
{accountno}: client xfund account number generated after client is onboarded onto xfund

Sample response payload

[
  {
    "virtualAccountNo": "6190052272",
    "virtualAccountName": "Stephen Swash Phantom",
    "virtualAccountBankName": "",
    "virtualAccountCurrency": "NGN",
    "portfolioId": 0,
    "portfolioName": "",
    "isWallet": false
  }
]

Client document management

Endpoint: /api/v1/InternalService/getclientpendingdocuments/{accountno}

Method: GET

  • Get client pending documents

Request query param
{accountno}: client xfund account number generated after a client is onboarded onto xfund

Sample response payload

[
  {
    "document": "Account Opening Form",
    "uploaded": 0,
    "documentId": "85E2C5AF9E",
    "clientId": 3972
  },
  {
    "document": "Birth Cert",
    "uploaded": 0,
    "documentId": "11D162D32E",
    "clientId": 3972
  },
  {
    "document": "Employment Letter",
    "uploaded": 0,
    "documentId": "C413539CF3",
    "clientId": 3972
  }
]

uploaded status determines if client has uploaded specific document or not.

  • when 0 => document has not been uploaded
  • when 1 => document has been uploaded

Endpoint: /api/v1/InternalService/uploadclientdocument/{accountno}

Method: POST

  • Upload client document
  • Maximum file size is 5mb

Request query param
{accountno}: client xfund account number generated after a client is onboarded onto xfund

Request payload

  • Files: IForm File format for documents
  • DocumentId: documentId in /api/v1/InternalService/getclientpendingdocuments/{accountno}
  • Comment: comment

Portfolio Transaction 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

Portfolios 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/InternalService/getportfoliotypes

MutualFunds

Mutual funds have a portfolioType code of 2 or 3

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

Subscriptions and redemptions can be processed either through a client's wallet or directly through the designated portfolio account, depending on the transaction method configured.

  • Wallet-Based Transactions: For wallet-based subscriptions, the client's wallet must have sufficient funds to cover the subscription amount. Upon successful processing, the wallet is debited, and the corresponding amount is credited to the selected portfolio to complete the transaction.
  • Non-Wallet-Based Transactions: For transactions that do not use the client's wallet, the client must first fund the designated portfolio collection account before proceeding with the subscription.

mutualfund subscription no wallet

Endpoint: /api/v1/InternalService/clientmutualfundsubscriptionnowallet

Method: POST

  • Mutualfund subscription

Request payload

{
  "clientAccountNo": "string",
  "portfolioId": 0,
  "amount": 2147483647,
  "uniqueTrackingReferenceNo": "string"
}
Field Description
clientAccountNo client xfund account number
portfolioId portfolioId => /api/v1/getclientinvestiblemutualfundproducts
uniqueTrackingReferenceNo Unique tracking reference number to track duplicate entry
amount amount

Endpoint: /api/v1/InternalService/clientmutualfundsubscriptionnowallets

Method: POST

  • Handles mutual fund subscription (investment) requests submitted by clients. Captures details of new investments into a chosen portfolio with required validation rules.

Request payload

[
  {
    "clientAccountNo": "string",
    "schemeId": 2147483647,
    "amount": 2147483647,
    "transDate": "2026-10-23T06:14:13.383Z",
    "uniqueTrackingReferenceNo": "string"
  }
]

Fields: ClientAccountNo (string, required) – Identifies the client’s account. PortfolioId (int, required) – Unique identifier of the portfolio/fund being subscribed to. Amount (decimal, required) – Amount to be invested; must be greater than zero. TransDate (DateTime, default = Today) – Transaction date. For unitized funds, this must match the processing date; for money market funds, the rule is relaxed. UniqueTrackingReferenceNo (string, required, max length 50) – A globally unique reference for tracking the subscription request.

Validation: All required fields must be provided. Amount and PortfolioId must be greater than zero. Unitized fund subscriptions will be rejected if TransDate ≠ ProcessingDate.

Usage: This DTO should be used when calling the Subscription API endpoint to initiate new investments. Ensures transactions are validated before being processed and recorded.

sample response payload { "status": true, "message": "string", "object": "string" }

mutualfund subscription from wallet

Endpoint: /api/v1/InternalService/clientmutualfundsubscriptionfromwallet

Method: POST

  • Client subscription.
  • Debit wallet and credit mutualfund
  • Supply the client account number and the mutualfund schemeid

request payload { "clientAccountNo": "string", "portfolioId": 0, "amount": 2147483647, "uniqueTrackingReferenceNo": "string" }

Field Description
clientAccountNo client xfund account number
portfolioId portfolioId => /api/v1/getclientinvestiblemutualfundproducts
uniqueTrackingReferenceNo Unique tracking reference number to track duplicate entry
amount amount

review mutualfund redemption Endpoint: /api/v1/InternalService/reviewmutualfundredemption/{portfolioid}/{accountno}/{redemptionamount}

Method: GET

  • Review Mutualfund redemption

Request query param
{accountno}: client xfund account number generated after a client is onboarded onto xfund {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts {redemptionamount}: redemption amount

mutualfund rdemption no wallet

Endpoint: /api/v1/InternalService/clientmutualfundredemptionnowallet

Method: POST

  • Mutualfund redemption

request payload { "clientAccountNo": "string", "portfolioId": 0, "amount": 2147483647, "uniqueTrackingReferenceNo": "string" }

Field Description
clientAccountNo client xfund account number
portfolioId portfolioId => /api/v1/getclientinvestiblemutualfundproducts
uniqueTrackingReferenceNo Unique tracking reference number to track duplicate entry
amount amount

sample response payload { "status": true, "message": "string", "object": "string" }

Endpoint: /api/v1/InternalService/clientmutualfundredemptionnowallets

Method: POST

  • Handles mutual fund redemption requests submitted by clients.
  • Supports both partial and full redemptions with validation rules applied.

Request payload

[
  {
    "clientAccountNo": "string",
    "redemptionType": "s",
    "schemeId": 2147483647,
    "amount": 2147483647,
    "transDate": "2026-10-23T06:29:04.536Z",
    "uniqueTrackingReferenceNo": "string"
  }
]

Fields: ClientAccountNo (string, required) – Identifies the client’s account. RedemptionType (string, required) – Specifies whether the redemption is Partial ("P") or Full ("F"). PortfolioId (int, required) – Unique identifier of the portfolio/fund being redeemed. Amount (decimal, required) – Amount to redeem; must be greater than zero. TransDate (DateTime, default = Today) – Transaction date. For unitized funds, this must match the processing date; for money market funds, the rule is relaxed. UniqueTrackingReferenceNo (string, required, max length 50) – A globally unique reference for tracking the redemption request.

Validation: All required fields must be provided. Amount and PortfolioId must be greater than zero. Unitized fund transactions will be rejected if TransDate ≠ ProcessingDate.

Usage: This DTO should be used when calling the Redemption API endpoint to initiate client redemption requests. Ensures transactions are validated before being processed.

mutualfund rdemption to wallet

Endpoint: /api/v1/InternalService/clientmutualfundredemptiontowallet

Method: POST

  • Client redemption.
  • Debit mutualfund and Crebit wallet
  • Supply the client account number and the mutualfund schemeid

request payload

{
  "clientAccountNo": "string",
  "portfolioId": 0,
  "amount": 2147483647,
  "uniqueTrackingReferenceNo": "string"
}
Field Description
clientAccountNo client xfund account number
portfolioId portfolioId => /api/v1/getclientinvestiblemutualfundproducts
uniqueTrackingReferenceNo Unique tracking reference number to track duplicate entry
amount amount

mutualfund portfolio dividend mandate

Endpoint: /api/v1/InternalService/mutualfunddividendpayoutmandate

Method: POST

  • Mutualfund Dividend Payout Mandate
  • setup mutual fund mandate for a client portfolio

request payload { "portfolioId": 0, "accountNo": "string", "isCashPayout": true }

Field Description
accountNo client xfund account number
portfolioId portfolioId => /api/v1/getclientinvestiblemutualfundproducts
isCashPayout mandate instruction => either true or false

Portfolio Direct funding

Endpoint: /api/v1/InternalService/creditclientportfolio/{accountno}

Method: POST

Credit Client Portfolio

Request query param {accountno}: client xfund account number generated after a client is onboarded onto xfund

request payload

{
  "amount": 1000000000000000000,
  "portfolioId": 0,
  "narration": "string",
  "uniqueReferenceNo": "string"
}
Field Description
amount amount
portfolioId portfolioId => /api/v1/getclientinvestiblemutualfundproducts
uniqueReferenceNo custom unique reference number
narration narration

MutualFund query APIs

Endpoint: /api/v1/InternalService/getclientmutualfundonlinebalances/{accountno}

Method: GET

  • returns the client's mutualfund online balances per portfolio/product

Request query param
{accountno}: client xfund account number generated after a client is onboarded onto xfund

Endpoint: /api/v1/InternalService/getclientmutualfundonlinebalances/{portfolioid}/{accountno}

Method: GET

  • returns the client's mutualfund online balances per portfolio/product

Request query param
{accountno}: client xfund account number generated after a client is onboarded onto xfund {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/getfundlatestprice/{portfolioid}

Method: GET

  • returns the mutualfund latest prices and processingdate

Request query param
{portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/getclientmutualfundtransactions/{portfolioid}/{accountno}/{pagenumber}/{pagesize}

Method: GET

  • returns the paginated client's mutualfund transactions

Request query param
{accountno}: client xfund account number generated after a client is onboarded onto xfund {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/getclientmutualfundtransactions/{portfolioid}/{accountno}/{historicaldays}

Method: GET

  • Get N days Mutualfund Transaction History

Request query param

  • {accountno}: client xfund account number generated after a client is onboarded onto xfund
  • {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts
  • {historicaldays}: N number of days

Fixed income and liability

Liability products are identified with a portfolio type of 9.

Endpoint:/api/v1/getclientinvestiblefixedreturnproducts

Method: GET

  • returns the client's investible fixed return products
  • gets all investible liability products that clients can invest into

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"
  }
]

fixed income subscription

Endpoint:

  • /api/v1/InternalService/reviewfixedincomesubscriptionorder/{accountno}: review/preview fixed income subscription

  • /api/v1/InternalService/fixedincomesubscriptionnowallet/{accountno}

Method: POST

  • Fixed Income Liability Buy Order

query param {accountno} => xfund client account number

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/InternalService/getliabilityproducts/{portfolioid}
portfolioId portfolioId => /api/v1/getclientinvestiblefixedreturnproducts
currency code => /api/v1/getcurrencies
tenor tenor => /api/v1/InternalService/getproducttenor/{productid}
planCode custom description
isStp By default straight through process is true unless when disabled or set to false
  • /api/v1/InternalService/getproducttenor/{productid} as seen in tenor => {productid} is gotten from /api/v1/InternalService/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/InternalService/reviewfixedincomeredemptionorder/{accountno}: review/preview fixed icnoem redemption

  • /api/v1/InternalService/fixedincomeredemptionnowallet/{accountno}

Method: POST

  • Fixed Income Liability Sell Order

query param {accountno} => xfund client account number

request payload

{
  "purchaseReferenceNo": "string",
  "faceValue": 0,
  "isStp": true
}
Field Description or API to call
purchaseReferenceNo api/v1/InternalService/getfixedincomeproductonlinebalances/{portfolioid}/{accountno}
isStp straight through process instruction. Defaults to true
faceValue amount to redeem

purchaseReferenceNo can be retrieved from either of the below apis

  • /api/v1/InternalService/getfixedincomeproductbalances/{portfolioid}/{accountno} : returns the client's product balance as at the last valuation
  • /api/v1/InternalService/getfixedincomeproductonlinebalances/{portfolioid}/{accountno}: 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
  }
}

Fixed income and liability query APIs

Endpoint: /api/v1/InternalService/getliabilityproducts/{portfolioid}
Get list of liability products

Request query param

  • {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/getproducttenor/{productid}
Get list of product rate and tenor for fixed income investment.

Request query param

  • {productid}: productId in /api/v1/InternalService/getliabilityproducts/{portfolioid}

Endpoint: /api/v1/InternalService/getproductrateguide/{productid}
Get product rate guide showing investment principal, rate and tenor

Request query param

  • {productid}: productId in /api/v1/InternalService/getliabilityproducts/{portfolioid}

Endpoint: /api/v1/InternalService/getfixedincomeproductbalances/{portfolioid}/{accountno}
returns the client's product balance as at the last valuation

Request query param

  • {accountno}: client xfund account number generated after a client is onboarded onto xfund
  • {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/getfixedincomeproductonlinebalances/{portfolioid}/{accountno}
returns the client's product online balance

Request query param

  • {accountno}: client xfund account number generated after a client is onboarded onto xfund
  • {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/gettransactionorderstatus/{accountno}/{orderId}
returns liability transaction status

Request query param

  • {accountno}: client xfund account number generated after a client is onboarded onto xfund
  • {orderId}: referenceNo in /api/v1/InternalService/getfixedincomeproductonlinebalances or /api/v1/InternalService/getfixedincomeproductbalances

Endpoint: /api/v1/InternalService/gettotalcashinvestedinliabilityproduct/{portfolioid}/{accountno}/{startdate}/{enddate}
Get total cash invested in portfolioDto

Request query param

  • {accountno}: client xfund account number generated after a client is onboarded onto xfund
  • {portfolioid}: portfolioId in /api/v1/getclientinvestiblemutualfundproducts

Endpoint: /api/v1/InternalService/gettotalcashinvestedinportfolio/{accountno}/{startdate}/{enddate}
Get total invested or withdrawn in portfolio

Request query param

  • {accountno}: client xfund account number