Skip to content

States and refusals

A request is one customer asking to send back one or more lines of one order. It carries a state of its own, which answers a single question: have you agreed to this return. Where each item is in your warehouse stays OpenCart's own return status, which you may rename and delete freely — Returns Portal never nominates one of those.

What a request may be

State What it means
submitted The customer has asked and nobody has decided. This is the only state the Needs a decision tab holds, and the only one a customer may cancel from.
approved You have agreed to take it back. The slip loses its NOT YET APPROVED overprint and the request waits for the parcel.
rejected You refused it. The quantity is released, so the customer may ask again for the same lines.
cancelled It was withdrawn — by the customer, or by you on their behalf. The quantity is released.
closed The parcel arrived and the request is settled. Accepted lines stay held against the order, so nothing can be returned twice.

What may happen to it, and who may do it

From To Who
submitted approved you, from Sales > Return Requests, the Approve automatically setting, running the same code you would, an integrator's system, over the extension's API
submitted rejected you, from Sales > Return Requests, an integrator's system, over the extension's API
submitted cancelled the customer, from the storefront, you, from Sales > Return Requests, an integrator's system, over the extension's API
approved rejected you, from Sales > Return Requests, an integrator's system, over the extension's API
approved closed you, from Sales > Return Requests, an integrator's system, over the extension's API

Every state not listed in the From column is final: rejected, cancelled, closed are where a request stops. There is no un-reject and no re-open, and that is forced rather than chosen — a rejection releases the quantity, so by the time anybody wanted to reverse one, a second request may already have consumed it.

What a line may carry

You decide a request line by line, in one action. Each line ends up with one of these:

Verdict What it means
pending Nobody has decided this line, which is only ever true of a submitted request.
approved You will take this line back. It holds its quantity against the order.
rejected You refused this line. Its quantity is released, so the customer may ask again for it.

Refusing every line rejects the request; approving at least one approves it. A request is never half-decided.

What the customer asked for

Resolution What it means
refund The customer wants their money back. Returns Portal moves no money for this: it is a note of what they asked for.
credit The customer wants store credit. This is the one resolution the extension can act on, with one click or automatically.
exchange The customer wants a replacement. Returns Portal records the request and does not create an order — every screen calls it an exchange requested.

Why a line may not be sent back

Reason What the customer sees
status_not_eligible The order is not in one of the statuses you allow returns from. Refuses the whole order, and is shown once above the line list.
window_expired The return window closed. Refuses the whole order, and is shown once above the line list.
excluded You excluded this product, or a category above it. Shown on the line, with your own exclusion notice beside it.
fully_returned Every unit of this line has already been asked back — through the portal, or through any return already recorded against the order.
eligible Nothing refuses this line. It carries a quantity picker from 1 to whatever is left.

Every line of the order is shown either way. A line that may not come back is greyed with its reason printed on it, because a line that simply vanished is a customer emailing you to ask where their item went.