Overview
Parents and guardians browse registered schools, pick a fee category, and pay. Unlike bill purchases, school fee payments don't debit the wallet directly — they go through a hosted checkout (card or bank transfer), and Slimpay confirms payment server-to-server before remitting to the school.
List schools
/schools
Public
curl "https://app.slimpay.ng/api/v1/schools?state=lagos&type=secondary"
/schools
| Method | Path | Purpose |
|---|---|---|
| GET | /schools/{school_id} | School profile |
| GET | /schools/{school_id}/services | Fee categories for this school (tuition, levies, hostel, etc.) |
| GET | /schools/{school_id}/status | Whether the school is active and accepting payments |
| POST | /schools/onboard | Register a new school for review |
/schools/{school_id}
/schools/{school_id}/services
/schools/{school_id}/status
Pay a school fee
/schools/{school_id}/payments
Requires Auth
Initiates a checkout rather than debiting the wallet — no transaction_pin needed here. The response includes a checkout_reference your client passes to the checkout SDK (card) or displays as a bank-transfer reference; Slimpay's webhook confirms payment and remits automatically once it lands.
curl https://app.slimpay.ng/api/v1/schools/42/payments \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"school_service_id": 3,
"student_name": "Chidi Eze",
"student_class": "JSS 2",
"student_id": "STU-0042",
"amount": 45000,
"payer_name": "Amaka Okonkwo",
"payer_email": "amaka@example.com"
}'
/schools/{school_id}/payments
{
"status": true,
"data": {
"checkout_reference": "SCH-8F2A1C90",
"amount": 45000,
"platform_fee": 675,
"school_net": 44325
}
}
Schools with student-lookup enabled will validate student_id/student_name against their own records as part of this call, so receipts match what the school expects. If validation fails, the response explains why rather than silently accepting an unmatched student record.
docs