Appearance
Setting up payment gateways
So parents can pay fees online. About an hour, plus however long your provider takes to approve a live account.
How money flows
Two separate things, and people mix them up:
| Who pays | Who receives | |
|---|---|---|
| Schools paying you | Each school | You — subscription and plan charges |
| Parents paying fees | Parents | The school, into the school's own account |
A gateway is enabled once by you, then connected to each school with that school's own account details — so fee money lands in the school's bank account, not yours.
Choose a provider
44 payment providers are supported, plus offline methods.
India — Razorpay · PayU Money · Paytm · PhonePe · Cashfree · Instamojo · UPI QR Africa — Paystack · Flutterwave · M-Pesa · Monnify · DPO · Cinetpay · Pesapal · Wompi Southeast Asia — Midtrans · Xendit · PayMongo · Billplz · toyyibPay · VNPAY · PayHere Middle East — Tap · PayTabs · Moyasar · Iyzico Global — Stripe · PayPal · Square · Mollie · Paddle · Checkout.com · Authorize.Net · MercadoPago · SSLCOMMERZ · JazzCash · Khalti · Fondy · Nowpayments · Coinbase Commerce · Zenvia and others
Plus three that take no API at all:
| Method | What it does |
|---|---|
| Manual | Records a payment the school collected another way |
| Bank Transfer | Parent transfers to the school's account, school confirms it |
| Mobile Money | Same, for mobile money transfers |
Start with Bank Transfer
It works immediately, needs no approval, and lets a school collect fees online from day one while its card gateway is still being approved.
Step 1: Enable the gateway
Sidebar → Settings → Payments
Add the gateway you want. Each one asks only for the fields it actually needs — the form is built from the provider's own requirements.
You will see two groups of credentials:
| Group | When it is used |
|---|---|
| Live — production credentials | Real money |
| Sandbox — test credentials | Testing, with fake cards |
Fill in Sandbox first and leave the gateway in sandbox mode until you have made a successful test payment.
Step 2: Set the webhook URL
Skip this and payments will break in the worst possible way
Without a webhook, a parent pays successfully, their money leaves their account — and the system never learns about it. The fee stays unpaid, the parent has a receipt from their bank, and the school insists nothing was received.
This is the single most damaging misconfiguration in the whole system.
On the gateway's settings drawer you will see Webhook URL with a Copy button next to it. Copy that address and paste it into the same provider's dashboard, in whatever they call their webhook or callback setting.
Each gateway has its own URL. Do not reuse one for another provider.
Step 3: Connect a school
A school does not use your account — it connects its own, so the money reaches it directly.
For each school: enable online fee payment, choose the gateway, and enter that school's own credentials from its provider account.
A school must open its own provider account
Razorpay, Stripe and the rest verify the business receiving the money. A school cannot collect fees through your account — settlement, tax and refunds all follow the account holder.
Step 4: Test before going live
- Leave the gateway in sandbox mode
- Pay a small test fee using the provider's test card details
- Confirm the payment shows as paid in the system, not only at the provider
- Only then switch to live credentials
Step 3 is the one that matters — it is what proves the webhook works.
If payments are not working
| What you see | Cause | Fix |
|---|---|---|
| Parent pays, money leaves, fee still shows unpaid | Webhook URL not set, or set at the wrong provider | Step 2 |
| "Invalid key" or "authentication failed" | Live credentials in sandbox mode, or the reverse | Check which mode the gateway is in |
| Works for one school, fails for another | That school's own credentials are missing or wrong | Step 3 |
| Payment page never opens | Gateway not enabled for that school, or online fee payment is off for it | Step 3 |
| Test card declined in sandbox | Using a real card | Use the provider's published test card numbers |
| Everything works, receipts never emailed | Not a payment problem — email or cron |