Self-Service Refunds

Self-Service Refunds for WooCommerce – Documentation


Getting Started

↑ Back to top

Requirements

↑ Back to top
  • WordPress 6.0 or higher
  • WooCommerce 5.0 or higher
  • PHP 7.4 or higher

Installation

↑ Back to top
  1. Upload the self-service-refunds folder to the /wp-content/plugins/ directory, or install directly through the WordPress plugin screen.
  2. Activate the plugin through the Plugins screen in WordPress.
  3. Navigate to WooCommerce > Settings > Refunds to configure the plugin.

Quick Start

↑ Back to top
  1. Go to WooCommerce > Settings > Refunds.
  2. Enable “Self-Service Refund Requests”.
  3. Set a refund time limit (e.g., 30 days).
  4. Add refund reasons for customers to choose from.
  5. Optionally enable automatic refund processing.
  6. Save your settings.

Customers will now see a “Request Refund” button on their orders in My Account > Orders.


Configuration

↑ Back to top

General Settings

↑ Back to top

Navigate to WooCommerce > Settings > Refunds to access all plugin settings.

SettingDescriptionDefault
Enable Self-Service Refund RequestsMaster toggle for the entire featureDisabled
Enable Line-Item RefundsAllow customers to refund individual line items (partial refunds)Disabled
Refund Time LimitNumber of days after purchase during which refunds can be requested (1-365)30 days
Enable Automatic RefundsProcess refunds automatically through the payment gatewayDisabled
Auto-Refund LimitMaximum number of automatic refunds per customer per interval (0 = unlimited)0
Auto-Refund Limit IntervalTime interval for the auto-refund limit (day, week, month, year)Month
Enable Guest RefundsAllow non-registered customers to request refunds via a dedicated formDisabled
Require Refund ReasonCustomers must select a reason when requesting a refundDisabled
Allow Re-Request After RejectionLet customers resubmit a refund request after it has been rejectedDisabled
Refund Policy PageLink to your refund policy page, shown during the refund request processNone

Refund Reasons

↑ Back to top

Refund reasons are the options shown to customers when they request a refund (if “Require Refund Reason” is enabled).

Managing reasons:

  1. Go to WooCommerce > Settings > Refunds > Refund Reasons tab.
  2. Click Add Reason to create a new reason.
  3. Enter the reason text (e.g., “Item arrived damaged”, “Changed my mind”, “Wrong item received”).
  4. Drag and drop reasons to reorder them.
  5. Click the trash icon to delete a reason.

Reasons are displayed to customers in the order you set.

Decline Message Presets

↑ Back to top

Decline presets are reusable rejection messages that admins can select when rejecting a refund request.

Managing presets:

  1. Go to WooCommerce > Settings > Refunds > Decline Presets tab.
  2. Click Add Preset to create a new message template.
  3. Enter a heading (e.g., “Outside Refund Window”) and the message body.
  4. The message body supports rich text (HTML) for formatting.
  5. Drag and drop to reorder presets.

When rejecting a request, admins can select a preset or write a custom message.

Refund Rules

↑ Back to top

Rules allow you to automate refund processing decisions based on order conditions.

See the Rules Engine section for full details.


Customer Experience

↑ Back to top

Logged-In Customers

↑ Back to top

Registered customers can request refunds from their My Account > Orders page:

  1. Navigate to My Account > Orders.
  2. Click the Request Refund button next to an eligible order.
  3. Follow the multi-step refund form.
  4. Track the refund status on the order details page.

The “Request Refund” button only appears for orders that:

  • Are within the configured refund time limit.
  • Do not already have a pending refund request.
  • Are in a refundable order status.

Guest Customers

↑ Back to top

If “Enable Guest Refunds” is turned on, guest customers can request refunds through a dedicated form. See Guest Refund Form for setup instructions.

Guest verification requires three matching pieces of information:

  • Email address used for the order
  • Order number
  • Order date

Refund Request Steps

↑ Back to top

The refund request process follows these steps:

  1. Select Refund Type – Choose between a full order refund or a partial (line-item) refund.
  2. Select Items (partial refunds only) – Choose which items and quantities to refund.
  3. Select Reason (if required) – Choose a refund reason from the configured list.
  4. Review & Confirm – Review the refund details and submit the request.

Request Cancellation

↑ Back to top

Customers can cancel a pending refund request before it is processed:

  • A “Cancel Refund Request” option appears on orders with pending requests.
  • Cancellation restores the order to its previous status.
  • Cancelled requests are recorded in the order notes.

Admin Workflow

↑ Back to top

Reviewing Requests

↑ Back to top

When a customer submits a refund request:

  1. The order status changes to Refund Requested.
  2. An admin notification email is sent (if enabled).
  3. A notice appears in the WordPress admin showing the count of pending requests.
  4. The order appears with the “Refund Requested” status in the orders list.

Approving Refunds

↑ Back to top

Admins can approve refund requests from two locations:

From the Orders List:

  • Click the approve (checkmark) action button next to the order.
  • If the payment gateway supports refunds, the refund is processed automatically.

From the Order Detail Page:

  • Click the Approve & Refund button in the order actions area.
  • A confirmation dialog appears before processing.

When approved:

  • If automatic refunds are enabled and the gateway supports it, the refund is processed immediately.
  • An order note is added documenting the approval.
  • The order status is updated accordingly.

Rejecting Refunds

↑ Back to top

Admins can reject refund requests from two locations:

From the Orders List:

  • Click the reject (X) action button next to the order.

From the Order Detail Page:

  • Click the Reject Refund button.
  • A modal appears to select a decline message preset or write a custom message.

When rejected:

  • The customer receives a rejection email with the decline message (if configured).
  • An order note is added with the rejection reason.
  • The order status reverts to its previous status.
  • If “Allow Re-Request After Rejection” is enabled, the customer can submit a new request.

Order Status

↑ Back to top

The plugin adds a custom order status:

  • Refund Requested (wc-refund-requested) – Applied when a customer submits a refund request.

This status appears in the orders list with its own color coding and can be filtered like any other WooCommerce order status.


Rules Engine

↑ Back to top

The rules engine lets you automate refund processing based on conditions. Rules are evaluated in order, and the first matching rule determines the action.

Creating Rules

↑ Back to top
  1. Go to WooCommerce > Settings > Refunds > Refund Rules tab.
  2. Click Add Rule.
  3. Enter a rule name (e.g., “Auto-approve digital products”).
  4. Select an action: Process Automatically or Manual Review.
  5. Add one or more conditions.
  6. Enable or disable the rule with the toggle.
  7. Save the rule.

Available Conditions

↑ Back to top
ConditionDescriptionOperators
User RoleCustomer’s WordPress roleis, is not
Product CategoryProduct belongs to a categoryis, is not
Product TagProduct has a specific tagis, is not
Product TypeSimple, variable, grouped, etc.is, is not
Payment MethodHow the order was paidis, is not
Shipping ZoneThe shipping zone of the orderis, is not
Shipping MethodThe shipping method usedis, is not
Billing CountryCustomer’s billing countryis, is not
Shipping CountryCustomer’s shipping countryis, is not
BrandProduct brand (requires WooCommerce Brands)is, is not
Order StatusCurrent order statusis, is not
Cart Item CountNumber of items in the ordergreater than, less than, equal to
Cart QuantityTotal quantity of itemsgreater than, less than, equal to
Cart ValueTotal order valuegreater than, less than, equal to

Rule Priority

↑ Back to top
  • Rules are evaluated from top to bottom.
  • The first matching rule determines the action.
  • Drag and drop rules to change their priority.
  • If no rules match, the default behavior applies (manual review unless automatic refunds are globally enabled).

Rule Actions

↑ Back to top
ActionDescription
Process AutomaticallyRefund is processed through the payment gateway without admin intervention
Manual ReviewRequest is queued for admin approval/rejection

Abuse Prevention

↑ Back to top

Refund Limits

↑ Back to top

Set a maximum number of automatic refunds per customer per time interval:

  1. Go to WooCommerce > Settings > Refunds.
  2. Enable Automatic Refunds.
  3. Set Auto-Refund Limit (e.g., 3).
  4. Set Auto-Refund Limit Interval (e.g., month).

When a customer exceeds their limit, the request is escalated to manual review instead of being auto-processed. An escalation email is sent to the admin.

Per-User Controls

↑ Back to top

Manage refund behavior for individual customers from their user profile (Users > Edit User):

ControlDescription
Disable Automatic RefundsAll requests from this user require manual review
Block Refund RequestsThis user cannot submit refund requests at all
Custom Refund LimitOverride the global limit for this specific user
Reset CounterManually reset the user’s refund counter

The current refund counter and period are displayed on the user profile for reference.

Non-Refundable Products

↑ Back to top

Mark specific products as non-refundable:

  1. Edit a product in Products > Edit Product.
  2. In the product data panel, check Non-Refundable.
  3. For variable products, you can mark individual variations as non-refundable.

Non-refundable items:

  • Cannot be selected for line-item refunds.
  • Are excluded from full order refund calculations (the refund amount is adjusted).
  • Show a clear indicator to customers during the refund process.

Email Notifications

↑ Back to top

The plugin adds four email notifications to WooCommerce, manageable from WooCommerce > Settings > Emails:

EmailRecipientTrigger
Refund Request ConfirmationCustomerWhen a refund request is submitted
New Refund RequestAdminWhen a refund request needs review
Refund EscalationAdminWhen auto-processing falls back to manual review
Refund Request RejectedCustomerWhen a request is rejected (includes decline message)

Each email can be:

  • Enabled or disabled independently.
  • Customized with subject line and content.
  • Managed through the standard WooCommerce email settings interface.

Guest Refund Form

↑ Back to top

Shortcode

↑ Back to top

Place the guest refund form anywhere using the shortcode:

[ssr_guest_refund]

Optional attributes:

AttributeDescriptionDefault
titleForm heading text“Request a Refund”
show_titleShow or hide the form titletrue

Example:

[ssr_guest_refund title="Return an Order" show_title="true"]

Gutenberg Block

↑ Back to top

The plugin includes a native Gutenberg block:

  1. In the block editor, search for Guest Refund Form.
  2. Add the block to your page.
  3. Customize the appearance using the block settings panel:
  • Background color
  • Border color and width
  • Border radius
  • Padding

The block renders the same multi-step refund form as the shortcode.

Guest verification process:

  1. Customer enters their email, order number, and order date.
  2. The system verifies all three match an existing order.
  3. If verified, the standard refund request flow begins.

Analytics

↑ Back to top

The plugin adds a Refund Reasons report to WooCommerce > Analytics.

Accessing the Report

↑ Back to top
  1. Navigate to WooCommerce > Analytics > Refund Reasons.
  2. Use the date picker to select a date range.
  3. Filter by refund reason, product, order status, or request status.

Available Data

↑ Back to top
  • Refund reason distribution
  • Request counts by status (approved, rejected, pending)
  • Product-level refund data
  • Trend analysis over time

The report integrates with WooCommerce’s standard analytics interface, using the same date picker, filters, and export functionality.


FAQ

↑ Back to top

Does this plugin process refunds automatically?

↑ Back to top

Only if you enable automatic refunds in the settings and the payment gateway supports programmatic refunds. Otherwise, all requests are queued for manual admin approval.

What happens if a payment gateway doesn’t support automatic refunds?

↑ Back to top

The request is escalated to manual review. An escalation email is sent to the admin, and the admin can process the refund manually through WooCommerce’s standard refund interface.

Can I restrict refunds for specific products?

↑ Back to top

Yes. Edit any product and check the “Non-Refundable” option. For variable products, you can mark individual variations as non-refundable.

Can guest customers request refunds?

↑ Back to top

Yes, if you enable “Guest Refunds” in the settings. Guest customers verify their identity with their email, order number, and order date. You can place the guest form using a shortcode or Gutenberg block.

How do refund rules work?

↑ Back to top

Rules are evaluated in order (top to bottom). The first rule whose conditions match the order determines whether the refund is auto-processed or sent for manual review. If no rules match, the global setting applies.

Can customers cancel a refund request?

↑ Back to top

Yes. Customers can cancel a pending refund request from their order details page before an admin takes action.

Can a rejected customer re-request a refund?

↑ Back to top

Only if you enable “Allow Re-Request After Rejection” in the settings. This is disabled by default.

What order statuses support refund requests?

↑ Back to top

Customers can request refunds on orders with statuses that indicate completion or processing (e.g., Completed, Processing). The exact eligible statuses depend on your WooCommerce configuration.

Is this compatible with HPOS (High-Performance Order Storage)?

↑ Back to top

Yes. The plugin is fully compatible with WooCommerce’s High-Performance Order Storage.

Where can I see refund request history?

↑ Back to top

Refund request history is recorded as order notes on the individual order. Admins can view the full timeline on the order detail page. Customers see a simplified version on their order detail page in My Account.

Related Products

Offer add-ons like gift wrapping, special messages or other special options for your products.

Add shipment tracking information to your orders.