Channels — how members reach the MFI

Channels are the front doors of your MFI. The platform supports six independent but ledger-unified channels, each tuned for a specific member segment, device, connectivity profile and risk tier.

iBANK
Member-facing internet banking sign-in.
At a glance — Every channel writes to the same mfi.transaction table and inherits the same dual-control, KYC and AML rules. There is no "channel ledger" — the ledger is unified; channels are merely how a transaction was initiated.

Channel matrix at a glance

Use this matrix to decide which channels to enable for which segment.

ChannelBest forInternet required?Smartphone required?Cost / txn KES
iBANK (web)Urban office workers, businessesYesNo (works on laptop)0
USSD *354#Rural members, feature-phone usersNoNo1-3 (operator)
WhatsAppSmartphone users with WhatsAppYesYes0 (free WA)
TellerWalk-in customers, cash depositsYes (branch only)No0
Agent bankingMembers near agents but far from branchAgent has itNoAgent fees apply
Cards (debit/prepaid)ATM withdrawal, POS shoppingATM/POS has itNoVisaNet / Mastercard fees

Member segmentation by channel

USSD sessions
USSD self-service sessions.

Typical Kenyan MFI distribution after 12 months of channel maturity:

  • USSD: 55-65% of low-value transactions (KES <5,000)
  • WhatsApp: 15-20%, growing fastest
  • iBANK: 10-15%, high-value (KES >50,000)
  • Teller: 8-12%, declining year-on-year
  • Agent: 5-10% in agent-heavy regions
  • Cards: 2-5%, niche use (ATM withdrawal)

Authentication per channel

ChannelPrimary authStep-up auth (high-value)
iBANKMember ID + PINSMS OTP
USSDPINSame PIN (no step-up)
WhatsAppPhone number = member phone + PINSMS OTP
TellerPhoto ID verification by tellerBranch manager co-sign
AgentMember fingerprint + PINSMS OTP
CardsCard + PIN at POS/ATM3DS for online

Channel transaction limits

Limits are configurable per product per channel, and per member tier (Tier 1 lowest KYC, Tier 3 full KYC). Defaults for a Tier 2 member:

ChannelPer txn KESDaily KESMonthly KES
iBANK300,000500,0005,000,000
USSD70,000 (Safaricom limit)300,0001,000,000
WhatsApp150,000300,0002,000,000
TellerUnlimited (cash policy applies)UnlimitedUnlimited
Agent70,000150,000500,000
Cards40,000 ATM, 100,000 POS150,000500,000

Operating each channel

Each sub-page covers the operational details — what to configure, who to assign, how to monitor uptime, what to do when it breaks. Channels are independent, so you can launch iBANK and USSD on Day 1, add WhatsApp in month 3, and skip cards entirely.

  • iBANK — web member portal at /ibank/...
  • USSD — Safaricom and Airtel short codes via Aggregator API
  • WhatsApp — Cloud API direct from Meta
  • Teller — backoffice cashier app on POS hardware
  • Agent — third-party network (PesaPoint, Sidian Agent) or in-house
  • Cards — UnionPay / Visa / Mastercard via Kenswitch

Channel uptime monitoring

Dashboard at MFI > Channels > Dashboard shows real-time uptime per channel, transaction count last 24h, success rate, failure breakdown. Targets:

  • iBANK uptime: 99.9% monthly
  • USSD success rate: ≥98% (operator-dependent)
  • WhatsApp delivery: ≥99% (Meta Cloud API)
  • Cards authorisation: ≥97% (network-dependent)

Reference

Technical backends per channel

ChannelModuleExternal API
iBANKmfi_ibankn/a (internal)
USSDmfi_channel_ussdSafaricom USSD Aggregator, Africa's Talking USSD
WhatsAppmfi_channel_whatsappMeta WhatsApp Cloud API
Tellermfi_channel_tellern/a
Agentmfi_channel_agentPesaPoint, Sidian Agent, or custom REST
Cardsmfi_channel_cardsKenswitch ISO 8583, Visa DPS, Mastercard Vocalink

Troubleshooting

SymptomLikely causeFix
A transaction appears in the ledger but no channel attributionImported via REST without source_channel populated.Fix the integration to set source_channel = 'api'; backfill old rows by SQL.
Same member has different limits on different channels — confusingPer-channel limits are intentional but member doesn't know.Send a one-pager to the member with their tier and per-channel limits. Surface limits on each channel UI before they hit it.
iBANK and USSD show different balancesCaching layer stale.Hit MFI > Channels > Cache > Invalidate. Confirm reverse — both channels read mfi.savings.account.balance live.

See also

Was this page helpful?