Create a Paystack subaccount for each department that has its own bank account. Create a Transaction Split group per fee schedule listing each department subaccount and their flat amount. When a student pays, pass the split_code for that term's fee structure. Paystack settles each department directly. Store subaccount_codes in a departments table keyed by fee_type.
// Fee structure: NGN 50,000 total
// Tuition: 40,000 (main account)
// Library: 2,000 (library subaccount)
// Sports: 3,000 (sports subaccount)
// Lab: 5,000 (science lab subaccount)
async function createTermSplitGroup(term) {
var feeStructure = await db.feeStructures.findByTerm(term);
var subaccounts = [];
for (var dept of feeStructure.departments) {
var department = await db.departments.findById(dept.department_id);
subaccounts.push({
subaccount: department.subaccount_code,
share: dept.amount * 100, // kobo
});
}
var response = await fetch('https://api.paystack.co/split', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
name: term + ' fee split',
type: 'flat',
currency: 'NGN',
subaccounts,
bearer_type: 'account',
}),
});
var data = await response.json();
// Store split code for this term
await db.feeStructures.update(
{ split_code: data.data.split_code },
{ where: { term } }
);
return data.data.split_code;
}
// Student payment checkout
app.post('/api/fees/pay', async (req, res) => {
var { studentId, term, email } = req.body;
var feeStructure = await db.feeStructures.findByTerm(term);
var response = await fetch('https://api.paystack.co/transaction/initialize', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
email,
amount: feeStructure.total_amount * 100,
split_code: feeStructure.split_code,
metadata: { student_id: studentId, term },
}),
});
var data = await response.json();
res.json({ authorization_url: data.data.authorization_url });
});
This guide is part of the Paystack split payments guide.
KES 2,999
The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.
Start Paystack Course