Skip to content

Process a refund

This guide shows you how to refund a member’s payment in full, and what the void matrix for event registrations offers today. Refunds work the same way whether the member paid with a card (Stripe) or with PayPal.

Who can do this: Admins with the payments:write permission (covers issuing refunds). Approving member-submitted refund requests additionally requires refund_requests:write-admin. The Finance sub-role typically owns refunds at professional associations.

Important: a refund is sent to the payment processor (Stripe or PayPal) as soon as you confirm, and it cannot be reversed in MapleGather. The processor completes it afterwards and can still fail it. You’ll be shown the exact amount before you confirm.

For a PayPal payment, the refund dialog reads “to the member’s PayPal account” instead of naming a card. Everything else — the reason and the confirmation — works exactly the same.

  • Open the payment you want to refund. Go to the Payments list (at /admin/billing/transactions; the Billing & payments sidebar link has no page of its own yet), find the payment, and select View to open the payment detail.
  • If a member has submitted a refund request for a payment, that payment’s detail page shows A member refund request is pending review with Review request — see Approve or deny a member-submitted refund request. There is no separate refund queue.
  1. On the payment detail page, select Full refund.
  2. In the Refund payment dialog, review the confirmation. For a card payment it reads “This will refund $[amount] to the card ending in [last 4 digits]”; for a PayPal payment it names the member’s PayPal account instead. The refund always goes back to the original payment method — the dialog has no account-balance option, no notes field and no refund-receipt option.
  3. Select a reason from the Reason dropdown (required).
  4. Select Refund $[amount]. The exact amount is shown on the button.
  5. If the member has an active subscription linked to this payment, a second confirmation appears: “Cancel the linked subscription?” Select Yes, cancel to cancel it at the end of the current period, or Keep subscription to leave it running.

MapleGather can’t issue a partial refund from the payment detail page yet. Full refund always refunds the payment’s whole remaining refundable amount, and the dialog has no amount or line-item choice.

Use the void matrix (for event registrations)

Section titled “Use the void matrix (for event registrations)”

⛔ THE ONE-STEP VOID-AND-REFUND ACTION THIS SECTION USED TO OPEN WITH IS WITHDRAWN (user ruling, 2026-09-28) AND NO SCREEN RENDERS IT. Use this section for the three actions that remain. If you collected money and the charge was wrong, refund it — the refund is the reversal, and the invoice stays Paid with the refund recorded against the payment. Do not look for a way to void the paid invoice, before or after: MapleGather refuses it. (Prior lead, retired: “Use this when you need to void an invoice and refund the payment it collected in one step. ⚠ Cancelling the registration is not part of this action — cancel it separately if you need it cancelled. (Corrected 2026-09-27. …”)

  1. On the payment detail page, choose the CTA for the action you want. The page now offers Full refund (and Resend receipt); the Void & Refund button was removed on 2026-09-28. (Prior text, retired: “Void & Refund and Refund are two separate buttons that open two different dialogs — they are not one dialog with a picker.” That correction was right about the shape when it was written; the combined CTA has since gone entirely.)
  2. The three combinations that remain, and where each one lives:
    • ⛔ Void & Refund — WITHDRAWN 2026-09-28, quoted rather than deleted. The user ruled option A: “Remove the combined refundIfPaid branch from the contract now; accept that the one-click combination may never be built … Use the existing dedicated refund operation, with its money-out permission, for paid refunds.” admin-payment-detail.md 1.5 removed the CTA at nine sites plus its controls: entry. A second, independent reason it could not work: its first effect was to void an invoice with a collected payment behind it, and InvoiceService.void refuses status in ("void", "paid") outright, so no operation performed the pair. Do this instead for a paid registration: Refund only, below — then cancel the registration separately, and void nothing. (Prior text, retired: “voids the linked invoice and refunds the collected payment, in one step. Use this as the default for paid registrations. ⚠ It does not cancel the registration and it does not fire a combined receipt — neither effect is part of the operation this dialog…”)
    • Refund only (keep registration) — select Full refund on the payment detail page. It refunds the payment but keeps the seat. Use for deposit refunds where the member stays registered.
    • Cancel without refund — not available yet: MapleGather has no admin control that cancels a registration.
    • Void unpaid — open the unpaid invoice from Invoices (at /admin/billing/invoices) and select Void. No refund step needed.
  3. Confirm the action in its dialog.

Approve or deny a member-submitted refund request

Section titled “Approve or deny a member-submitted refund request”

When a member requests a refund through the portal, each active admin of your organization whose role includes Decide refund requests (refund_requests:write-admin) is emailed (up to ten admins, newest first) with the member’s name, the payment, the amount requested, the member’s reason and explanation, and where to review it. There is no in-app notification and no refund queue: open the payment (from the Payments list at /admin/billing/transactions, or the link in the email). Its detail page shows A member refund request is pending review.

  1. Select Review request. The dialog shows the amount the member requested.
  2. To approve, select Approve. For a card or PayPal payment, a refund is requested from the payment processor, back to the original payment method (the processor completes it afterwards and can still fail it); for a payment you recorded yourself (cash, check, bank transfer) the refund is recorded and you return the money to the member directly. The member is emailed that the request was approved, and the payment’s page in their portal shows it.
  3. To deny, select Deny, then:
    1. Choose a Reason code (required). It is recorded with the denial; the member does not see it.
    2. Write the Explanation for the member (required, up to 1,000 characters). The member reads it on the payment’s page in their portal.
    3. Select Deny request. The page confirms “Refund request denied. The member sees your explanation on this payment in their portal; no email is sent.”

If you leave out the reason code or the explanation, the dialog names the missing one (“Choose a reason for the denial.” / “Explain the denial to the member.”). If another admin decided the request first, it says “This request has already been decided. Close this dialog to see its current state.”

You’ll know the refund went through when:

  • The payment detail shows Refunded status.
  • The invoice does not move. A refund is recorded against the payment, so the invoice stays exactly as it was — normally Paid. There is no Refunded invoice status: Refunded and Partially refunded are payment statuses. (Prior text, retired: “The invoice status updates to Refunded (full refund) or Partially refunded (partial refund).”)
  • MapleGather doesn’t email the member a refund receipt for a payment refund. (When you approve a member’s own refund request, the member is emailed that it was approved.)
  • “Insufficient balance” — see Refund failed — insufficient processor balance.
  • “This invoice has a collected payment, so it cannot be voided” — you opened Void on an invoice whose payment was collected (usually from a saved link; the button itself is not shown on such an invoice). A collected invoice is never voided, before a refund or after one: the refund is the financial reversal; issue a fresh invoice for any corrected amount. If its payment has already been refunded you will instead see “This invoice has already been refunded — no further action is needed.” (Prior text, retired 2026-10-01: ““Invoice cannot be voided in status paid” — a collected invoice is never voided, before a refund or after one. …” — that is the service’s internal message, which no screen shows.)
  • “We couldn’t confirm whether the refund went through” — the connection dropped, the server failed, or the payment processor didn’t answer in time, so the refund may or may not have happened. The dialog locks to exactly what you sent. Select Retry the same refund to send that same refund again — it can’t refund the member twice. Or select Discard — I’ll check the payment’s refunds first and look at the payment’s refunds (or the processor dashboard) before refunding any other way. Retry within a day: after 24 hours the processor no longer recognises the first attempt, so check first.
  • Refund window has passed — a processor won’t accept a refund on a very old payment. Stripe’s limit is 90 days; PayPal’s is 180 days. When a payment is past its window, the dialog can’t refund it automatically and instead offers Re-issue via new charge (Stripe) or Re-issue as account-balance credit (PayPal). Select it — this makes the member whole with an account-balance credit and records a note on the payment. (This is different from the insufficient-balance case, which asks you to settle the refund outside MapleGather.)
  • Need to reverse a refund — MapleGather has no control to reverse a refund. If the member owes the money again, charge their stored card — see Charge a member’s stored card.