The Commercial Flow is the voluntary returns you offer as a store, available on the Pro and above plans. Unlike legal withdrawal, here you do decide whether you accept each request, and you resolve it with whatever the customer asked for: refund, exchange or store credit. Each action has its own conditions. Here they are, one by one.
Commercial Flow versus Legal Flow
The underlying difference is who is in charge:
- In a withdrawal (Legal Flow), the customer exercises a right. You neither approve nor reject: you process it and refund. This is covered by the article on handling a withdrawal request.
- In a commercial return, you offer a service. You decide whether you accept it or not, and with what resolution.
That is why the actions are named differently: here you will see "Approve" and "Reject", not "Mark as processing".
Approve or reject the request
When a commercial request arrives, it is in the Pending state. From the Actions card:
- Approve. The request moves to Approved and the customer receives an email. From there you can mark the goods as received and resolve.
- Reject. A reason field opens (required). The text you write is sent verbatim to the customer by email, and the request becomes Rejected and closed.
- Mark as received. When the goods come back to you, you record it (you can do this after approving or even directly). The request moves to Received.
You can only refund, issue store credit or confirm an exchange when the request is Approved or Received.
Process a commercial refund
A refund is always available (it is the universal resolution). You click Process refund and returnEasier instructs Shopify to return the money to the original payment method:
- A modal shows you the amount suggested by Shopify on the request's items (or only the selected ones, if the customer returned part of them).
- Unlike the legal refund, the commercial one does not include shipping costs by default: it covers the products only.
- If Shopify rejects the refund, you will see the error Shopify returns and the request does not change state (you can retry).
Once completed, the request becomes Refunded.
Issue store credit
Store credit appears as an action only if three things are true: the customer chose store credit, your plan is Pro or above and you have it enabled in the commercial settings. When you issue it, Shopify adds the amount as a balance to the customer's account:
- The order must have a Shopify customer account. If it was placed as a guest, there is no account to credit the balance to: the app tells you so and the alternative is to refund.
- The amount is calculated the same way as in the refund (all items or the selected ones).
- There is an anti-duplicate control: if an issuance is interrupted halfway, on retry the app checks in Shopify whether the credit already exists before creating another, and locks the rest of the actions on that request while an issuance is in progress.
Once completed, the request becomes Store credit issued.
Confirm an exchange
An exchange appears if the customer chose exchange and your plan is Pro or above. In the portal, the shopper chooses the replacement variant for each item (returnEasier validates that the variant belongs to the product and is available). In the detail you will see those chosen variants, and in the confirmation modal, the summary.
Important: when you confirm the exchange, returnEasier marks the request as Exchanged and notifies the customer, but does not create the replacement order. You handle shipping the replacement product yourself in Shopify, with a manual order or a draft. The app records the decision; the fulfilment is yours.
The exchange purchase (Shop for an exchange)
If you enabled "Offer swap for another product" in the commercial settings, the customer can turn their return into credit and choose any product from your catalogue (not just another variant of the same one). Here the mechanics differ from the variant exchange, because the money moves on its own:
- On confirmation, returnEasier creates a draft order in Shopify with the customer's credit applied as a discount. If the basket is worth more than their credit, the customer pays the difference in the Shopify checkout (returnEasier never touches the money).
- The request sits at Pending payment. When the customer pays, it moves to Paid automatically and you get an email notice; the draft becomes a real order on your store, which you fulfil like any other.
- If the customer does not pay within 72 hours, the draft is cancelled and the request becomes Expired, with no charges and no pending work.
- If the basket cost less than the base credit, when you process the exchange (after receiving the goods) a store credit for the difference is issued in the customer's favour —only on the base credit, never on the extra credit—. The request detail shows you the full reconciliation: credit, basket, difference paid or credit owed.
What credit the customer sees (including the optional extra credit) is configured in the commercial rules.
Everything is recorded
As in the legal flow, each commercial action generates an event in the immutable audit log —approve, reject, receive, refund, issue store credit, confirm exchange—, with its actor, its timestamp and its chained hash. The traceability is the same; what changes is that here the decision to accept or not is yours.
To activate the entrance to the Commercial Flow on your store, see the article on the "Manage return" block.