Spot Loan Stacking Activities in near real-time
Track if your applicant has been stacking loan requests all over the network​
POST https://dev.creditchek.africa/v1/dln/consumer/loan-stacking
Every loan application carries a hidden story. Spectrum reads it first, surfacing concurrent borrowing activity, cross-lender exposure, and behavioural patterns that identify bad actors before they become your bad debt.
Report an applicant's loan request with this endpoint as soon as they apply and before disbursement. Each request is recorded on the Spectrum ledger against the applicant's BVN, so other lenders on the network can see how many places the applicant has been shopping — in near real-time.
The payload is intentionally small: just enough identity to match the applicant plus the requested loan. Guarantor details and every repayment/loan-performance field are excluded, and the report is not forwarded to First Central.
Request Parameters​
| Name | Position | Required | Description |
|---|---|---|---|
| token | Headers | True | app secret key |
| BVN | Body | True | applicant BVN (11 digits) |
| customerId | Body | True | your internal customer id for the applicant |
| firstName | Body | True | applicant first name |
| lastName | Body | True | applicant last name |
| dateOfBirth | Body | True | applicant date of birth |
| gender | Body | True | applicant gender |
| phoneNumber | Body | True | applicant phone number |
| Body | True | applicant email | |
| addressLine1 | Body | False | applicant address line 1 |
| loanAmount | Body | True | amount the applicant requested |
| loanDuration | Body | True | requested loan duration, e.g. 3 months |
| purpose | Body | False | reason the applicant gave for the loan |
| requestDate | Body | False | date the applicant made the request; defaults to when the report is received |
Only the fields above are accepted. A loan request is pre-disbursement, so the endpoint rejects the three groups of fields that belong to a disbursed loan:
- Guarantor —
guarantor,guarantorType,guarantorBVN, … - Repayment & loan performance —
outstandingBalance,overdueAmount,daysInArrears,minimumInstallment,nextDueDate,lastPaymentAmount,lastPaymentDate,repaymentFrequency,accountStatus,accountStatusDate,collateral,collateralType,collateralDetails,legalChallengeStatus,litigationDate - Employment & product —
employmentStatus,employerName,occupation,businessCategory,businessSector,nationality,NIN,driversLicense,passportNumber
Once the loan is disbursed, report the full record with Consumer Credit Reporting.
Enum values for the gender field
("Male", "Female");
---
curl --location 'https://dev.creditchek.africa/v1/dln/consumer/loan-stacking' \
--header 'token: JWR6t1qp8UcHrGVFyTPhrIWyayH+8eUQFSDkLih6lA2KXGo4CzGUx/zqPc8uhksb' \
--data-raw '{
"BVN": "12345678901",
"customerId": "CUST-1",
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "1990-01-01",
"gender": "Female",
"phoneNumber": "08030000000",
"email": "[email protected]",
"addressLine1": "1 Main St",
"loanAmount": 50000,
"loanDuration": "3 months",
"purpose": "Business expansion",
"requestDate": "2026-09-01"
}'
---
{
"status": true,
"data": {},
"message": "Loan request reported successfully",
"error": false
}
What other lenders see​
Every request is stored against the applicant's BVN. When a lender pulls that applicant's consumer report, the report includes a loanStacking summary of the requests reported across the network:
{
"loanStacking": {
"last7days": 1,
"last30days": 3,
"last90days": 5,
"all_time": 7,
"lenders": ["Lender A", "Lender B"],
"firstRequestDate": "2022-05-13T00:00:00.000Z",
"lastRequestDate": "2022-06-02T00:00:00.000Z"
}
}
| Field | Description |
|---|---|
| last7days | number of requests reported in the last 7 days |
| last30days | number of requests reported in the last 30 days |
| last90days | number of requests reported in the last 90 days |
| all_time | total number of requests reported |
| lenders | distinct lenders that reported a request (a single string if only one) |
| firstRequestDate | earliest request date on record |
| lastRequestDate | most recent request date on record |
Re-reporting the same request — same applicant, same lender and same requestDate — is ignored, so stacking counts are not inflated by duplicate submissions. requestDate accepts DD/MM/YYYY, DD-MM-YYYY or ISO-8601; it is normalised before it is stored.
Validation error​
The payload is validated before it is stored. A missing required field, or an unexpected field such as guarantor or employmentStatus, is rejected:
{
"status": false,
"message": "guarantor is not allowed",
"error": true,
"data": {}
}