Skip to main content

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​

NamePositionRequiredDescription
tokenHeadersTrueapp secret key
BVNBodyTrueapplicant BVN (11 digits)
customerIdBodyTrueyour internal customer id for the applicant
firstNameBodyTrueapplicant first name
lastNameBodyTrueapplicant last name
dateOfBirthBodyTrueapplicant date of birth
genderBodyTrueapplicant gender
phoneNumberBodyTrueapplicant phone number
emailBodyTrueapplicant email
addressLine1BodyFalseapplicant address line 1
loanAmountBodyTrueamount the applicant requested
loanDurationBodyTruerequested loan duration, e.g. 3 months
purposeBodyFalsereason the applicant gave for the loan
requestDateBodyFalsedate the applicant made the request; defaults to when the report is received
Minimal payload

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");
Example Request
---
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"
}'
---
Response
{
"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 (inside the consumer report)
{
"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"
}
}
FieldDescription
last7daysnumber of requests reported in the last 7 days
last30daysnumber of requests reported in the last 30 days
last90daysnumber of requests reported in the last 90 days
all_timetotal number of requests reported
lendersdistinct lenders that reported a request (a single string if only one)
firstRequestDateearliest request date on record
lastRequestDatemost 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:

Error Response
{
"status": false,
"message": "guarantor is not allowed",
"error": true,
"data": {}
}