Admin

Setting Up Fees and Payments in Mazhali

How to connect a payment gateway — Razorpay, UPI, or manual — create one-time and recurring fees, and track collection across your school.

Mazhali lets you invoice parents for fees, collect payments through Razorpay, UPI, or manual (cash/cheque/bank transfer), and see school-wide collection status at a glance — all without spreadsheets.


Connect a payment gateway

Go to Settings → Payment Gateway and pick a Payment Mode: Razorpay, UPI, or Manual. Only one mode is active for your school at a time — switching modes replaces the previous configuration.

Razorpay

Razorpay lets parents pay by card, UPI, or netbanking directly in the app, with payments reconciled automatically.

1. Create a Razorpay account (if you don’t have one)

If your school doesn’t already have a Razorpay account, sign up at razorpay.com and complete their business verification (this links payments to your school’s bank account). This is a one-time setup on Razorpay’s side, separate from Mazhali.

2. Get your API keys from Razorpay

Once your Razorpay account is active:

  1. Log in to the Razorpay Dashboard
  2. Go to Settings → API Keys
  3. Click Generate Key (or Generate Test Key while trying things out)
  4. Razorpay shows you two values — copy both immediately, as the secret is only shown once:
    • Key ID — starts with rzp_live_... (or rzp_test_...) — this identifies your account and is not sensitive
    • Key Secret — a longer string shown only at generation time — treat this like a password

You’ll also need a Webhook Secret, which you set up separately. This is how Razorpay tells Mazhali the moment a payment comes in, so the invoice updates automatically without anyone checking manually.

  1. In Mazhali, go to Settings → Payment Gateway first — the Webhook URL field there is pre-filled for your school, with a copy button next to it. Copy it now.
  2. In the Razorpay Dashboard, go to Settings → Webhooks and click Add New Webhook
  3. You’ll see a form with four fields — here’s what to put in each:
    • Webhook URL — paste the URL you copied from Mazhali in step 1. This tells Razorpay where to deliver the notification — not a link you visit yourself.
    • Secret — make up any strong random string (e.g. generate one with a password manager). This isn’t a Razorpay value — you’re inventing it here, then copying the exact same string into Mazhali’s Webhook Secret field so both sides can verify the message wasn’t tampered with.
    • Alert Email — your own email, so Razorpay can notify you if webhook deliveries start failing. Optional, but recommended.
    • Active Events — tick payment_link.paid. This is the only event Mazhali currently needs; leave other events unticked to keep things simple.
  4. Save the webhook, then copy the same secret string into Mazhali’s Webhook Secret field in the next step

3. Enter these in Mazhali

Back in Mazhali:

  1. Go to Settings → Payment Gateway
  2. Paste in the Key ID, Key Secret, and Webhook Secret from the steps above
  3. Use Test Connection to confirm Razorpay accepts the credentials
  4. Save to activate the gateway for your school

After saving, Mazhali only ever shows your Key ID and a “configured” checkmark — the Key Secret and Webhook Secret are encrypted and never displayed again, so keep a copy somewhere safe if you’ll need to re-enter them.

UPI

If your school collects fees to a single UPI ID and doesn’t need Razorpay’s card/netbanking support, choose UPI instead. There are no API keys to generate — just:

  1. Go to Settings → Payment Gateway and select Payment Mode → UPI
  2. Enter your UPI ID (e.g. school@okhdfcbank)
  3. Optionally enter a Payee Name so parents see who they’re paying
  4. Save

Parents then see a Pay via UPI button on each invoice, which opens a QR code and your UPI ID (with a copy button) so they can pay with any UPI app. Because Mazhali has no way to confirm a UPI payment automatically, parents tap I’ve Paid afterwards to submit the payment for you to verify — see “Reviewing payment claims” below.

Manual

Choose Manual if you collect fees by cash, cheque, or bank transfer and don’t want to set up an online gateway at all. There’s nothing to configure — just select Manual and save. Parents see an I’ve Paid button on each invoice instead of a pay button, which opens the same claim form described below.


Creating a fee

Fees can be created for a single child or applied in bulk across an entire class.

  • Single child — open the child’s profile and choose Add Fee
  • Whole class — open the class and choose Add Fee for Class; this creates the same fee for every actively enrolled child in that class

For each fee, set:

  • Title — e.g. “Term 2 Tuition” or “Annual Sports Day”
  • Amount
  • Frequency — one-time or monthly
    • One-time — set a single due date
    • Monthly — set a day of the month, plus a start date and (optionally) an end date for the recurring schedule

Bulk-creating for a class shows a confirmation with the number of children affected before it’s applied, since it generates one invoice per child.


Managing recurring fees

A monthly fee schedule can be paused, resumed, or ended at any time — for example if a child withdraws partway through the year. Pausing stops future invoices from being generated without affecting invoices already issued.


Fee status

Each invoice moves through one of these states:

  • Pending — issued, not yet due or not yet paid
  • Under review — a parent submitted a UPI/manual payment claim, awaiting your approval
  • Paid — payment received
  • Overdue — past the due date, unpaid
  • Refunded
  • Cancelled

Parents see the same statuses on their side. With Razorpay, they pay directly from the app and the invoice updates automatically. With UPI or manual, they pay outside the app and then submit a payment claim — see below.


Reviewing payment claims

When your school’s gateway is UPI or Manual, Mazhali can’t confirm a payment on its own — a parent pays you directly (via UPI app, cash, cheque, or bank transfer), then taps I’ve Paid on the invoice and submits a Transaction Reference and/or a Note describing the payment.

This moves the invoice to Under review. To act on it:

  1. Open the invoice and go to its Review Payment Claim screen — you’ll see the reference, note, and when it was submitted
  2. Approve Payment — marks the invoice Paid and notifies the parent
  3. Revert to Pending — use this if the claim looks wrong or you can’t verify it; the invoice goes back to Pending and the parent can submit a new claim

Claims are informational only — Mazhali doesn’t move money for UPI or manual payments, so always confirm you actually received the funds before approving.


Tracking collection school-wide

The Fee Report (Settings → Fee Report, or the Reports section) gives a school-wide view across all children and classes — useful for seeing who’s paid, who’s overdue, who’s under review, and total collection for a period without opening each child individually.


Notifications

Parents are notified automatically when a fee is due and again when a payment is received (approved), so there’s no need to chase confirmations manually.


Common questions

Do we have to use Razorpay? No. Razorpay gives parents in-app card/UPI/netbanking payments with automatic reconciliation, but you can choose UPI (a single UPI ID parents pay to, with you approving claims) or Manual (cash/cheque/bank transfer, tracked the same way) instead.

What’s the difference between UPI mode and Razorpay? With Razorpay, Mazhali confirms payment automatically via webhook. With UPI, parents pay your UPI ID directly and then self-report the payment as a claim, which you approve or revert after checking it landed in your account.

Can I switch payment modes later? Yes, at any time from Settings → Payment Gateway. Switching modes replaces the current configuration; it doesn’t change the status of invoices already issued.

Can I change a fee after creating it? A recurring schedule can be paused or ended. For corrections to an individual invoice, contact support.

What happens to invoices already sent if I end a recurring fee? Ending a schedule only stops future invoices — invoices already issued are unaffected.

Do removed or withdrawn children still show pending fees? Existing invoices remain visible in the fee report for record-keeping even if the child is later removed from the class.