Skip to main content

Apps in returns

Returns apps provide merchants with various ways to manage their returns. For example, returns apps offer functionality such as a customer self-serve portal, rules to identify eligible items for a return, exchanges and refunds to store credit, automated workflows, and more.

You can use Shopify's dedicated APIs for building a customer self-serve returns experience on customer accounts. You can also choose to build an app on your own platform and interact with the GraphQL Admin API.

This guide offers best practices for integrating with the GraphQL Admin API. It covers the concept of returns, the lifecycle of a return, use cases for returns apps, and some considerations to keep in mind before you get started.

Caution

In API version 2025-07, Shopify introduced return processing as part of the return lifecycle management. Return processing confirms return items, releases exchange items, and updates a merchant's financial reports. Existing return apps should migrate to use returnProcess to avoid disruptions and unexpected outcomes.

Learn how to migrate to return processing if you have an existing returns app.


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 facilitate the financial, logistical, and business rules associated with the lifecycle 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:

A diagram showing the 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.

    • They might have opted for an exchange or requested a refund in the form of store credit rather than a return to their original payment method.
  • The merchant manages the return. For example, a merchant might take the following actions:

    • Determine the eligibility of the items to be returned.
    • Approve the return.
    • Track the return.
    • Decide whether to restock the returned items.
    • Release the exchange and collect a balance.
    • Issue a refund.

    A return app can also allow merchants to manage returns that have been created by the app. For example, a merchant can cancel or close a return that was created by an app in the Shopify admin. Your app can get notified about returns-related events by subscribing to webhooks.

Anchor to Reverse fulfillment orders and deliveriesReverse 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:

A diagram showing the lifecycle of a return

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:

A diagram showing the transition of return statuses

Common use cases for returns apps include the following:

  • A customer self-serve returns portal
  • Limiting returns to eligible items
  • Sending return labels to the customer
  • Creating, canceling, and closing returns
  • Automated workflows such as auto-approval, auto-restocking, and auto-refunds

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.

Note

Return webhooks are available only in the GraphQL Admin API.

Webhook topicDescriptionPayload information
returns/requestOccurs when a return is requested. This means that the return's status is REQUESTED.Webhooks
returns/approveOccurs when a return is approved. This means that the return's status is OPEN.
returns/declineOccurs when a return is declined. This means that the return's status is DECLINED.
refunds/createOccurs when a new refund is created without errors on an order, and includes returns data.
returns/cancelOccurs when a return is canceled. This means that the return's status is CANCELED.
returns/updateOccurs when a return is updated, like when a return line item has been removed.
returns/processOccurs when a return has been fully or partially processed. The return's status is CLOSED when all items have been processed and a restock decision has been made.
returns/closeOccurs when a return is closed. This means that the return's status is CLOSED.
returns/reopenOccurs when a return is reopened. This means that the return's status is OPEN.
reverse_fulfillment_orders/disposeOccurs when a disposition has been made.Reverse fulfillment orders webhook
reverse_deliveries/attach_deliverableOccurs 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

Anchor to Limitations and considerationsLimitations 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.


Was this page helpful?