For percentage commission: set percentage_charge on the subaccount to the vendor's share (e.g., 80%) — your platform keeps the 20% residual. For flat service fee: pass transaction_charge in kobo in the transaction initialize call. For tiered commission: calculate the vendor share dynamically in your backend before initializing. Use bearer: "account" so the Paystack processing fee comes from your platform share.
The standard model for most marketplaces. Vendor gets a percentage share; your platform keeps the rest.
// Vendor gets 80%, platform keeps 20%
// Set percentage_charge = 80 on the subaccount when creating it
app.post('/api/checkout', async (req, res) => {
var { vendorSubaccountCode, amount, email } = req.body;
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: amount * 100,
subaccount: vendorSubaccountCode,
bearer: 'account', // Platform absorbs Paystack processing fee
reference: 'order_' + Date.now(),
}),
});
var data = await response.json();
res.json({ authorization_url: data.data.authorization_url });
});
On NGN 10,000 with 20% commission: vendor gets NGN 8,000 — platform earns NGN 2,000 minus Paystack fee.
Best for delivery apps and bookings where a fixed platform fee makes more sense than a percentage.
var SERVICE_FEE_KOBO = 20000; // NGN 200
body: JSON.stringify({
email,
amount: amount * 100,
subaccount: vendorSubaccountCode,
transaction_charge: SERVICE_FEE_KOBO, // Your flat fee
bearer: 'account',
reference: 'order_' + Date.now(),
})
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
function getVendorShare(vendor) {
var monthly = vendor.monthly_sales_ngn;
if (monthly >= 5000000) return 92; // Top sellers: 8% commission
if (monthly >= 1000000) return 88; // Mid-tier: 12% commission
return 85; // New sellers: 15% commission
}
// Pass calculated share per transaction
body: JSON.stringify({
email,
amount: amount * 100,
subaccount: vendor.subaccount_code,
percentage_charge: getVendorShare(vendor), // Override subaccount default
bearer: 'account',
reference: 'order_' + Date.now(),
})
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