Loan Status & Parent SSO
Check financing status without EdPay loan GUIDs in your UI, and optionally let parents skip an EdPay login screen entirely.
Loan status by student
GET /api/partner/schools/{externalSchoolId}/students/{externalStudentId}/loansFinancing status for a student, looked up with your externalStudentId, no
EdPay internal loan GUID required in your UI.
Parents may complete financing in EdPay’s own flow or your embedded one; either way, your dashboard can show status via this endpoint.
Headers
| Header | Value |
|---|---|
Accept | application/json |
X-EdPay-Api-Key | {partnerApiKey} |
X-EdPay-Api-Secret | {partnerApiSecret} |
Response 200
Per the collection’s description, expect:
- Application number
- Requested amount and outstanding balance
- Status, one of
Draft,Submitted,UnderReview,Approved,Rejected,Disbursed,Active,Closed,PendingManualReview,Cancelled - Whether the parent has accepted loan terms
- Whether the repayment mandate is set up
- Whether the loan has been disbursed
This collection doesn’t include a captured example response, so exact field names aren’t listed here, use Try it below to see the live shape from staging.
Try it
Create parent SSO session
POST /api/partner/sso/parent-sessionServer-to-server only, call after you’ve authenticated the parent on your own platform. Returns a short-lived access token for your client to use, so the parent can complete BVN verification, credit assessment, and the loan application without ever seeing an EdPay login screen.
Requires the CanProvisionParents scope. Never call this from a browser or
mobile app with your partner secret, it’s meant to be called from your backend,
after your own auth check.
Headers
| Header | Value |
|---|---|
Accept | application/json |
X-EdPay-Api-Key | {partnerApiKey} |
X-EdPay-Api-Secret | {partnerApiSecret} |
Content-Type | application/json |
Request body
| Field | Description |
|---|---|
externalUserId | Your identifier for this parent/guardian. |
firstName / lastName | Parent’s name. |
email | Parent’s email. |
phoneNumber | Parent’s phone number. |
{
"externalUserId": "PARENT-USER-9921",
"firstName": "Chidi",
"lastName": "Eze",
"email": "chidi@example.com",
"phoneNumber": "08099887766"
}Response 200
{
"success": true,
"message": "Parent session created",
"data": {
"userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"accessTokenExpiry": "2026-07-23T12:00:00Z",
"isNewParent": true,
"isBvnVerified": false,
"message": "Use accessToken as Bearer token for /api/loans endpoints."
},
"errors": [],
"statusCode": 200
}| Field | Description |
|---|---|
userId | EdPay’s internal GUID for the parent. |
accessToken | Short-lived JWT, pass to your client as the parentAccessToken for /api/loans and /api/auth/bvn/* calls. |
accessTokenExpiry | When accessToken expires. |
isNewParent | true if this call created the parent account. |
isBvnVerified | true if BVN is already verified, if so, your client can skip straight to credit assessment. |
Since this endpoint is meant to run server-to-server, treat any token you paste into Try it below as a test credential only, it’s stored in your browser’s localStorage like the rest of the playground’s fields, same as testing any other API from a browser-based tool.