Date: January 22, 2026 Version: 1.0
This document outlines the changes made to integrate new and updated NITECH (InterfaceX) endpoints into the Cardinalstone Registrars backend system.
NITECH Endpoint: Verifyshareholderwarrants
API Route: POST /api/registrars/verifyShareholderWarrants
Authentication: Required (Bearer Token)
Request Body:
{
"accountNumber": 12345,
"registerID": 100,
"warrantType": "DW"
}| Parameter | Type | Required | Description |
|---|---|---|---|
| accountNumber | int | Yes | The holder's account number |
| registerID | int | Yes | The register ID |
| warrantType | string | Yes | Warrant type: DW (Dividend Warrant), IW (Interest Warrant), or RW (Rights Warrant) |
Response: Status OK or ErrorMessage
NITECH Endpoint: GetHolderTypes
API Route: GET /api/registrars/getHolderTypes
Authentication: Not required
Request Parameters: None
Response:
[
{
"HolderTypeId": "string",
"HolderTypeName": "string",
"HolderTypeCategory": "string"
}
]NITECH Endpoint: Getregisterrange
API Route: GET /api/registrars/getRegisterRange
Authentication: Not required
Request Parameters (Query):
| Parameter | Type | Required | Description |
|---|---|---|---|
| registerID | int | Yes | The register ID |
| asatDate | string | Yes | As-at date in yyyy-mm-dd format |
Example: /api/registrars/getRegisterRange?registerID=100&asatDate=2024-09-18
Response:
[
{
"TotalCount": 500,
"Units": 1000000.00,
"BeginRange": 1,
"EndRange": 1000,
"RangeId": 1
}
]NITECH Endpoint: GetHolderTypeAnalysis
API Route: GET /api/registrars/getHolderTypeAnalysis
Authentication: Not required
Request Parameters (Query):
| Parameter | Type | Required | Description |
|---|---|---|---|
| registerID | int | Yes | The register ID |
| asatDate | string | Yes | As-at date in yyyy-mm-dd format |
Example: /api/registrars/getHolderTypeAnalysis?registerID=100&asatDate=2024-09-18
Response:
[
{
"CompanyName": "string",
"ShareHolderName": "string",
"ShareHolderAddress": "string",
"TotalUnits": 50000.00,
"TotalUnitsDec": 50000.0000,
"PercentUnits": 5.25,
"PercentUnitsDec": 5.2500,
"AccountNumber": 12345,
"RegisterId": 100,
"HolderTypeName": "Individual"
}
]NITECH Endpoint: GetHolderByUnitPercent
API Route: GET /api/registrars/getHolderByUnitPercent
Authentication: Not required
Request Parameters (Query):
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| registerID | int | Yes | - | The register ID |
| asatDate | string | Yes | - | As-at date in yyyy-mm-dd format |
| xabove | int | No | 0 | Minimum units/percentage threshold |
| pageNumber | int | No | 1 | Page number for pagination |
| numberInPage | int | No | 50 | Number of records per page |
| byPercent | bool | No | false | If true, filter by percentage; if false, filter by units |
Example: /api/registrars/getHolderByUnitPercent?registerID=100&asatDate=2024-09-18&xabove=1000&pageNumber=1&numberInPage=50&byPercent=false
Response:
[
{
"CompanyName": "string",
"ShareHolderName": "string",
"ShareHolderAddress": "string",
"TotalUnits": 50000.00,
"TotalUnitsDec": 50000.0000,
"PercentUnits": 5.25,
"PercentUnitsDec": 5.2500,
"AccountNumber": 12345,
"RegisterId": 100,
"TotalPage": 10
}
]NITECH Endpoint: gettotalholderscount (with StateName output)
API Route: GET /api/registrars/getTotalHoldersCountByState
Authentication: Not required
Request Parameters (Query):
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| registerID | int | Yes | - | The register ID |
| asatDate | string | Yes | - | As-at date in yyyy-mm-dd format |
| active | bool | No | true | Filter by active holders |
Example: /api/registrars/getTotalHoldersCountByState?registerID=100&asatDate=2024-09-18&active=true
Response:
[
{
"Units": 500000.00,
"TotalCount": 150,
"StateName": "Lagos"
}
]NITECH Endpoint: getholderdividenddetails
API Route: GET /api/registrars/getHolderDiv (existing)
Changes Made:
- Added new parameter:
CloseStatus - Updated endpoint URL from
GetHolderDividendDetailstogetholderdividenddetails
New Parameter:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| CloseStatus | int | No | 0 | Filter by close status: 0 = All, 1 = Not Closed, 2 = Closed |
Updated Response Fields:
Verified(bool)Reissue(bool)DateVerified(string)DateReissue(string)DividendClosed(bool)DateClosed(string)
The following endpoints were already implemented and match the NITECH specification:
| Endpoint | API Route | Description |
|---|---|---|
ValidateUser |
Internal | Authentication - returns WebToken |
GetMandatedAccountsByRegisterId |
GET /api/registrars/getMandatedAccountsByRegisterId |
Get mandated accounts by register |
GetHolderKYC |
GET /api/registrars/getHolderKYC |
Get holder KYC details |
GetHolderTotalUnit |
GET /api/registrars/getHolderTotalUnit |
Get holder total units |
GetHolderCertificateHistory |
GET /api/registrars/getHolderCert |
Get holder certificate history |
GetMandatedHolderWithUnpaidDividend |
POST /api/registrars/getMandatedHolderWithUnpaidDividend |
Get holders with unpaid dividends |
GetDividendDetailsByRegisterAndPayNumber |
GET /api/registrars/getDividendDetailsByRegisterAndPayNumber |
Get dividend details |
GetWarrantEReplaceList |
POST /api/registrars/getWarrantEReplaceList |
Get warrant replacement list |
GetCompanyInfo |
GET /api/registrars/ixtracRegister |
Get company/register information |
GetEdividendPayments |
POST /api/registrars/getEDividendPayments |
Get e-dividend payments |
UpdateHolderMandate |
POST /api/registrars/updateKYCMandate |
Update holder mandate |
InsertOnlineDematShareholder |
POST /api/registrars/onlineDematShareholder |
Insert demat shareholder |
InsertOnlineDematCertificate |
POST /api/registrars/onlineDematCertificate |
Insert demat certificate |
gettotalholderscount |
GET /api/registrars/getTotalHoldersCount |
Get total holders count |
gettopxshareholdersbyholding |
GET /api/registrars/getTopShareholdersByHolding |
Get top shareholders |
getdividendhistorybyregisterid |
GET /api/registrars/getDividendHistoryByRegisterId |
Get dividend history |
UpdateHolderOldAccountNumber |
POST /api/registrars/updateHolderOldAccountNumber |
Update old account number |
All NITECH API calls require two tokens:
- Tokenkey - Static API token from environment variable
IXTRAC_TOKEN - WebToken - Dynamic token obtained from
ValidateUserendpoint
The system automatically handles token management internally.
All date parameters must be in yyyy-mm-dd format (e.g., 2024-09-18).
Several endpoints use a SearchOption parameter with the following values:
| Code | Description |
|---|---|
| A | Account Number |
| N | Shareholder Name |
| C | Clearing Number (CSCS) |
| I | RIN Number |
| P | Phone Number |
| B | BVN |
| R | Register ID |
| O | Old Account Number |
| E | |
| T | Holder Type ID |
| Code | Description |
|---|---|
| DW | Dividend Warrant |
| IW | Interest Warrant |
| RW | Rights Warrant |
New Methods Added:
verifyShareholderWarrants($payload)- Line ~4339getHolderTypes()- Line ~4370getRegisterRange($payload)- Line ~4395getHolderTypeAnalysis($payload)- Line ~4420getHolderByUnitPercent($payload)- Line ~4445getTotalHoldersCountByState($payload)- Line ~4480
Updated Methods:
GetHolderDiv($payload)- AddedCloseStatusparameter, updated endpoint URL
New Methods Added:
verifyShareholderWarrants($payload)- Line ~3810getHolderTypes()- Line ~3820getRegisterRange($payload)- Line ~3835getHolderTypeAnalysis($payload)- Line ~3850getHolderByUnitPercent($payload)- Line ~3865getTotalHoldersCountByState($payload)- Line ~3880
New Routes Added:
POST /api/registrars/verifyShareholderWarrants- Line ~15115GET /api/registrars/getHolderTypes- Line ~15170GET /api/registrars/getRegisterRange- Line ~15200GET /api/registrars/getHolderTypeAnalysis- Line ~15260GET /api/registrars/getHolderByUnitPercent- Line ~15320GET /api/registrars/getTotalHoldersCountByState- Line ~15400
-
Get Holder Types:
curl -X GET "http://localhost/api/registrars/getHolderTypes" -
Get Register Range:
curl -X GET "http://localhost/api/registrars/getRegisterRange?registerID=100&asatDate=2024-09-18" -
Get Holder Type Analysis:
curl -X GET "http://localhost/api/registrars/getHolderTypeAnalysis?registerID=100&asatDate=2024-09-18" -
Get Holder By Unit Percent:
curl -X GET "http://localhost/api/registrars/getHolderByUnitPercent?registerID=100&asatDate=2024-09-18&pageNumber=1&numberInPage=50" -
Get Total Holders Count By State:
curl -X GET "http://localhost/api/registrars/getTotalHoldersCountByState?registerID=100&asatDate=2024-09-18" -
Verify Shareholder Warrants (requires auth):
curl -X POST "http://localhost/api/registrars/verifyShareholderWarrants" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"accountNumber": 12345, "registerID": 100, "warrantType": "DW"}'
- All new endpoints follow the existing code patterns and conventions in the codebase.
- Error handling is consistent with existing implementations using Guzzle exception handling.
- The
ValidateUserendpoint is called automatically for each API request to obtain a freshWebToken. - Environment variable
IXTRAC_BASE_URLshould point to the NITECH InterfaceX API base URL. - Environment variable
IXTRAC_TOKENshould contain the static Tokenkey for authentication.
For questions or issues regarding this integration, contact the development team.