Websites7 min read

Wave Business marketplace splits payments: 2026

Mohamed Bah·Fondateur, Kolonell
June 20, 2026
Share:
Wave Business marketplace splits payments: 2026

Wave Business marketplace splits payments: 2026

Websites

Africa multi-vendor marketplace = needs splits payments: split platform commission + vendor amount. Wave Business API enables via custom logic. Here's the 2026 architecture.

TL;DR

- Marketplace = 5-25% commission per transaction.

- Wave: no native splits, custom logic required.

- Architecture: escrow + vendor payouts.

- Rigorous reconciliation = critical.

Marketplace splits architecture

`

  • Customer pays 100K XOF (product):
  • Wave Checkout: 100K → platform account
  • Platform receives:
  • 100K - 1K (Wave fees) = 99K
  • Platform commission 10%: 10K
  • Vendor remainder: 89K
  • Vendor payout (D+7 per policy):
  • Wave Business → vendor: 89K
  • Payout fees: 0-500 XOF

`

Marketplace DB schema

`sql

-- Order

CREATE TABLE orders (

id UUID PRIMARY KEY,

customer_id UUID,

vendor_id UUID,

amount_total INT, -- 100000 XOF

amount_commission INT, -- 10000 (10%)

amount_vendor INT, -- 89000 (after Wave fees)

status ENUM ('pending_payment', 'paid', 'shipped', 'delivered', 'refunded'),

wave_session_id VARCHAR,

wave_transaction_id VARCHAR,

paid_at TIMESTAMP,

payout_to_vendor_at TIMESTAMP,

created_at TIMESTAMP

);

-- Vendor account

CREATE TABLE vendors (

id UUID PRIMARY KEY,

name VARCHAR,

wave_phone VARCHAR, -- vendor Wave number

bank_account VARCHAR, -- bank alternative

pending_payout INT DEFAULT 0,

total_payout INT DEFAULT 0

);

`

Vendor payout via API

`typescript

async function payoutVendor(vendorId: string, orderId: string) {

const order = await db.orders.findOne({ id: orderId });

const vendor = await db.vendors.findOne({ id: vendorId });

if (order.status !== 'delivered') {

throw new Error('Order not delivered yet');

}

if (order.payout_to_vendor_at) {

throw new Error('Already paid out');

}

// Wave B2B transfer

const res = await axios.post(

${WAVE_API}/payouts,

{

currency: 'XOF',

receive_amount: order.amount_vendor.toString(),

mobile: vendor.wave_phone,

name: vendor.name,

client_reference: payout_${orderId},

},

{

headers: { Authorization: Bearer ${WAVE_TOKEN} },

}

);

// Update DB

await db.orders.updateOne(

{ id: orderId },

{

payout_to_vendor_at: new Date(),

payout_wave_id: res.data.id,

}

Need a professional website?

Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.

);

await db.vendors.updateOne(

{ id: vendorId },

{

$inc: { pending_payout: -order.amount_vendor, total_payout: order.amount_vendor },

}

);

return res.data;

}

`

Batch payouts cron

`typescript

// Every Friday: payout vendors orders delivered +7 days

cron.schedule('0 9 * * 5', async () => {

const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 3600 * 1000);

const ordersToPayout = await db.orders.find({

status: 'delivered',

payout_to_vendor_at: null,

deliveredAt: { $lt: sevenDaysAgo },

});

for (const order of ordersToPayout) {

try {

await payoutVendor(order.vendor_id, order.id);

await sendVendorEmail(order.vendor_id, {

subject: 'Payment received',

body: ${order.amount_vendor} XOF for order ${order.id},

});

} catch (err) {

console.error(Payout failed: ${order.id}, err);

await alertAdmin('Payout failed', err);

}

await sleep(1000); // Rate limit

}

});

`

Commission calculation

`typescript

function calculateSplit(grossAmount: number, commissionRate: number) {

// Wave fees: 1% of gross

const waveFee = Math.ceil(grossAmount * 0.01);

const netAfterWave = grossAmount - waveFee;

// Platform commission: on net after Wave

const platformCommission = Math.ceil(netAfterWave * commissionRate);

// Vendor remainder

const vendorAmount = netAfterWave - platformCommission;

return {

grossAmount,

waveFee,

netAfterWave,

platformCommission,

vendorAmount,

};

}

// Example: 100K XOF, 10% commission

const split = calculateSplit(100000, 0.10);

// { grossAmount: 100000, waveFee: 1000, netAfterWave: 99000,

// platformCommission: 9900, vendorAmount: 89100 }

`

FAQ

Q: Native Wave splits?

A: No. Custom logic required in platform.

Q: Vendor payout delay?

A: Variable. Standard: 7 days after delivery + return period.

Q: Cash flow risk?

A: Yes. Platform holds cash between customer payment and vendor payout. Critical cash flow management.

Conclusion

2026 Wave Business marketplace splits: custom logic + escrow + cron payouts. Rigorous architecture + reconciliation = success. Splits calc + cash flow management = critical.

Tags:#Wave#Marketplace#Splits#Payments#Commission
Share:

Mohamed Bah

Fondateur, Kolonell

Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.