> ## Documentation Index
> Fetch the complete documentation index at: https://developers.perform.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Self-Service Returns

> Let shoppers request, get approved and label a return from your Tracking Page, with approval flows and policy rules you configure.

**Available to all Returns customers.**

## Summary

Self-Service Returns lets a shopper start a return from the Tracking Page of a delivered order, choose the items and reason, get the request approved and download a return label, without contacting your support team. Every request lands in the Returns Overview in the portal, where your team reviews it or lets your rules approve it automatically.

## Who it’s for

Customer service and e-commerce teams who handle return requests by email and ticket today. The same tracking widget that shows a delivery also takes the return, so the shopper never leaves your branded page and your team stops re-typing return details from emails.

## Key benefits

* **Returns start where the delivery ends.** Once a shipment reaches Delivered, the Tracking Page shows a return call-to-action. The shopper picks the items and a reason in the same widget, so there is no separate returns portal to integrate.
* **Approval runs the way your policy says.** Choose manual approval, automatic approval, or a hybrid where only requests matching your criteria, such as high product value, wait for a manual review.
* **Your returns policy is enforced in the form.** Return windows, non-eligible items and manual-review items are configured as rules, so a shopper sees up front what can be returned instead of reading a terms page.
* **One request covers a multi-parcel order.** With returns at order level, the form lists every line item shipped under the same order ID, so the shopper does not file one request per parcel.
* **Every step is in your words.** The pending message, rejection reason, shipping instructions, form footer and non-eligible label are all customisable text.

## How it works

### The return journey

| Step | What happens |
| - | - |
| Return request | The outbound shipment reaches Delivered. The Tracking Page highlights the status and shows the return call-to-action. The shopper selects items, gives a reason, and optionally uploads an image and adds a comment. |
| Approval | The request and its Return Shipment are created in the portal. Depending on your approval flow, the request waits as Pending or is approved on the spot. |
| Label | After approval the shopper gets the return label in the widget, either immediately or after choosing a drop-off point. See [Return Options & Labels](https://developers.perform.ai/products/returns/return-options-and-labels.md). |
| Return tracking | As soon as the carrier confirms receipt of the parcel, the widget switches to show the return shipment’s tracking events. |
| Refund processing | Events you add to the Return Shipment, such as a completed quality check, appear in the tracking timeline and can trigger notifications and webhooks. See [Returns Notifications & Refund Triggers](https://developers.perform.ai/products/returns/returns-notifications-and-refund-triggers.md). |

Brands already using Post-Purchase do not need to install anything else: outbound tracking and returns run through the same widget.

### The returns form

| Field | Rule |
| - | - |
| Items to return | Required. The shopper selects one or more line items. Items blocked by a policy rule show a non-eligible label and cannot be selected. |
| Return reason | Required. You define the reasons. Up to 8 custom reasons are supported. |
| Image upload | Optional. The field can be shown or hidden. Its label and helper text are customisable. |
| Comment | Optional. The field can be shown or hidden. |

### Returns at order level or shipment level

* **Order level.** The form lists all line items from every shipment that shares the same order ID or reference. Recommended for most brands, because a shopper with a three-parcel order returns items from all of them in one request.
* **Shipment level.** The form lists only the line items of the shipment currently open. Useful for marketplaces, where one multi-parcel order can contain items from several sellers.

### Approval flows

| Flow | Behaviour |
| - | - |
| Manual | The request is created with status Pending. Your team approves or rejects it in the Returns Overview. The widget tells the shopper the request was received and what happens next; this message is customisable, for example to state your approval timeline. |
| Automated | The request is approved on creation. The shopper goes straight to drop-off selection and the label. |
| Hybrid | Requests are approved automatically or routed to manual review based on criteria you define, such as product value. |

A rejected request can later be changed to Approved. An approval cannot be reversed.

### Returns policy rules

Rules align the returns form with your returns policy. Four rule types are available:

| Rule | Effect |
| - | - |
| Returns window | Defines how long an order or shipment stays eligible. After the window closes, the return call-to-action is disabled and a customisable message explains why. |
| Non-eligible items | Marks items that cannot be returned, for example hygiene products or sale items. They show a non-eligible label in the form and cannot be selected. The label text is customisable; the default is “Non-Eligible”. |
| Automated approval | Approves every request on creation. |
| Items requiring manual review | Excludes items such as high-value products from automatic approval and routes their requests to your team. |

Rules match against the shipment and line item data you send with the outbound shipment, so the fields a rule relies on, such as product category or order tags, must be present on your shipments. Rules are configured with your account team.

Fee rules and keep-item refunds are available on request. See [Returns Policy Rules](https://developers.perform.ai/products/returns/returns-policy-rules.md).

### Customisable text

| Text | Where it shows |
| - | - |
| Order non-eligible text | On the outbound Tracking Page for delivered shipments that can no longer be returned. |
| Returns form footer | At the bottom of the form. Typically links to your returns or refund policy. |
| Attachment upload label and helper text | On the image upload field. |
| Non-eligible product label | On items blocked by a product exception rule. |
| Parcel details box | Custom text in the parcel details box throughout the flow. |
| Pending approval | While a request waits for manual review. |
| Reject reason | When a request is rejected. |
| Shipping instructions | When the return label is ready. |
| Return shipping text | In the parcel details box during the Download Label step. |

When both the parcel details box text and the return shipping text are set, the return shipping text shows in the Download Label step and the parcel details box text everywhere else. When the return shipping text is empty, the parcel details box text shows in every step.

### Additional line item information

Up to 3 extra line item fields, such as product ID, size or colour, can be shown in the order details section, the returns form and the return details section. You name the fields in the Tracking Page configuration and they are read from the line item data on the shipment.

### Branding

The returns widget takes the branding of the Tracking Page it runs on, so the return journey looks like the rest of your site.

## Set up in the portal

Returns configuration lives with your Tracking Page configuration. Extra line item fields are set under **Tracking Page configuration** > **Additional Features** > **Line Item**. Approval flow and policy rules are set up with your account team.

Requests submitted through the widget appear under **Returns** > **Returns Overview**. See [Returns Overview](https://developers.perform.ai/products/returns/returns-overview.md) for approving, rejecting and managing them.

## Use via API and MCP

Create return requests from your own returns portal or customer service tooling, and approve, reject or amend them programmatically:

* [Create a Return](https://developers.perform.ai/guides/create-return.md) with `POST /v5/return/` ([API reference](https://developers.perform.ai/api-reference/v5/returns/create-return.md)).
* [Update a Return](https://developers.perform.ai/guides/update-return.md) with `POST /v5/return/update/` ([API reference](https://developers.perform.ai/api-reference/v5/returns/update-return.md)).

Returns created through the API appear in the Returns Overview alongside widget requests.

## FAQ

### Do shoppers need a separate returns portal?

No. The return call-to-action appears on the Tracking Page once the shipment is delivered, and the whole flow, from item selection to label download, runs in the same widget as outbound tracking.

### Can I approve some returns automatically and review others?

Yes. The hybrid flow approves requests automatically unless they match your manual-review criteria, such as a product value threshold or specific items. The manual-review rule excludes those items from automatic approval.

### Can I require a photo for a return?

The image upload field can be shown or hidden on the form.&#x20;

### What does a shopper see for an item that cannot be returned?

The item carries a non-eligible label in the form and cannot be selected. The label text defaults to “Non-Eligible” and can be changed to match your own terminology, for example “Final sale”.

### Can I undo an approval?

No. A rejected request can be changed to Approved, but an approval cannot be reversed. For the status list and how to manage requests, see [Returns Overview](https://developers.perform.ai/products/returns/returns-overview.md).

### Which languages does the returns widget support?

The widget follows the Tracking Page configuration, which can be set up in more than 30 local languages for different return locations.

## Troubleshooting

| Symptom | Cause | Fix |
| - | - | - |
| The return call-to-action does not appear | The outbound shipment has not reached Delivered, or the returns window has closed | Check the shipment status in Shipment Overview. If the window has closed, the shopper sees the order non-eligible text instead. |
| An item that should be returnable shows as non-eligible | A non-eligible items rule matches the line item data on the shipment | Compare the item’s line item values, such as product category, with the rule conditions and correct the data or the rule with your account team. |
| A request was approved automatically that should have waited for review | The manual-review rule did not match, usually because the shipment lacks the data the rule checks | Make sure the fields the rule relies on, such as product value or tags, are sent with the outbound shipment. |
| A shopper with a multi-parcel order only sees items from one parcel | Returns run at shipment level, or the parcels do not share an order ID | Switch to order-level returns, and send the same order ID on every shipment of the order. |
| Extra line item fields are blank on the widget | The field names in the configuration do not match the line item data on the shipment | Use the exact field names sent with the shipment’s line items. A maximum of 3 extra fields is shown. |

## Related

* [Return Options & Labels](https://developers.perform.ai/products/returns/return-options-and-labels.md)
* [Returns Overview](https://developers.perform.ai/products/returns/returns-overview.md)
* [Returns Notifications & Refund Triggers](https://developers.perform.ai/products/returns/returns-notifications-and-refund-triggers.md)
* [Returns Policy Rules](https://developers.perform.ai/products/returns/returns-policy-rules.md)
* [Returns overview](https://developers.perform.ai/products/returns/overview.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.