Two Types of Refund
Commerce provides two mechanisms for returning money to a client:
| Type | What it does | When to use |
|---|---|---|
| Gateway Refund | Processes a refund through the original payment gateway. Money returns to the client's payment method. | When the client paid by card, PayPal, or Mollie and you want the money returned to their account. |
| Credit Note | Adds the refund amount to the client's credit balance for use on future invoices. No money moves. | When the payment was by bank transfer, or you prefer to credit the account rather than reverse the transaction. |
Issuing a Refund
- Go to Admin → Invoices → [invoice]
- Scroll to the Payments section
- Find the payment you want to refund and click Refund
- Enter the refund amount (partial or full)
- Choose Gateway Refund or Credit Note
- Confirm
Gateway Refund — Gateway Support
| Gateway | Refunds supported? | Notes |
|---|---|---|
| Stripe | Yes | Refunded via Stripe API automatically |
| PayPal | Yes | Refunded via PayPal captures API |
| Mollie | Yes | Refunded via Mollie refunds API |
| 2Checkout | Yes | Refunded via 2Checkout API 6.0 |
| Authorize.net | Yes | Requires card last-four stored in payments.card_last_four |
| Bank Transfer | No | Issue a credit note instead |
| Manual | No | Issue a credit note instead |
[!IMPORTANT] Gateway refunds are processed immediately and are irreversible once submitted. Confirm the amount carefully before clicking Refund.
Partial vs. Full Refunds
Partial refund: Refunds less than the full payment amount. A credit_note record is created for the partial amount. The invoice status remains paid. The client's credit balance increases by the refunded amount (for credit notes) or the money returns to their payment method (for gateway refunds).
Full refund: Refunds the entire payment amount. The invoice status changes to refunded. A credit_note record is created. The service linked to the invoice is not automatically cancelled — handle that separately in Admin → Services if needed.
[!TIP] Issuing a full refund on a renewal invoice does not roll back the
next_due_dateon the service. Adjust the service dates manually if required.
Credit Note Records
Every refund (gateway or credit note) creates a record in credit_notes with:
- Invoice reference
- Amount (in cents)
- Type (
gateway_refundoraccount_credit) - Date issued
- Admin who issued it
Credit notes issued as account credit are immediately added to client_credits. The client sees their updated credit balance on their dashboard.
Viewing Credit History
Admin: Go to Admin → Clients → [client] → Credits tab. This shows all credit transactions: additions, applications to invoices, and credit note issuances.
Client portal: The client sees their current credit balance on their dashboard and in the billing section. A full transaction history is available in Client → Billing → Account Credit.
When a Refund Fails
If a gateway refund fails (e.g. the original charge is too old, or the client's card was cancelled), Commerce shows the error message from the gateway. In this case:
- Note the error
- Issue a Credit Note instead to add the amount to the client's account
- Process the refund manually through the gateway's own dashboard if you need to return money externally
[!WARNING] Gateway refunds can fail silently if the webhook is not configured correctly. Always verify the refund appeared in your gateway dashboard after issuing one.