Create a Paystack subaccount for each fund (welfare fund, investment fund, operational expenses). When a member contributes, pass a Transaction Split that routes the contribution breakdown to each subaccount. Store each member's contribution in your database. For dividends or loan payouts, use Paystack bulk transfers to pay multiple members at once.
// Monthly contribution: NGN 5,000
// Savings fund: 3,000 (60%)
// Welfare fund: 1,000 (20%)
// Operational: 1,000 (20% stays in main account)
app.post('/api/contributions', async (req, res) => {
var { memberId, email } = req.body;
var group = await db.groups.findByMemberId(memberId);
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: 500000, // NGN 5,000 in kobo
split_code: group.contribution_split_code, // Pre-created split group
metadata: {
member_id: memberId,
group_id: group.id,
contribution_month: new Date().toISOString().slice(0, 7),
},
}),
});
var data = await response.json();
res.json({ authorization_url: data.data.authorization_url });
});
// On charge.success: record the contribution
if (event.event === 'charge.success') {
var meta = event.data.metadata;
if (meta?.member_id) {
await db.contributions.create({
member_id: meta.member_id,
group_id: meta.group_id,
month: meta.contribution_month,
amount: event.data.amount / 100,
reference: event.data.reference,
status: 'paid',
});
// Update member's total savings balance
await db.memberBalances.increment({ member_id: meta.member_id, amount: 3000 }); // Savings portion
}
}
// Quarterly dividend payout via bulk transfer
async function payDividends(groupId, dividendPerMember) {
var members = await db.members.findAll({ where: { group_id: groupId, status: 'active' } });
var transfers = members.map(member => ({
amount: Math.round(dividendPerMember * 100),
reference: 'div_' + groupId + '_' + member.id + '_' + Date.now(),
reason: 'Q2 2026 dividend',
recipient: member.paystack_recipient_code,
}));
var response = await fetch('https://api.paystack.co/transfer/bulk', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ currency: 'NGN', source: 'balance', transfers }),
});
var data = await response.json();
return data;
}
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
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