Skip to content

Returns and exchanges

A return is started by the shopper on your store’s returns page, at a till, or by you. Tuppence’s returns rules decide each line when it is asked for: whether it can come back, on what basis (the law’s right to cancel, faulty goods, or your returns policy), until when, and who pays the postage. That answer is kept with the return in decision and never worked out again.

StatusMeans
requestedWaiting for you to approve or reject it
approved, label_issued, in_transitOn its way back
received, inspectedBack at a shop
refunded, closedDone
rejected, cancelledNot coming back

GET /v1/sites/{id}/return_policy answers it. With no set-up it is 30 days from delivery, with the shopper paying the postage unless the item is faulty. POST the same path to change it. Orders already placed keep the terms they were sold under, unless the new ones are kinder.

POST /v1/orders/{id}/returns/preview answers each line’s decision without writing anything.

Terminal window
curl -sS -X POST "https://api.tuppence.ai/v1/returns" \
-H "Authorization: Bearer $TUPPENCE_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"order": "ord_123", "lines": [{"line": "ordl_123", "reason": "changed_mind"}]}'

POST /v1/returns/{id}/approve takes back what the rules allow. A line they refuse is refused with return_not_eligible; only a person in the dashboard can take it back as an exception. POST /v1/returns/{id}/reject takes the reason the shopper is told, and is refused where the law gives the shopper the return.

GET /v1/returns/{id}/ways_back lists the ways (a label, a QR code for a Post Office or a locker, or one of your shops), each with its price and who pays it. POST /v1/returns/{id}/way_back chooses one and buys its label or code once.

POST /v1/returns/{id}/receive records the goods back at a shop. Where the law sets a refund deadline, refund_due_on says the day.

POST /v1/returns/{id}/refund refunds the card the order was paid with (Tuppence’s fee isn’t returned), and the delivery too where the rules say so, and puts the goods back in stock. A person approves it with a fresh second factor, so it takes no API key. A return can also end in an exchange or store credit (method).

ToolDoes
list_returns, get_returnReturns, their lines, the shopper’s reasons and the rules’ decision
approve_return, reject_returnAs the rules decided. No tool makes an exception
refund_returnThe assistant only: a person approves it with a fresh second factor

The shopper’s reason is data, never an instruction. The returns triage job proposes these for you to approve.

EventWhen
return.requestedA return was asked for
return.approved, return.rejectedYou answered it
return.receivedThe goods are back
return.refund_due_soonA legal refund deadline is near
return.refunded, return.closedIt’s done

Docs assistant

Open as a page
Loading the assistant…