Apps in returns
Returns apps provide merchants with various ways to manage their returns. For example, a returns app can identify eligible items for a return and issue customers a refund for returned items on behalf of the merchant.
This guide describes what returns are, the lifecycle of a return, use cases for returns apps, and some considerations before you get started.
How it works
Anchor link to section titled "How it works"A return represents the intent of a buyer to ship one or more items from an order back to a merchant or a third-party fulfillment location. Return apps capture the financial, logistical, and business intent of a return.
You can use the GraphQL Admin API to provide a return management workflow for merchants.
The following diagram shows an example lifecycle of a return:
The customer requests to return an item that was previously fulfilled, sends the item back to the merchant, and receives a refund (if applicable).
The merchant manages the return. For example, a merchant might take the following actions:
- Determining the eligibility of the return
- Manually approving the return
- Manually issuing a refund
The returns app automates the return management process by taking actions on behalf of merchants. These actions can include the following:
- Retrieving returnable fulfillments
- Approving or declining returns
- Creating and optionally canceling returns
- Creating sales for return/exchange items
- Creating fulfillments for exchange items
- Sending shipping and tracking information to the customer
- Issuing refunds to the customer
- Closing and optionally reopening returns
Shopify creates a reverse fulfillment order.
The third-party fulfillment service disposes or restocks items. If a merchant is only using a returns app, and not a third-party fulfillment service, then an alternate workflow can be for the app to manage disposing and restocking items.
Reverse fulfillment orders and deliveries
Anchor link to section titled "Reverse fulfillment orders and deliveries"Apps can manage reverse fulfillment orders and reverse deliveries on behalf of merchants.
A reverse fulfillment order represents the work that's required to process a return. It includes one or more items in a return that will be processed by the merchant or third-party fulfillment service. A reverse delivery is a set of items to be packaged together and sent back to the merchant or third-party fulfillment service.
The following diagram shows an example workflow of managing reverse fulfillment orders and reverse deliveries:
Return statuses
Anchor link to section titled "Return statuses"Each return has a status, which indicates the state of the return. The following diagram shows how a return's status changes based on the GraphQL mutation that's executed:
- The
returnRequest
mutation changes the return's status toREQUESTED
. - The
returnDeclineRequest
mutation changes the return's status toDECLINED
. - The
returnCreate
,returnApproveRequest
, andreturnReopen
mutations change the return's status toOPEN
. - The
returnCancel
mutation changes the return's status toCANCELED
. - The
returnClose
mutation changes the return's status toCLOSED
.
Common use cases for returns apps include the following:
- Updating orders to reflect that a merchant or third-party fulfillment service has initiated or completed a return
- Marking items as returned, refunded, or restocked
- Adding exchange items to a return
- Uploading app-created shipping information to Shopify
- Getting notified if shipping information has changed
The following table describes the returns-related webhooks that your app can subscribe to in GraphQL Admin API version 2023-01 and higher. For more information about webhook topics, consult the GraphQL Admin API reference.
Webhook topic | Description | Payload information |
---|---|---|
returns/request |
Occurs when a return is requested. This means that the return's status is REQUESTED . |
Webhooks |
returns/approve |
Occurs when a return is approved. This means that the return's status is OPEN . |
|
returns/decline |
Occurs when a return is declined. This means that the return's status is DECLINED . |
|
refunds/create |
Occurs when a new refund is created without errors on an order, and includes returns data. | |
returns/cancel |
Occurs when a return is canceled. This means that the return's status is CANCELED . |
|
returns/update |
Occurs when a return is updated without errors on an order, and includes data on changes made to the return. | |
returns/close |
Occurs when a return is closed. This means that the return's status is CLOSED . |
|
returns/reopen |
Occurs when a return is reopened. This means that the return's status is OPEN . |
|
reverse_fulfillment_orders/dispose |
Occurs when a disposition has been made. | Reverse fulfillment orders webhook |
reverse_deliveries/attach_deliverable |
Occurs when a reverse delivery is created or updated with delivery metadata, such as the delivery method, label, and tracking information that's associated with a reverse delivery. | Reverse deliveries webhook |
Limitations and considerations
Anchor link to section titled "Limitations and considerations"You can return only items that have been fulfilled:
- If you create a return on an archived order, then the order is automatically unarchived.
- If you need to make changes to an unfulfilled item, then you can edit an order.
You can manage returns only using the GraphQL Admin API.
If all items in a fulfillment are returned, or are in the process of being returned, then the fulfillment card won't render on the order detail page. You can access some fulfillment information from the Timeline instead.
- Learn how to manage returns by using the GraphQL Admin API.