Aller au contenu principal

Pro Features

This page describes what the Pro edition adds to ReturnDesk. Everything on it is missing from the Lite edition. The carrier integrations have their own page: Labels and carriers.

Pro feature

Every feature on this page needs the Pro edition. The settings that control them are not shown in Lite.

FeatureWhere to find it
Store creditResolution "Store credit", checkout, Advanced settings
Exchanges for other products and with a price difference (Lite has same-price variation exchanges)Resolution "Exchange for another item", Rules settings
Warranty claimsResolution "Warranty claim", product Returns tab
Guest portalShortcode or Return portal block
ReportsWooCommerce > Returns reports
Fees, shipping rule, automatic approval, country windows, keep-below amountRules > Fees, shipping and automation
Reminders and automatic closingEmails and Advanced settings
Prepaid labels and trackingLabels settings
Condition grade at inspectionItems panel of the return screen
REST API and webhooksREST API

Store credit​

Store credit is a ledger per customer. Credit goes in when a return is resolved with the Store credit resolution, and out when the customer uses it at checkout.

Issuing credit​

When you resolve a return as store credit, the customer gets the refundable amount (the accepted items, capped at what the order can still give back, minus fees) plus the Store credit bonus (%). The bonus is not capped and not refunded money, it is extra credit. When an EU withdrawal brings back the whole order, its delivery charge is added to the credit at face value, without the bonus (see EU withdrawal right). The credit expires after Store credit expiry (days) (default 365, 0 for never), and the customer gets the "Store credit added" email with the new balance.

Credit needs a customer account, and it is always in the store currency. A return from an order in another currency cannot be resolved as store credit.

You can also add credit by hand through the REST API. The ledger only supports adding credit: there is no endpoint to remove or edit an entry.

Using credit at checkout​

Signed-in customers who have credit see a checkbox under the order review: Use my store credit (... available). It works with the classic checkout and with the Checkout block. When it is ticked:

  • The credit is added to the order as a negative, non-taxable fee named Store credit, up to the order total. A full credit brings the total, taxes included, to zero.
  • The credit only applies when the cart is in the store's base currency, and never to subscription renewals.
  • When the order is placed the amount is written to the ledger. If the balance was spent elsewhere in the meantime, only what is left is taken, the order total is raised by the difference and the order note says so.

The credit goes back to the balance when the order is cancelled, fails, is refunded in full or moves to Refunded. A partial refund you make by hand does not give credit back, because whether to do so is a decision for the merchant.

An unpaid order (Pending payment, On hold, Failed or a checkout draft) that you move to the trash or delete gives its credit back too, and a daily job gives back the credit of orders still Pending payment after 48 hours. Should the customer pay such an order after all, the credit is taken again. Paid orders keep their credit.

Returns of orders paid with credit​

A return of an order paid partly or fully with store credit pays the money back the way it came. ReturnDesk refunds through the payment gateway first, as far as the gateway can still refund, and gives the rest back as store credit. For example, an order of two items of 100, paid with 120 of credit and 80 by card: returning one item refunds 80 to the card and gives 20 of credit back, and the other item can still be returned for 100. An order paid fully with credit gets its credit back, with no gateway refund. The resolution panel shows the part given back as credit under Store credit.

When WooCommerce reports such an order as fully refunded after a return, that is not a refund of the whole order: the credit of the items the customer kept stays with the order. A full refund or the Refunded status you set later gives back only the credit the order still holds, never twice. What the order's returns were already given as store credit counts too (its value without the bonus): an order of two items of 50 paid with 50 of credit and 50 by card, where one item was resolved as store credit of 50, gives back no more order credit when you then refund the card part in full. The customer never gets back more than the order was paid.

Expiry​

A daily job expires credit entries whose expiry date has passed. An expiry takes away the amount of the entry, but never more than what is left of the balance once the credit that is still valid is set aside. What the customer spent counts against the old credit first, so newer credit is never lost with it: credit of 100 that expires on day 365, spent in full, followed by 50 more on day 300, leaves the 50 untouched on day 365. The 50 expires on its own date.

Credit that comes back from an order has no expiry date, even when the credit the customer spent had one: the credit of a cancelled, failed, refunded, trashed or deleted order, and the credit part a return of an order paid with credit gives back.

Customers see their balance at checkout and in the email. There is no balance page in My Account.

Exchanges​

An exchange lets the customer swap the returned item for another one. The Lite edition already exchanges an item for another variation of the same product at exactly the same price, as a free exchange order (see Customer flow). The Pro edition adds other products (the product itself and its up-sells), a price difference, exchange shipping and the tsre_exchange_candidates filter.

  1. In the wizard the customer picks Exchange for another item and chooses a replacement for each item. See Customer flow.
  2. You inspect the returned items as usual.
  3. When you press Resolve, an exchange order is created with the replacement items for the accepted quantities.

The replacement must be one the store offers for the item (the list above, plus what the tsre_exchange_candidates filter adds). A request that names any other product is refused, when it is sent and again when you resolve.

Prices are compared on catalogue prices: the price one unit of the returned item had before coupons, with its tax, against what the replacement costs with tax, both in your store's decimals. The Exchange price rule decides which replacements are allowed. Same price only allows only replacements that cost exactly the same on that basis, in both editions. Allow a price difference allows any replacement. Because the catalogue price counts, a size or colour swap of an item bought with a coupon is still a same-price exchange and moves no money.

What the exchange order looks like:

  • The customer pays only the positive difference, tax included: the exchange order asks exactly that amount, with its tax taken out of it, not added on top. If nothing is due, the order goes to Processing straight away and its stock is reduced. If something is due, the order stays Pending, its stock is held, and the customer pays it from a Pay for your exchange link on the return page or from the link in the "Return resolved" email, which gives the amount due. The coupon of the original order is not extended to the new item: an item bought for 50 with a 50% coupon (catalogue price 100) exchanged for an item of 120 asks 20.
  • If the replacement costs less, you owe the difference, for the share the customer actually paid: the catalogue difference times what was paid divided by the catalogue price, so the discount carries over. It is refunded with its tax on the returned order lines, never more than the accepted items were paid and than the original order can still refund, the way the order was paid (see Returns of orders paid with credit). For example, an item with a catalogue price of 100 bought for 50 with a 50% coupon and exchanged for an item of 10 refunds 45 (half of the difference of 90).
  • When a return exchanges several items, each line counts on its own as above (a cheaper replacement at the share that was paid, a dearer one in full) and the exchange settles the sum: a refund when it is negative, the amount due on the exchange order when it is positive. For example, A (100, bought for 50 with a coupon on A) exchanged for 10 and B (50, no discount) exchanged for 150 asks 55 (100 for B minus 45 for A), not the catalogue difference of 10, so the coupon of A is not handed over to B. The estimate on the review step uses the same rule.
  • Exchange shipping sets the shipping on the new order: Free, Same as the original order (copies the shipping lines) or Calculate at current rates. With the last choice the order is flagged and stays Pending, so you can add the shipping yourself and send it to the customer.
  • The two orders are linked: the exchange order stores the id of the original order, and the original order stores the ids of its exchange orders. The return timeline records the exchange.
  • Restocking fees and return shipping do not apply to exchanges.
remarque

A free exchange fires the standard WooCommerce Processing order email to the customer and the New order email to the store. This is intended: the customer gets a confirmation that the replacement is on its way, and you get a pick list.

If a replacement is out of stock at resolution time, the exchange is refused with a message and nothing is created.

Warranty claims​

A warranty claim lets a customer return an item after the normal return window has ended, as long as the product or category has Warranty (days) set and the warranty is still running. Within the warranty period the wizard only offers Warranty claim.

A warranty claim is settled as an exchange when every accepted item has a replacement, and otherwise as a refund of the accepted items with no restocking fee and no return shipping withheld.

Guest portal​

The guest portal lets customers who checked out without an account (or who are not signed in) start and follow returns. It is offered as a shortcode and as a block.

The guest portal start page

Set up​

Create a page and add the Return portal block (see Blocks), or add the shortcode:

[tsre_return_portal]

ReturnDesk looks for a published page with the slug returns-portal. If there is one, that page is the portal address. If not, the plugin answers /returns-portal/ with a virtual page that contains the portal. With plain permalinks the address is /?tsre_portal=1. If your portal lives on another page, change the address with the tsre_portal_url filter.

How it works​

  1. The customer enters the Order number and the Billing email and presses Email me a link.
  2. Whatever the answer is, they see the same message: "Check your email". The form cannot be used to find out which orders exist.
  3. When the details match, ReturnDesk emails a link with a signed token for that order. The link works for Guest access link validity (days), default 30.
  4. The link shows the returns already made for the order and opens the same wizard as My Account.
  5. A single return page opens with that return's own token, so the order link alone does not open a return. That token works while the return is open and for 30 days after it was resolved, rejected or cancelled. After that the page gives the same "We could not find that return." answer as for an unknown link.

Protection: five attempts per fifteen minutes per IP address and five per order number, constant-time token checks, tokens never written to logs, and no-referrer and no-cache headers on every page that carries a token. The IP address comes from REMOTE_ADDR. Behind a trusted proxy, return the real address from the tsre_client_ip filter.

The Start a return button block sends signed-out visitors to the portal when the Pro edition is active.

Reports​

The returns report

WooCommerce > Returns reports shows the period you pick with two date fields and Show, or with the shortcuts Last 7 days, Last 30 days, Last 90 days, This month and Last month. Days are days of your site time zone and the period can be at most 731 days.

BlockWhat it shows
Summary: ReturnsReturns created in the period, cancelled ones left out
Summary: ItemsUnits requested in those returns
Summary: RefundedMoney actually refunded on returns resolved in the period
Summary: Store credit issuedCredit issued in the ledger for returns resolved in the period, bonus included
Summary: ExchangesReturns resolved in the period with an exchange
Summary: Median hours to resolveThe middle value of the hours from request to resolution
ReasonsReturns, items and share of items per reason
Most returned productsPer product: Returned, Sold, Return rate and Main reason. The top 50 are shown.

The return rate is the units returned in the period (rejected and cancelled returns left out) divided by the units sold in orders created in the period (failed, cancelled, pending and draft orders left out). Variations count under their product. The rate shows n/a when nothing was sold. Amounts are added up in one currency, with no conversion.

Download summary (CSV), Download reasons (CSV) and Download all products (CSV) export the report for the chosen period. The CSV has a byte order mark so Excel reads it correctly, and any text cell that starts like a spreadsheet formula is prefixed so it cannot run.

Fees, shipping rule and automation​

These fields are in Rules > Fees, shipping and automation. See the Settings reference for every field.

  • Restocking fee. A fixed amount per item or a percentage of the line total, taken off the refund or the credit. It is not charged for reasons marked as defective, not during the EU withdrawal period, and not on exchanges or warranty claims. A return keeps the fee it was requested with. Customers see the fee in the policy block.
  • Who pays return shipping. When the customer pays, the cost of a label you bought is withheld from the refund, up to the refund amount.
  • Keep-below amount. Items under the limit are not sent back. You resolve them with Resolve without return.
  • Automatic approval. Requests that pass every rule are approved at once. With a limit, larger requests wait for a person.
  • Return window by country. Different days for different billing countries. The EU 14-day right still applies on top.
  • Lower amount. On the return screen, lower the refund or credit before you press Resolve.

Reminders and automatic closing​

  • Reminder. For an approved return that the customer has to ship, one reminder email goes out three days before the end of the return window, if the parcel is not yet on its way. It does not go out for returns the customer keeps, or for prepaid label returns still waiting for their label. If you switch the email off, the timeline notes that the reminder was skipped.
  • Automatic closing. A daily job cancels returns that the customer was expected to ship but did not, Close unreturned approved requests after (days) after approval. The customer gets the "Return cancelled" email, which says the return was closed after that many days. A return with a label you bought is never closed automatically, because the label may be charged for or in use. Those returns are listed in one admin notice instead.

Both jobs run on Action Scheduler, which ships with WooCommerce.