Unverified Returns (POS) – How to identify the returned product (SKU) and check if it was restocked?

Hi everyone,

I’m working with POS unverified returns (returns without a receipt / no original order reference) and am running into two gaps when processing the data via the Admin GraphQL API.

When an unverified return is processed:

  • A Return is created that contains UnverifiedReturnLineItem (not the regular ReturnLineItem).
  • There is no fulfillmentLineItem, so I cannot traverse back to an original order line item.
  • An exchange digital gift card is usually issued and appears under exchangeLineItems.
  • The order often shows the product line with currentQuantity <= 0 (commonly -1,-2...-n or 0), returnStatus: RETURNED, and source pos.

I can reliably detect these cases via the presence of UnverifiedReturnLineItem, but two important pieces of information are still unclear.

Questions

  1. Restock status
    How can I determine whether the item in an unverified return was actually restocked (and to which location)?
    Is there a reliable field on UnverifiedReturnLineItem, the related ReverseFulfillmentOrder / disposition, or elsewhere that indicates restock occurred?

  2. Identifying the returned product (SKU / UPC / variant)
    Since UnverifiedReturnLineItem does not expose a fulfillmentLineItem or a direct link to a product/variant, how can I reliably know which specific product was returned?
    Is the only option to match against the order’s line items (e.g. by quantity, unit price, or position), or is there a better way to get the SKU, barcode/UPC, or variant ID for the returned item?

Any guidance, recommended query patterns, or confirmation of current limitations would be very helpful.

Thanks in advance!

Hi @Govind_Kushwaha! I checked UnverifiedReturnLineItem against the current Admin GraphQL schema and confirmed it exposes only quantity, return reason and note fields, and refund/processed quantity tracking. There’s no fulfillmentLineItem, SKU, barcode, variant, or title, so there’s no supported traversal back to the original order line item. Your quantity/price/position matching is currently the practical fallback for the returned side. The exchange side is different, since exchangeLineItems does expose variantId and line item SKU if a return ever mixes both.

For restock, the supported route is dispositions on the reverse fulfillment order rather than anything on the line item itself.

{
  return(id: "gid://shopify/Return/<ID>") {
    reverseFulfillmentOrders(first: 10) {
      edges {
        node {
          lineItems(first: 10) {
            edges {
              node {
                dispositions {
                  type          # RESTOCKED | NOT_RESTOCKED | PROCESSING_REQUIRED | MISSING
                  quantity
                  location { id name }
                }
              }
            }
          }
        }
      }
    }
  }
}

I couldn’t test this end to end, so do confirm what comes back on your data before treating an empty list as NOT_RESTOCKED.

I’ve flagged the missing product link on UnverifiedReturnLineItem as product feedback for the team to consider. If you can share what dispositions return on one of your unverified returns, I’m happy to dig further.

Hi @Donal-Shopify, Thanks for the reply. I really appreciate it.

I tried querying the unverified return order according to your payload, and here is the result I got:

{
	"returns": {
		"edges": [
			{
				"node": {
					"id": "gid://shopify/Return/18978930989",
					"createdAt": "2026-09-02T21:16:02Z",
					"status": "CLOSED",
					"reverseFulfillmentOrders": {
						"edges": [
							{
								"node": {
									"id": "gid://shopify/ReverseFulfillmentOrder/18140070189",
									"lineItems": {
										"edges": [
											{
												"node": {
													"dispositions": [
														{
															"type": "RESTOCKED",
															"quantity": 1,
															"id": "gid://shopify/ReverseFulfillmentOrderDisposition/5598904621",
															"createdAt": "2026-09-02T21:16:06Z",
															"location": {
																"id": "gid://shopify/Location/104379056429",
																"name": "Test Location 1"
															}
														}
													],
													"fulfillmentLineItem": null
												}
											}
										]
									}
								}
							}
						]
					}
				}
			}
		]
	}
}

It says that the item is “RESTOCKED.” So, should I assume that whenever I create an unverified return, the items in it will always be restocked? Since there is no toggle option on the Shopify POS app for restocking the inventory.

Also, if there is any ticket or issue created for this, please share it so that I can track it.

Hey @Govind_Kushwaha! Thanks for sharing the payload. No, you shouldn’t assume items are always restocked. There is a per-item toggle on the POS Return items screen called Restock at this location. It defaults on, but staff can turn it off for any item, so restock is a choice made per item at processing time rather than automatic.

That’s also why the payload shows a RESTOCKED disposition even though the toggle is gone after processing. Reading dispositions.type per line item, exactly as you did, is the reliable pattern. A null fulfillmentLineItem is expected for unverified returns, so don’t let that put you off the result.

If staff process one with the toggle off, that item shows NOT_RESTOCKED instead in the same query.

@Donal-Shopify, As per your suggestion, I created one more scenario in the unverified return where 1 item is not restocked, and 2 items were restocked. Here, in this case, the disposition came to be an empty array.

It’s a little confusing for me now to understand exactly how Shopify is behaving here. My main concern is to know a way to actually restock items at the correct facility. Can you please help here by giving me the right direction for this?

{
  "returns": {
    "edges": [
      {
        "node": {
          "id": "gid://shopify/Return/48918954028",
          "createdAt": "2026-09-22T09:14:18Z",
          "status": "CLOSED",
          "reverseFulfillmentOrders": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/ReverseFulfillmentOrder/48398401580",
                  "lineItems": {
                    "edges": [
                      {
                        "node": {
                          "dispositions": []
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "refunds": {
            "edges": []
          },
          "returnLineItems": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/UnverifiedReturnLineItem/79839068204",
                  "quantity": 1,
                  "customerNote": null,
                  "refundableQuantity": 1,
                  "refundedQuantity": 0,
                  "processableQuantity": 0,
                  "processedQuantity": 0,
                  "unprocessedQuantity": 1,
                  "unitPrice": {
                    "amount": "75.0",
                    "currencyCode": "USD"
                  },
                  "returnReasonNote": "",
                  "returnReason": "UNKNOWN",
                  "returnReasonDefinition": {
                    "deleted": false,
                    "handle": "unknown",
                    "id": "gid://shopify/ReturnReasonDefinition/1",
                    "name": "Unknown"
                  }
                }
              },
              {
                "node": {
                  "id": "gid://shopify/UnverifiedReturnLineItem/79839100972",
                  "quantity": 1,
                  "customerNote": null,
                  "refundableQuantity": 1,
                  "refundedQuantity": 0,
                  "processableQuantity": 0,
                  "processedQuantity": 0,
                  "unprocessedQuantity": 1,
                  "unitPrice": {
                    "amount": "70.0",
                    "currencyCode": "USD"
                  },
                  "returnReasonNote": "",
                  "returnReason": "UNKNOWN",
                  "returnReasonDefinition": {
                    "deleted": false,
                    "handle": "unknown",
                    "id": "gid://shopify/ReturnReasonDefinition/1",
                    "name": "Unknown"
                  }
                }
              },
              {
                "node": {
                  "id": "gid://shopify/UnverifiedReturnLineItem/79839133740",
                  "quantity": 1,
                  "customerNote": null,
                  "refundableQuantity": 1,
                  "refundedQuantity": 0,
                  "processableQuantity": 0,
                  "processedQuantity": 0,
                  "unprocessedQuantity": 1,
                  "unitPrice": {
                    "amount": "78.0",
                    "currencyCode": "USD"
                  },
                  "returnReasonNote": "",
                  "returnReason": "UNKNOWN",
                  "returnReasonDefinition": {
                    "deleted": false,
                    "handle": "unknown",
                    "id": "gid://shopify/ReturnReasonDefinition/1",
                    "name": "Unknown"
                  }
                }
              }
            ]
          },
          "exchangeLineItems": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/ExchangeLineItem/3636265004",
                  "quantity": 1,
                  "lineItems": [
                    {
                      "id": "gid://shopify/LineItem/16842789322796",
                      "quantity": 1,
                      "unfulfilledQuantity": 0,
                      "nonFulfillableQuantity": 0,
                      "sku": null,
                      "variant": null,
                      "variantTitle": null,
                      "isGiftCard": true,
                      "product": null
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    ]
  }
}

Thanks for sharing the output @Govind_Kushwaha! An empty dispositions array isn’t a restock signal at all. It means no disposition has been recorded for that reverse fulfillment order line item yet, whereas a line processed with the toggle off should show an explicit NOT_RESTOCKED entry.

Since nothing has been disposed on that edge yet, you should be able to restock it yourself through the API. Use the reverseFulfillmentOrderDispose mutation with dispositionType: RESTOCKED and the locationId of the facility you want. locationId is required whenever the type is RESTOCKED, the disposition increments available inventory at that location, and each unit can only be disposed once, so the entry can’t be changed afterward.

The return you shared shows three unverified return line items and an exchange, but the payload shows a single reverse fulfillment order line item edge. If the toggled-off item sits on an edge that isn’t shown, its NOT_RESTOCKED entry may just be missing from the snippet. If you can post the full paginated output for reverseFulfillmentOrders and their lineItems I can help map which item each edge covers.

@Donal-Shopify, You were right, I was only calling the 1st object in the lineItems field. Now that I have incremented the first number to 5, I can see that 2 items were restocked and 1 item was not, as its disposition is empty array. Still, one thing that is bugging me is how I can find which item was restocked at which location. From the output below, I can say that 2 items were restocked, but it is difficult for me to actually map the right item to the right facility for restocking.

{
  "returns": {
    "edges": [
      {
        "node": {
          "id": "gid://shopify/Return/48918954028",
          "createdAt": "2026-09-22T09:14:18Z",
          "status": "CLOSED",
          "reverseFulfillmentOrders": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/ReverseFulfillmentOrder/48398401580",
                  "lineItems": {
                    "edges": [
                      {
                        "node": {
                          "id": "gid://shopify/ReverseFulfillmentOrderLineItem/78892040236",
                          "dispositions": []
                        }
                      },
                      {
                        "node": {
                          "id": "gid://shopify/ReverseFulfillmentOrderLineItem/78892073004",
                          "dispositions": [
                            {
                              "type": "RESTOCKED",
                              "quantity": 1,
                              "id": "gid://shopify/ReverseFulfillmentOrderDisposition/4071260204",
                              "createdAt": "2026-09-22T09:14:22Z",
                              "location": {
                                "id": "gid://shopify/Location/11125850169",
                                "name": "Test Location 1"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "node": {
                          "id": "gid://shopify/ReverseFulfillmentOrderLineItem/78892105772",
                          "dispositions": [
                            {
                              "type": "RESTOCKED",
                              "quantity": 1,
                              "id": "gid://shopify/ReverseFulfillmentOrderDisposition/4071292972",
                              "createdAt": "2026-09-22T09:14:22Z",
                              "location": {
                                "id": "gid://shopify/Location/11125850169",
                                "name": "Test Location 1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "refunds": {
            "edges": []
          },
          "returnLineItems": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/UnverifiedReturnLineItem/79839068204",
                  "quantity": 1,
                  "customerNote": null,
                  "refundableQuantity": 1,
                  "refundedQuantity": 0,
                  "processableQuantity": 0,
                  "processedQuantity": 0,
                  "unprocessedQuantity": 1,
                  "unitPrice": {
                    "amount": "75.0",
                    "currencyCode": "USD"
                  },
                  "returnReasonNote": "",
                  "returnReason": "UNKNOWN",
                  "returnReasonDefinition": {
                    "deleted": false,
                    "handle": "unknown",
                    "id": "gid://shopify/ReturnReasonDefinition/1",
                    "name": "Unknown"
                  }
                }
              },
              {
                "node": {
                  "id": "gid://shopify/UnverifiedReturnLineItem/79839100972",
                  "quantity": 1,
                  "customerNote": null,
                  "refundableQuantity": 1,
                  "refundedQuantity": 0,
                  "processableQuantity": 0,
                  "processedQuantity": 0,
                  "unprocessedQuantity": 1,
                  "unitPrice": {
                    "amount": "70.0",
                    "currencyCode": "USD"
                  },
                  "returnReasonNote": "",
                  "returnReason": "UNKNOWN",
                  "returnReasonDefinition": {
                    "deleted": false,
                    "handle": "unknown",
                    "id": "gid://shopify/ReturnReasonDefinition/1",
                    "name": "Unknown"
                  }
                }
              },
              {
                "node": {
                  "id": "gid://shopify/UnverifiedReturnLineItem/79839133740",
                  "quantity": 1,
                  "customerNote": null,
                  "refundableQuantity": 1,
                  "refundedQuantity": 0,
                  "processableQuantity": 0,
                  "processedQuantity": 0,
                  "unprocessedQuantity": 1,
                  "unitPrice": {
                    "amount": "78.0",
                    "currencyCode": "USD"
                  },
                  "returnReasonNote": "",
                  "returnReason": "UNKNOWN",
                  "returnReasonDefinition": {
                    "deleted": false,
                    "handle": "unknown",
                    "id": "gid://shopify/ReturnReasonDefinition/1",
                    "name": "Unknown"
                  }
                }
              }
            ]
          },
          "exchangeLineItems": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/ExchangeLineItem/3636265004",
                  "quantity": 1,
                  "lineItems": [
                    {
                      "id": "gid://shopify/LineItem/16842789322796",
                      "quantity": 1,
                      "unfulfilledQuantity": 0,
                      "nonFulfillableQuantity": 0,
                      "sku": null,
                      "variant": null,
                      "variantTitle": null,
                      "isGiftCard": true,
                      "product": null,
                      "originalUnitPriceSet": {
                        "presentmentMoney": {
                          "amount": "240.3",
                          "currencyCode": "USD"
                        }
                      },
                      "originalTotalSet": {
                        "presentmentMoney": {
                          "amount": "240.3",
                          "currencyCode": "USD"
                        }
                      },
                      "discountedUnitPriceSet": {
                        "presentmentMoney": {
                          "amount": "240.3",
                          "currencyCode": "USD"
                        }
                      },
                      "discountedUnitPriceAfterAllDiscountsSet": {
                        "presentmentMoney": {
                          "amount": "240.3",
                          "currencyCode": "USD"
                        }
                      },
                      "discountedTotalSet": {
                        "presentmentMoney": {
                          "amount": "240.3",
                          "currencyCode": "USD"
                        }
                      },
                      "discountAllocations": [],
                      "taxLines": [
                        {
                          "priceSet": {
                            "presentmentMoney": {
                              "amount": "0.0",
                              "currencyCode": "USD"
                            }
                          }
                        },
                        {
                          "priceSet": {
                            "presentmentMoney": {
                              "amount": "0.0",
                              "currencyCode": "USD"
                            }
                          }
                        },
                        {
                          "priceSet": {
                            "presentmentMoney": {
                              "amount": "0.0",
                              "currencyCode": "USD"
                            }
                          }
                        },
                        {
                          "priceSet": {
                            "presentmentMoney": {
                              "amount": "0.0",
                              "currencyCode": "USD"
                            }
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    ]
  }
}

@Govind_Kushwaha Glad the pagination fix sorted the counts! The location answer is already in your payload, since each ReverseFulfillmentOrderLineItem edge carries its own dispositions and every disposition carries its location. On this return both restocked edges point at Test Location 1, so selecting id, totalQuantity, and dispositions { type quantity location { id name } } on every edge gives you the complete per-item restock picture.

The mapping you’re after doesn’t exist though. The line item object only exposes id, totalQuantity, fulfillmentLineItem (always null for unverified returns), and dispositions, with no link back to the UnverifiedReturnLineItem or its product. Which of the $75/$70/$78 items landed on which edge can’t be resolved through the API, so mapping them is a best guess outside the API, with totalQuantity the only numeric hook on each edge.

For the edge with the empty dispositions array, no dispose has been recorded yet. If you want that unit restocked, reverseFulfillmentOrderDispose with dispositionType: RESTOCKED and your chosen locationId handles it, and each unit can only be disposed once.