Pro features and licensing
Everything a store needs to handle returns and meet the EU withdrawal rules is free: the portal, the staff workflow, refunds and the withdrawal function. ReturnKit Pro adds the tools that keep the money in the store.
| Feature | Free | Pro |
|---|---|---|
| Returns portal: My Account, guest links, Returns page | ✓ | ✓ |
| Returns policy, exclusions and reasons | ✓ | ✓ |
| Approve, receive, refund through the gateway, restock | ✓ | ✓ |
| EU withdrawal function, acknowledgement email, checklist | ✓ | ✓ |
| Audit log, notes and customer messages | ✓ | ✓ |
| Spam protection and Cloudflare Turnstile | ✓ | ✓ |
| Requests CSV export | ✓ | ✓ |
| Exchanges, with the price difference handled | ✓ | |
| Store credit, with an optional bonus | ✓ | |
| Return labels | ✓ | |
| Return insights, with CSV export | ✓ | |
| Frequent-returner flags, with CardFence signals | ✓ | |
| Automatic approval | ✓ |
On the free plan, Pro settings and screens aren't shown at all; the Go Pro screen describes them.
Exchanges
Customers swap a returned item for another size, color or product instead of getting a refund.
In the return form, each item gets a Refund or exchange? choice: Refund this item, or Exchange for… one of the replacements on offer, with the price difference shown (+€5.00 to pay or €3.00 back). What's offered depends on Customers can swap for:
- Another variation: the other variations of the same product, or the same item again (for a faulty one);
- Any product in the same category: also other products in the product's categories, and their variations.
Only replacements that are published, purchasable and in stock are offered, up to 40 per item. Choosing a replacement for any item makes the whole request an exchange. Items in the same request the customer wanted refunded instead are refunded automatically when the exchange order is created (see below).
For staff, an exchange request has Create the exchange order. It shows the value of the returned items, the replacements' current price, and what the customer pays or gets back. Usually you create it once the returned items have arrived. ReturnKit then:
- creates a new order with the replacements, the customer's billing and shipping addresses and the original currency;
- adds an Exchange credit (R-1042) line worth the returned items (a negative, non-taxable fee);
- if the replacements cost more and When the replacement costs more is Customer pays the difference, leaves the order pending and emails the customer WooCommerce's invoice with a pay-for-order link. The request completes when they pay. With You cover it, the exchange credit covers the whole order;
- refunds, with their lines, any items in the request that the customer chose to have refunded rather than exchanged (through the gateway when it supports refunds);
- if the replacements cost the same or less, marks the order paid, so it goes to Processing for you to ship, and settles the difference by When the replacement costs less: store credit, a refund of the difference to the original payment method, or nothing. If that setting is Store credit but store credit is switched off, the difference is refunded instead. The request completes straight away.
If a refund or the credit fails, the request stays open and the history says what went wrong (The price difference could not be refunded: … The request stays open.), so you can settle it by hand.
The exchange order is linked from the request in wp-admin and on the customer's request page (Pay the difference, or Your replacement is on order #1234), and mentioned in the completed email. Stock is checked again when the order is created.
Store credit
Customers choose Store credit instead of Refund in the return form, with your bonus shown (with a 10% bonus, ready to spend straight away).
For staff, open requests get Issue store credit, pre-filled with the request's value and the suggested bonus. Both amounts can be changed. You can also tick Put items back in stock and add a message. Issuing credit completes the request and emails the customer the amount. On returns where the customer asked for a refund, the panel is offered too (Issue store credit instead). On withdrawals it's only offered when the customer chose credit, because the law asks for a refund to the original payment method otherwise.
Whose credit it is
Store credit belongs to a customer account, not an email address.
- The order was placed with an account: the credit goes straight onto that account.
- The order was placed as a guest: the credit is held against the order's email until it's claimed. The completed email and the request page show a Claim your store credit link. The customer logs in or creates an account, then opens the link, and the credit moves to that account (Your store credit is now on your account). The history records which account claimed it.
Why not simply match the email? WordPress doesn't verify the email address of a new account, so anyone could register with a guest's address and spend their credit. The claim link is signed like the request page, so only someone with the customer's email can use it.
Logged-in customers see their balance in My Account → Returns, with the history and a Save it for later / Use it at checkout switch.
At checkout, with Apply the balance at checkout automatically on, a logged-in customer's balance is taken off the order as a Store credit line, up to the amount due (items, tax, shipping and fees). It works on the classic and block checkout. Unclaimed guest credit can't be spent until it's claimed.
Why credit is a negative fee after tax, not a coupon
Store credit is money the customer has already paid you. Tax was charged on the original sale, so spending the credit should take exactly its value off what they pay now.
A coupon doesn't do that. WooCommerce applies coupons before tax. In a store that enters prices without tax, a 20.00 coupon at 20% VAT takes 24.00 off the total: the customer gets more than their credit was worth, and your tax report shows a discount that never happened. A coupon also can't pay for shipping.
ReturnKit therefore adds credit as a non-taxable negative fee, calculated after tax and shipping. 20.00 of credit takes exactly 20.00 off the total, in every tax setup.
Spending is recorded in the ledger when the order is placed. If the order is then cancelled, fails or is fully refunded, the credit is given back automatically, with an order note. If a failed or cancelled order is paid after all, the credit is taken again.
Return labels
Upload a prepaid label on a request: a PDF, PNG, JPG or GIF up to 5 MB. Upload it before approving and it goes out with the approval email (setting Attach the label to the approval email). After approval, the customer can download it from their request page (Download your return label). You can replace or remove it at any time.
Labels are stored in wp-content/uploads/returnkit-labels/ under random 32-character names, with .htaccess and index.php files against browsing. They're only served through a download link checked like the request page itself: the request token, the logged-in customer, or a shop manager. On Nginx, which ignores .htaccess, the random names keep them unguessable. Labels can be added to requests that have an order.
Return insights
Returns → Insights, for the last 30, 90 or 365 days. Declined and cancelled requests are left out.
- Requests, with units and withdrawals.
- Refunded, against the value requested.
- Kept in the store: store credit issued plus completed exchanges.
- Days to close: the average time from request to completed.
- Why items come back: units per reason.
- Requests by type, and Store credit issued, with how much was spent again.
- Most returned products: the top 25 by units returned, with the value, the top reason and the Return rate (units returned ÷ units sold). Units sold come from WooCommerce Analytics, so rates appear once Analytics has order data; until then they're left out rather than guessed.
Export CSV downloads the product table: product ID, product, units returned, value returned, units sold, return rate and top reason.
Frequent-returner flags
With Flag frequent returners on, every new request is checked and can get these flags:
- Frequent returner, when the customer has made Requests in that time or more requests in the Look back period (counting this one), or, once they have two or more orders in the period, returned more than Or a return rate above of the units they bought. Requests are matched by account and by email.
- CardFence risk, with Use CardFence's signals on and CardFence installed, when:
- CardFence flagged the original order as a card-testing attempt (order meta
_cksh_suspect), or - the customer's email is currently blocked in CardFence.
- CardFence flagged the original order as a card-testing attempt (order meta
Flags show on the request screen, in the request list (Flagged filter), the store email and the CSV export. On Pro, every request screen also has a Customer, last 90 days card: return requests, orders, units returned compared with bought, and value requested.
With Never approve flagged requests automatically on, requests flagged as frequent returner, CardFence risk or email mismatch always wait for a person.
Automatic approval
With Approve automatically on, a new return or exchange is approved as soon as it arrives when:
- it isn't a withdrawal (those are always reviewed by a person);
- its value is at most Up to a value of;
- every item's reason is in Only for these reasons (or that list is empty);
- it isn't held by a flag (see above).
The customer gets the "received" email, then the "approved" email with your instructions and label. The history notes Matched the automatic approval rules.
Licensing
ReturnKit Pro is sold and licensed through Freemius.
- Buy: from Returns → Go Pro, or the Go Pro link on the Plugins screen.
- Activate: after purchase, install the Pro zip from your Freemius email or account and enter your license key when asked. The header badge changes from Free to Pro, and the Pro settings and the Insights screen appear.
- If a license lapses: returns, refunds and the withdrawal function keep working, because they're free. Pro features switch off, but your Pro settings, store-credit balances and labels are kept, so renewing restores them. Balances aren't applied at checkout while Pro is off, but credit bookkeeping keeps running: orders already placed with credit still have their spend recorded, and given back if they're cancelled or fail.
- Manage licenses, sites and invoices: in your Freemius customer account, or from Account in the plugin menu once the Freemius SDK is active.