Admin

Setting Up Fees and Payments in Mazhali

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

Mazhali lets you invoice parents for fees, collect payments online through Razorpay, and see school-wide collection status at a glance — all without spreadsheets.


Connect a payment gateway

To collect fee payments online, Mazhali needs to be connected to a payment gateway — the service that actually processes the card/UPI/netbanking payment and moves money to your school’s bank account. In v1, Mazhali supports one gateway: Razorpay, a widely used Indian payment processor.

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.

If you’d rather not set this up yet, you can skip it — you can still create and track fees, and simply mark payments as collected manually once you receive them by cash, cheque, or bank transfer.


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
  • Paid — payment received
  • Overdue — past the due date, unpaid
  • Refunded
  • Cancelled

Parents see the same statuses on their side and can pay directly from the app when the gateway is connected and the invoice is pending or overdue.


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, 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, so there’s no need to chase confirmations manually.


Common questions

Do we have to use Razorpay? Razorpay is the only gateway supported in v1. You can still track fees and mark them paid manually without a gateway connected.

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.