I’m trying to work out how to get the location that an item was returned to if that item was not returned to stock.
I’ve seen ticket 6063 which details that you can get the location from the ReverseFulfillmentOrderDisposition object linked to the return. This works, but it only appears to be populated if the item was flagged as return to stock when it was returned.
According to the API documentation, there is a type on the ReverseFulfillmentOrderDisposition object which should be set to NOT_RESTOCKED if the item was not returned to stock, but I’m just getting a blank array returned for a not restocked item: “dispositions”:
Hey James, thanks for sharing that. I’ll try and replicate that on my end. Can you share an example of an order so I can create an order with a return in the same state to test this out?
Hi. Thanks for the reply. What exactly do you need as an example of the order? Do you want me to explain the steps I took, or provide the output from the GraphQL query that shows the blank dispositions array?
Yeah, I’m just curious to find out more about the state of the order that is returning an empty array instead of NOT_RESTOCKED
The order timeline showing the different return events (API mutations if you have them) that lead to this state.
Apologies if this isn’t the best way to do this, I’m not that familiar with the Shopify system! Below is a screenshot of the timeline. The original order was for three items.
I returned two of those items on one return to the same location as the original purchase, I restocked one item and didn’t restock the other.
I then returned the last item on a seperate return from a different location and didn’t restock that item either.
I can see a RESTOCKED disposition entry for the one item I returned, but for the other two items, the disposition array is blank,
Thanks for sharing that. Since they were processed on POS, this could be a combination of the current exchanges feature on your store and the endpoints used. Do you know if your shop has opted out of the new exchanges feature or if you are on a Plus plan, you can opt in using test drive https://help.shopify.com/en/manual/fulfillment/managing-orders/returns/creating-returns#considerations
Once you are opted in the API’s mentioned here should work to get the information you need.
Thanks for the response. I’m not sure if we are on a Plus plan or not. We have currently only set up a development store. Is there a way that we can tell if we are on a plus plan?
I don’t think we have opted out of anything, so whatever the default setting for exchanges is, we would be using that.
Just as a note, this was not an exchange, but a return with refund; does that make any difference?
If I look in the plan option in my admin settings page, it says “Custom plan”. The link to the test drive help page mentions going to the Organization option from settings, but I don’t see an Organization option, so I’m guessing I’m not on a plus plan.
Thanks for sharing those details, James!
Just as an FYI, development stores have the features of the Advanced plan
I was able to replicate your exact scenario. What’s happening is when you select “don’t restock” in the POS app, you’re prompted with this warning that the item will NOT be restocked at any location.
This is why no disposition record gets created in the API. It’s treated as explicitly not being processed at any specific location for inventory purposes.
As a possible workaround, you can use the staffMember
field from the order transactions or sales agreements to identify who processed the return, which can help you track down which location it was processed at.
Alternatively, I’d suggest a different approach: choose restock on all returns through POS (which will properly populate the disposition records with location data), then use the Admin API to adjust that inventory to a separate state like “damaged” or “returned” using inventory adjustments. This way you get the location tracking you need while still maintaining proper inventory states for your business logic.
Thanks. That all makes sense. My only question would be what is the purpose of the NOT_RESTOCKED disposition then? Under what circumstances would a not restocked disposition get created?
Thanks for getting back to me. The NOT_RESTOCKED would be used with apps that manage returns. For example, if a product is returned and deemed not suitable to be re-sold, that is when not restocked could be applied.
The docs here explain it better than I can 
Thanks. That’s very helpful! is there anywhere I can log an enhancement request? From a third-party system point of view, not knowing where an item was returned to just because the item was not put back in stock at that store is a bit of a limitation.