Give me 5 minutes, and I'll explain what those 10 M-Pesa accounts in the Daraja Account Balance API actually mean.
Most developers only pay attention to a few of them and ignore the rest. Yet just 4 of these accounts are responsible for the core operations behind every successful Paybill setup:
API Usecase:
- Financial Reconciliation
- Automated Payment Systems
- Cash Flow Management
- Payroll Processing
Understanding these accounts will help you build more reliable M-Pesa integrations, track funds accurately, and avoid common mistakes when working with the Daraja Account Balance API.
👇👇
1/ UTILITY ACCOUNT
Your money inbox. Every customer payment (STK Push or Manual Payment to Paybill) lands HERE first.
Pro tip: Always check AVAILABLE balance before triggering B2C. Current ≠ Available.
Reserved funds = pending payouts already in queue.
2/ CHARGES PAID ACCOUNT
Always negative. Always.
This is Safaricom's running tab of what you owe in transaction fees.
If this isn't cleared → Safaricom BLOCKS your bank withdrawal. Full stop.
(It clears automatically during settlement , more on that in a sec)
3/ ORGANISATION SETTLEMENT ACCOUNT
The engine room. You won't see money sit here long.
When you trigger Revenue Settlement:
→ It clears your fee debt (Charges Paid)
→ Moves the net balance to your Working Account
Transit lane. Not a wallet.
4/ MMF / WORKING ACCOUNT
Withdrawal-ready funds live here.
Post-settlement, this is where your money sits before it hits your bank account.
Zero here = you can't withdraw. Check it before calling the bank.
5/ The full flow:
🔁 THE FLOW IN ONE LINE:
Customer pays → Utility Account → Settlement clears fees → Working Account → Your Bank/individual M-PESA account.
B2C bypass: Payouts draw DIRECTLY from Utility. No settlement needed. 🔑
---
Building on Safaricom Daraja? Follow for more M-Pesa and Payments integration
Got a Mpesa Daraja question? Drop it below 👇 I'll answer it.
We just released react-native-runtimes! 🥳
👉 Render React components on separate JS Runtimes
👉 Share state (Zustand) across Runtimes, synced in C++
👉 Dual-Thread-approach for rendering/business logic
We plugged this into MetaMask which made the app start substantially faster:
i have a dreaded payments project in Q4 to connect 30+ merchants.
daraja mpesa exclusively with each currently on-prem 🫠
i wish safaricom mpesa had some "1st party" oss batteries (webhook log , tx ledger so I can stop lifting this everywhere I go from project to project )
@WarriorRapid True, but there was a "reasonable" case for a friend back then :
some eastern european company legit only accepted invoices tagged with wakatime screenshots based on hours code on the project 😄 ,
they'd extend to confirm through the official leaderboard 💀
Assembling a PCB prototype at the our lab. 👍
We go from idea to final product here, a client comes with an idea of what they want built, can be as simple as a sketch then we handle the rest.
Such quick assemblies help validate the final iteration before mass production.
-VA
so this evening , i ported kenya-locations to TS/Kotlin/Swift libs while maintaining the data sources as simple json files ,
built to cover any sort of informal location addressing in 🇰🇪 projects i've done so far.
more to come ✨
→ https://t.co/IXY3HSvoBT
@_victorpreston It's not an easy role. Also don't like the situations where you're forced to step up as a Dev to that role.
A supporting capacity to anyone who makes product direction decisions.
But if you're drawn towards that , you can take up that role.