Skip to content

Refund or reverse a payment

There are two ways to undo a payment, and picking the wrong one wastes a trip.

Refund Reversal
Use it when a parent paid online and is owed money back a payment was recorded by hand in error
Does money move? Yes — it goes back to the payer No — nothing leaves the school
What it fixes an overpayment, a withdrawal, a duplicate a typo, a wrong invoice, a payment that never arrived

The split is enforced, not advisory. You cannot refund a cash payment, and you cannot reverse a card payment. Each dialog’s payment list is filtered to match, so if the payment you want is not there, you are usually in the wrong dialog.

The exception is an old Monnify payment. It appears in the reversal list but is refused when you submit — see the last item under Things you cannot do.

Nothing happens when you submit. Neither a refund nor a reversal executes on request. Both record a pending request that a different person has to approve before anything changes.

The check is on the account. There is a second check on the staff record behind the account, but it is not the safety net it sounds like: a staff record can be linked to only one account at a time, so two separate logins are two separate identities as far as the app is concerned.

So treat a second login for the same person as a second person, because the app does. Give the money-out permission to people, not to spare accounts.

On a request you raised, the Approve button is greyed out, with a line saying “You requested this — someone else has to approve it.” You are not meant to get as far as typing your password and being turned away.

You may reject your own request, and Reject stays available on your own rows for exactly that reason — cancelling something you raised in error needs no second opinion.

  1. Go to Fees → Refunds & disputes, then Issue refund.
  2. Pick the payment. Only successful card and bank payments made through the app appear here.
  3. Choose Full refund or Partial refund.
  4. Give a reason. It is required, it goes to the approver, and it stays on the permanent record.
  5. Confirm your password. Requesting a refund re-checks who you are.
  6. Submit. You will be told the request is waiting for a second authorizer and that nothing has been refunded yet. To watch it, open the Approvals tab — that is where it sits as Pending.

Then someone else opens Approvals, reads your reason, confirms their password, and approves. Only at that point does money move.

Nothing on the invoice moves while the request is waiting. Once your colleague approves it, the invoice stops counting that money as paid — a full refund usually puts the invoice back to Issued, a partial one to Partially paid.

So a parent may see their balance re-open before their bank shows the refund. That order is deliberate — it stops the same money being refunded twice — but it is worth saying out loud when a parent calls, because from their side it looks like the school is asking for money it has just agreed to give back.

  1. Go to Fees → Refunds & disputes, then Reverse manual payment.
  2. Pick the payment. Only manually recorded payments — cash, bank transfer, POS, cheque, USSD, mobile money — appear here.
  3. Give a reason. Required, same as a refund.
  4. Submit.

Requesting a reversal does not ask for your password. Requesting a refund does. That is not a bug and not an oversight: no money moves on a reversal, so the request itself is not a money-out event. Approving it does ask, because approval is the point where the ledger changes.

Once approved, the invoice balance goes up by the reversed amount. The parent owes that money again. If the payment was real and you reversed it by mistake, there is no un-reverse — you record the payment again.

For a refund, approval hands the request to the payment provider, and there are three outcomes. The middle one is the one to understand properly.

Status What it means What to do
Executed Done. The money is on its way back. Nothing.
Failed The provider refused. The invoice has been put back exactly as it was. Read the reason and write it down, fix it, request again.
Execution failed We do not know. The request timed out or the provider did not answer. Do not request it again. Escalate.

Execution failed does not mean it failed. It means the answer never arrived, and the money may already be leaving. The invoice is deliberately left showing the refund as taken, because the safe assumption is that the money is gone. If it turns out it never left, the provider’s confirmation puts it back.

Whether the app stops you depends on how much was stuck, and you should not rely on it. If the stuck refund covered the whole payment, you will be refused — the message names the remaining refundable balance — and that refusal is correct, so do not look for a way around it. But if it was a partial refund, the app will let a second request through: the only limit it applies is that all refunds together cannot exceed the original payment.

So follow the table above rather than the app: do not re-request an Execution failed refund at all. Escalate it.

The thing to be careful about is the other side: that invoice now shows the parent owing money that may already be back in their account. Do not chase that balance until someone has confirmed what actually happened to the refund.

A reversal has no provider and moves no money, so it should not sit unresolved — it shows Executed once the ledger is corrected. If one ever does show Execution failed, escalate it rather than retrying. If it shows Failed, the payment could not be reversed — most often because someone else already reversed it, or because it turned out not to be a manual payment at all.

Worth knowing before you look for the button.

  • You cannot edit a payment. Amount, method, date, invoice and who recorded it are all fixed once saved. Payments are an append-only record — correcting one means reversing it and recording it again.
  • You cannot delete a payment, ever.
  • You cannot void an invoice that has any money on it. Reverse or refund the payment first, which needs the second person above. The error says invoice has payments — refund flow required.
  • You cannot un-reverse a payment, and a voided invoice never re-opens.
  • You cannot refund or reverse a Monnify payment. That rail was withdrawn in August 2026 and old payments on it have no money-out path in the app. ⚠️ Do not take these to your bank — money paid on that rail never reached your school’s account, so your bank has no record of it and cannot return it. Contact EduPrefect support with the invoice number.

If you see the Refunds tab but the buttons are greyed out, with:

You can view refunds, but issuing refunds or reversing payments requires the reverse-payment permission. Ask a bursar or proprietor.

then your role can read money-out records but not create them. A principal sees exactly this — principals can see the money, and cannot move it.

If you are a bursar and still see it, the app failed to read your roles and defaulted to read-only. Reload the page.

If your permission comes from a custom role your school created rather than from the built-in bursar or proprietor role, you will see the read-only view even though the server would let you act, and reloading will not change it. Contact EduPrefect support — that one is ours, not yours.