Most schools bill repeatedly during the year and allow staged payments. For bookkeeper and finance teams, this creates extra administration and reconciliation work. ClickPesa’s Customer BillPay for a School solves this by letting schools collect fees in stages with fewer errors, faster confirmations, and simpler reconciliation. On the parent side, nothing changes: they keep using familiar payment channels while following simple, consistent instructions.
How Customer BillPay Works
A Customer BillPay Control Number is a static, unique number assigned by a merchant to a specific customer (e.g., a student, guardian, or fee category). It is reusable for multiple transactions, making it ideal for frequent or subscription-style payments.
In a school context, you assign each student, or each fee bucket for that student, a control number. Parents then pay using Tanzanian mobile money and CRDB channels. Control numbers can be created manually in the dashboard or programmatically via the Customer BillPay API.
Docs: Customer BillPay Control Numbers
Flow
1) Generate
Create a static control number tied to a specific customer or fee bucket. This enables automatic payment tracking and clean, student-level reconciliation.
- Ideal for repeating or subscription payments
- Allows multiple control numbers per customer (e.g., Tuition, Transport, Meals)
Two ways to generate:
- Merchant Dashboard: Assign a control number to the customer in the dashboard.
- API: Use the BillPay API with full flexibility to:
- Include customer name (e.g., student)
- Add bill description
- Set payment behavior (full amount only, allow partials, accept overpayments)
- Provide a custom reference or let ClickPesa auto-generate one
- Receive instant confirmations via webhooks and query transactions for reconciliation
API: Create Customer Control Number
Webhooks: Overview & Checksum
2) Share
Communicate the control number clearly in the parent portal, SMS reminders, and printed slips. The same number works across all supported channels, so parents never need to ask for “the latest” payment details.
3) Pay
Parents can pay using:
- Mobile Money: Tigo Pesa, Airtel Money, HaloPesa, M-Pesa
- CRDB Banking: SIM Banking (App/USSD), Internet Banking, CRDB Wakala agents
Step-by-step instructions are available on each control number page and can be shared with parents: Instructions
4) Confirm & Reconcile
Your system receives real-time webhooks for each successful payment. Use these to update the student balance immediately, apply the receipt to the correct fee bucket, and post journals. For audits and nightly checks, query the Payments API and match against settlement files.
Automation: Integration with Your School Management System or Finance Module
This integration keeps data consistent from collection through accounting.
- Create Customer BillPay Control Numbers
- Via API when you publish fee plans or enroll a student.
- Receive Webhooks
- Implement a secure webhook endpoint and verify payloads using the checksum.
- Docs: Setting up webhooks
- Persist & Apply
- Log each event in your database (student, fee bucket, amount, references).
- Apply to the outstanding invoice or fee plan.
- (Optional) Create accounting journals automatically.
- Issue Receipts(optional)
- Generate a receipt per payment and deliver via portal or SMS/email.
- Reconcile(optional but recommended)
- Run a daily reconciliation against the Payments Query API and settlement files.
- Docs: Querying for Payments
Best Practices for Customer BillPay
Good setup prevents most issues and simplifies audits.
- Use one control number per student per fee for clean reporting.
- Decide partial/overpayment rules per fee before term start.
- Store raw webhook payloads for audit and troubleshooting.
- Make webhook processing idempotent to handle retries safely.
- Show parents the exact control number consistently in every channel.
Vendor Payouts & Staff Disbursements
Use the same platform to pay transport providers, caterers, book suppliers, and casual staff, keeping your audit trail intact.
- Prepare payables from approved invoices in your finance module.
- Execute disbursements to mobile money or bank accounts, tagging vendor IDs, invoice numbers, and cost centers.
- Capture results via webhook confirmations and post to Accounts Payable.
- Maintain audit trails that link each payout to the original bill and approval record.
Docs: Payout API
Frequently Asked Questions
Do parents need a special app?
No. They pay through their usual mobile money or CRDB channel using the control number you provide. Your system receives a confirmation immediately and updates balances.
What if parents do not want to use their customer bill pay number?
We also support USSD Push Payments, this can be implemented in your app and trigger a USSD popup asking the parents to pay. They do not have to enter a reference number, we make sure the payment is automatically booked to the right reference. Docs: USSD Push Payments
How are refunds handled?
Issue a payout to the parent and link it to the original payment reference for audit.