Loan Tracking
List, summarize, inspect, or cancel a parent’s loan applications.
My loans (list)
GET /api/loans/myPaginated list of the parent’s loans.
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Query parameters
| Parameter | Description |
|---|---|
status | Optional filter by loan status. |
fromDate / toDate | Optional date range filter. |
page | Default 1. |
pageSize | Default 20. |
Response 200
{
"success": true,
"message": "Request successful",
"data": {
"items": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"applicationNumber": "LN-20250901-0001",
"type": "K-12",
"schoolName": "Greenfield Academy",
"studentName": "Ada Eze",
"loanAmount": 250000.00,
"outstandingBalance": 281250.00,
"status": "Submitted",
"isDisbursed": false,
"createdAt": "2025-09-01T10:30:00Z"
}
],
"page": 1,
"pageSize": 20,
"totalCount": 1,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false
},
"errors": [],
"statusCode": 200
}Try it
Dashboard summary
GET /api/loans/dashboardOutstanding balance, total received, total paid, and a recent activity feed.
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Response 200
{
"success": true,
"message": "Request successful",
"data": {
"outstandingLoanBalance": 187500.00,
"totalAmountReceived": 250000.00,
"totalAmountPaid": 93750.00,
"recentActivity": [
{
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"applicationNumber": "LN-20250901-0001",
"type": "K-12",
"schoolName": "Greenfield Academy",
"amount": 250000.00,
"status": "Active",
"occurredAt": "2025-09-15T08:00:00Z",
"eventDescription": "Loan disbursed"
}
]
},
"errors": [],
"statusCode": 200
}Try it
Loan detail
GET /api/loans/{loanId}Full loan view: amounts, progress stages, available actions, repayment schedule, and payment history.
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Response 200
{
"success": true,
"message": "Request successful",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"applicationNumber": "LN-20250901-0001",
"type": "K-12",
"schoolName": "Greenfield Academy",
"studentName": "Ada Eze",
"className": "JSS 2",
"academicSession": "2025/2026",
"loanType": "Termly",
"term": "FirstTerm",
"requestedAmount": 250000.00,
"tuitionAmount": 250000.00,
"discountAmount": 0,
"loanAmount": 250000.00,
"isCustomAmount": false,
"interestRate": 12.5,
"totalRepayableAmount": 281250.00,
"monthlyRepaymentAmount": 46875.00,
"tenure": "SixMonths",
"tenureMonths": 6,
"status": "Submitted",
"dateSubmitted": "2025-09-01T10:30:00Z",
"termsAccepted": true,
"isMandateSetup": false,
"isDisbursed": false,
"outstandingBalance": 281250.00,
"dateDeclined": null,
"declineReason": null,
"dateCancelled": null,
"cancellationReason": null,
"batchId": null,
"batchReference": null,
"nextOfKin": {
"name": "Ngozi Eze",
"phone": "08012345678",
"relationship": "Spouse",
"occupation": "Teacher"
},
"documents": {
"hasExamInvoice": false,
"hasAdmissionLetter": false,
"hasUtilityBill": false
},
"progressStages": ["Application", "Under Review", "Approved", "Disbursed"],
"currentStageIndex": 0,
"availableActions": ["CancelLoan"],
"repaymentSchedule": [],
"paymentHistory": [],
"monthlyInterestRatePercent": 2.08,
"totalInterestAmount": 31250.00,
"insuranceFeePercent": 0,
"insuranceFeeAmount": 0,
"firstInstallmentAmount": 46875.00
},
"errors": [],
"statusCode": 200
}Once approved and disbursed, expect status: "Active", currentStageIndex: 3,
availableActions: ["MakePayment", "DownloadStatement"], and populated
repaymentSchedule / paymentHistory arrays, see Repayment
schedule and
Payment history for
their shapes.
Try it
Cancel loan
POST /api/loans/{loanId}/cancelParent withdraws their application, only possible before disbursement.
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Content-Type | application/json |
Request body
| Field | Description |
|---|---|
reason | Free-text cancellation reason. |
{
"reason": "Applied by mistake"
}Response 200
{
"success": true,
"message": "Request successful",
"data": "Application cancelled.",
"errors": [],
"statusCode": 200
}