[GraphQL Admin API][2025-07] Returns/Exchanges Automatically Processed and On Hold

Hello,

We are using the 2025-07 version of the GraphQL Admin API for exchanges. We recently added the returnProcess mutation to our flow. However, it seems like the returnCreate mutation is still continuing to automatically put the exchange line item on hold.

We referenced this article for our implementation:

It mentions the following:

  1. Holding exchange fulfillment orders - Previously, all fulfillment orders created for an exchange would automatically be placed on hold. Moving forward only exchanges with a balance owed by the buyer will be automatically placed on hold. An even or refundable exchange will not be placed on hold.

However, it seems like the previous logic for returnCreate is still executing for our usage of the 2025-07 version of the GraphQL Admin API.

For example, this is what we are currently experiencing:

  • We are creating an exchange using returnCreate for a variant under the same parent product and at the same price as the original product purchased

  • We then observe within the Shopify admin dashboard, that the return is in progress and the exchange line item is on hold

  • Digging into the GraphQL response, the return line item has a processableQuantity of 1 and the exchange line item has a processedQuantity of 1 and a processableQuantity of 0 (this is prior to returnProcess being requested)

  • We are then trying to call returnProcess with a return line item (quantity: 1) and an exchange line item (quantity: 1)

  • This returns with the following user error: input: Invalid exchange line item quantity

So the main questions are:

  • How come we are still seeing holds being automatically created?
  • How come there are already processed quantities upon returnCreate?

Hey @jomarsantos-extend, thanks for reaching out, this does sound odd.

Would you be willing to share the shop domain, a sample order ID and return ID, and the exact returnCreate payload you sent (with any sensitive data redacted) along with the X‑Shopify‑API‑Version used on that call?

If you can also share whether the return was created via your app or the Shopify Admin, and provide the hold reason shown on the exchange fulfillment order (for example, AWAITING_PAYMENT vs AWAITING_RETURN_ITEMS) that would be super handy for troubleshooting on my end.

With those details I can take a look to see if the exchange was processed using the legacy logic or if something else may be happening here. If it’s easier to share those details by DM, just let me know and I can set that up, hope to hear from you soon!

@Alan_G I can get those details for you. DM might be best - let me know how I can get that to you. Thanks!

Hey @jomarsantos-extend, sounds good! I’ll set up the DM on my end, speak to you shortly, we’ll get this looked into!