Holding + N branches: why one Wave Business account is never enough in 2026
Real audit case from March 2026: a Dakar restaurant group (5 brands, 1 parent holding, 1 central kitchen, 28 employees) was using a SINGLE Wave Business account to collect payments across 5 outlets. Consequences:
- Impossible to attribute revenue by brand without manual reconciliation
- Fragile Wave KYB: the account bears the holding name, not the brand — BCEAO could requalify
- No treasury separation: a dispute on brand A freezes all flows
- Tax audit impossible: 5 businesses but 1 single journal
The correct architecture: 1 Wave Business account per legal entity (branch or subsidiary LLC), with group-side consolidation. Here is how.
H2: Legal model → Wave model (1:1 mapping)
The BCEAO rule on electronic money accounts is clear: 1 account = 1 KYB-identified legal entity. So your Wave architecture must mirror your legal structure.
Case 1 — Holding + distinct LLC subsidiaries (recommended)
- 1 Wave Business account per subsidiary LLC (separate KYB)
- 1 holding Wave Business account (management fee collection)
- Pros: ring-fenced treasuries, own tax filing, transparency
- Cons: 5 KYBs = 5 files (1-2 weeks per file)
Case 2 — Branches of a single entity
- Single Wave account (KYB on parent entity)
- Platform-side virtual sub-accounts (
shop_idtags) - Pros: 1 KYB, fast start
- Cons: no legal flow separation, fragile in case of dispute
Case 3 — Franchise / partnership
- Each franchisee has their own Wave Business account (franchisee KYB)
- Central platform = payment orchestration, not custodial
- Pros: no payment aggregator risk
- Cons: more complex reporting
For 9 out of 10 holdings I advise in West Africa, case 1 (distinct LLC subsidiaries) remains the most legally and fiscally defensible.
H2: Payment routing (platform-side orchestration)
The challenge: at checkout creation, how do you know which Wave Business account the payment should go to? Answer: a platform-side routing service that resolves shop_id → wave_account_id → wave_api_key.
`typescript
// Multi-shop checkout routing service
type ShopRoute = {
shopId: string;
waveAccountId: string;
waveApiKey: string; // encrypted at rest (KMS / Vault)
callbackUrl: string;
};
async function createCheckoutForShop(
shopId: string,
amount: number,
invoiceRef: string
): Promise
const route = await db.shopRoute.findUnique({ where: { shopId } });
if (!route) throw new Error(Unknown shop: ${shopId});
const apiKey = await kms.decrypt(route.waveApiKey);
const checkout = await fetch('https://api.wave.com/v1/checkout/sessions', {
method: 'POST',
headers: {
'Authorization': Bearer ${apiKey},
'Content-Type': 'application/json',
'Idempotency-Key': co_${shopId}_${invoiceRef},
},
body: JSON.stringify({
amount: amount.toString(),
currency: 'XOF',
success_url: https://shop${shopId}.ex/thanks,
error_url: https://shop${shopId}.ex/error,
client_reference: invoiceRef,
metadata: { shop_id: shopId, account_id: route.waveAccountId },
}),
});
const { wave_launch_url } = await checkout.json();
return wave_launch_url;
}
`
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
Critical points:
- Store Wave API keys per shop encrypted at rest (AWS KMS, HashiCorp Vault, or Neon
pgcrypto) - Never plaintext API keys in DB or application code
- Audit trail of every call (who triggered which checkout for which shop)
H2: Multi-account webhooks (1 endpoint, N accounts)
Wave allows pointing multiple Business accounts to the same webhook endpoint. The payload contains account_id which enables server-side routing.
`typescript
// Single webhook endpoint for N Wave accounts
export async function POST(req: Request) {
const sig = req.headers.get('Wave-Signature');
const body = await req.text();
const event = JSON.parse(body);
const accountId = event.data?.account_id;
const route = await db.shopRoute.findFirst({
where: { waveAccountId: accountId },
});
if (!route) return new Response('Unknown account', { status: 404 });
const secret = await kms.decrypt(route.webhookSecret);
if (!verifyWaveSignature(body, sig, secret)) {
return new Response('Invalid signature', { status: 401 });
}
// Persist event scoped to shop
await db.payment.create({
data: {
shopId: route.shopId,
waveEventId: event.id,
amount: event.data.amount,
status: event.data.status,
invoiceRef: event.data.client_reference,
},
});
return new Response('OK');
}
`
H2: Group accounting consolidation
On the holding reporting side, you want to see consolidated revenue. Method: a nightly ETL (cron 03:00) that aggregates payments from all shops into a group_revenue view with attribution by brand, by day, by category.
| Group view | Granularity | Source | Refresh |
|---|---|---|---|
| Daily revenue by brand | day × shop | payment table | T+1 06:00 |
| Consolidated monthly revenue | month | aggregation | T+1 06:00 |
| Gross margin by brand | month × shop | payment + cogs | monthly |
| Group cash position | day | payment + bank_transfer | daily |
| Top 10 group customers | month | customer + payment | weekly |
H2: Multi-shop investments
| Item | Upfront cost | Monthly recurring |
|---|---|---|
| Wave Business KYB × N entities | 0 (free) | — |
| Multi-shop orchestration platform (Next.js) | 3,500,000 to 6,800,000 FCFA | — |
| KMS / Vault module (API key encryption) | 380,000 FCFA setup | 25,000 FCFA |
| Group consolidation dashboard | 1,800,000 to 3,200,000 FCFA | — |
| Hosting + monitoring | — | 45,000 to 95,000 FCFA |
| Dev maintenance (4-8h/month) | — | 180,000 to 360,000 FCFA |
Upfront investment: 5.7-10.4M FCFA. Recurring: 250-480K FCFA/month. ROI: for a holding with > 800M FCFA/year consolidated revenue, break-even in 4-7 months (audit, tax, steering gains).
FAQ
Does Wave Business allow multiple accounts for the same director?
Yes, provided each account matches a distinct legal entity (separate KYB, different RCCM, different NINEA). The same director can represent 5 LLCs — they will have 5 Wave Business accounts with their name as legal representative.
Can you transfer between Wave accounts of the same holding?
Yes, via Wave-to-Wave transfer (free, instant for approved Business accounts). In SYSCOHADA accounting: account 451 (Partners current accounts) or 461 (Current accounts) depending on the transfer nature (advance, dividend, rebilling).
BCEAO risk if one account collects for multiple entities?
Yes, that is a requalification risk as an unlicensed PSP activity. BCEAO can sanction (fine, account suspension) if it finds that an electronic money account collects on behalf of unidentified third parties. Multi-account architecture = compliance.
Cost of a Wave Business KYB per entity?
Free. Wave Business does not charge for KYB. Lead time: 5-15 business days depending on file completeness (RCCM, NINEA, articles, director ID, registered office proof).
Do you need a Wave Business account for the holding even if it does not collect from customers?
Recommended: to collect management fees, intra-group rebilling, dividends. Also handy for holding supplier payments (shared legal, accounting, IT).
Let's discuss your case
If your holding runs N branches and wants a clean Wave Business multi-account architecture (legally, fiscally, technically), we can architect and deploy it in 3-5 weeks. WhatsApp +221 77 596 93 33.
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.

