Buyers can now request to remove unfulfilled items from an order. Those requests are exposed as RequestedOrderEdit through the GraphQL Admin API, the Customer Account API, and three new webhooks. Merchants and apps can review them and either mark them as handled or decline them.
Requests are exchanged entirely outside the API. Apps can't see or process them, and pending changes can't be reflected in an ERP or WMS before fulfillment.
Requests can be created, calculated, marked as handled, and declined via the API. Progress is delivered through webhooks. Apps can surface pending requests in their own workflows and make decisions automatically.
requestedOrderEditResolve is described as "Manually mark a request as resolved." The docs don't say whether calling this mutation automatically changes the order's contents.
An object representing a single buyer request. It includes the status, the requested changes, and the timestamps for when the request was created, resolved, or declined.
requestedOrderEditsdisplayRequestedEditStatusrequestedOrderEditCreaterequestedOrderEditResolverequestedOrderEditDeclinerequestedOrderEditCalculaterequested_order_edit_statusorderRequestEditrequestedOrderEditCalculate@idempotent directive lets you optionally attach an idempotency keyrequested_order_edit/createdrequested_order_edit/resolvedrequested_order_edit/declinedPayload contents: the request status,order_id, and the requested line item changes (with confirmed quantities).
| Item | API 2026-07 | API 2026-10 |
|---|---|---|
| Buyer requests | Outside the API Contact the merchant directly | Handled via the API orderRequestEdit to submit |
| Record visible via the API | None | Yes RequestedOrderEdit |
| App handling | Can't view or process requests | Create, resolve, or decline via mutations |
| Sync with external systems | Pending pre-fulfillment changes can't be reflected in ERP or WMS | Receive progress updates via 3 webhooks |
| Find orders awaiting action | — | requested_order_edit_status Filter |
| Preview financial impact | — | requestedOrderEditCalculate(both Admin and Customer) |
Apps that read or manage orders.
Apps that integrate with fulfillment.
Apps that build buyer-facing account pages.
read_ordersRequired to read requests and orders via the GraphQL Admin API.
write_ordersRequired to create, resolve, and decline requests via the GraphQL Admin API.
The article lists holding fulfillment for orders with a REQUESTED status as a use case. You can design a gate that checks this status before handing orders off to a 3PL or WMS.
orderRequestEdit accepts an idempotency key: if a network error triggers a retry, the original object is returned and no duplicate request is created. It's a safe default for account pages, where many buyers are on mobile connections.
requestedOrderEditCalculate is available in both the Admin and Customer Account APIs and returns the financial outcome before a request is created. Use it for buyer confirmation screens or internal approval decisions.
Use the 3 webhooks for real-time processing, and the orders query's requested_order_edit_status filter for catch-up and batch processing.
Edits made through a request go through the existing order editing model, andrequestedOrderEditResolve is described as "manually marking as resolved." The article doesn't say whether calling Resolve changes the order automatically or whether you need to call the order editing API separately. Scope is also limited to removing unfulfilled items. Verify the actual behavior on a development store before adopting it.
requested_order_edit/created is received, put that order's fulfillment on hold in the WMS. When the resolved/declined webhook arrives, release the hold.requested_order_edit_status to check again for orders with pending requests. Required scope: read_orders.requestedOrderEditResolve/requestedOrderEditDecline to Shopify.write_orders . Showing the price change calculated with requestedOrderEditCalculate on the approval screen makes decisions easier.requestedOrderEditCalculate shows the price change first, then orderRequestEdit submits the request.@idempotent idempotency key prevents duplicates from repeated clicks or retries. Only removal of unfulfilled items is supported.