Admin GraphQL API / New mutation

fulfillmentOrderReportProgress
3PLs and shipping apps can tell merchants "we've started"

Starting with API version 2026-04, 3PLs and shipping apps can report fulfillment order progress via fulfillmentOrderReportProgress. They can signal that work has begun, optionally with a short status note. Merchants gain visibility into the shipping pipeline.

On this page
  1. What's changing (in 30 seconds)
  2. How it works: the flow after calling the mutation
  3. Eligibility by management type (3PL-managed vs merchant-managed)
  4. Two new webhooks
  5. reasonNotes and supportedActions
  6. 5 key points for engineers
  7. 3 use cases for your business
  8. A one-line summary for pitches

1What's changing

Until now, fulfillment orders were essentially either "not started" or "completed,"with no structured way to report "work is in progress.".
The new fulfillmentOrderReportProgress mutation lets 3PLs and shipping apps notify Shopify that work has started, making the progress visible to merchants.

Before: progress was a "black box"

After handing off an order, merchants had no standard API-based way to know whether the 3PL had actually started work or hadn't touched it yet.

New approach: report "started" in a structured way

The shipping side reports progress via the mutation → the status is updated and a webhook fires. An optional note (reasonNotes) can also be attached.

2How it works: the flow after calling the mutation

3PL / shipping app Wants to report progress trigger mutation fulfillmentOrder ReportProgress + reasonNotes (optional) Records the start FO status IN_PROGRESS Updates state Webhook fires fulfillment_orders/progress_reported payload: FO ID / status / initial_status / progress_report Received by merchants and other apps
Once progress reporting becomes available,fulfillmentOrder.supportedActions returns REPORT_PROGRESS an action.
Apps can use this field to determine whether "this order can currently report progress."

3Usage conditions by management type

The progress statuses you can report differ depending on whether the order is "3PL-managed" or "merchant-managed."

Item3PL-managed fulfillment orderMerchant-managed fulfillment order
Reportable statuses IN_PROGRESS OPEN or IN_PROGRESS
Required scope Not listed (intended for fulfillment services) write_merchant_managed_fulfillment_orders
reasonNotes Optional A supplementary note of up to 256 characters can be attached

3PL-managed: report after work starts

Intended to return progress on orders that have already been handed off to a fulfillment service and are in progress (IN_PROGRESS).

Merchant-managed: OPEN is also allowed

You can report progress even while the order is still OPEN, transitioning it to IN_PROGRESS. However, a write scope is required.

4Two new webhooks

Topic

fulfillment_orders/progress_reported

Fires when progress is reported on a fulfillment order.

Included in the payload:

  • of the fulfillment order ID and status
  • the status before the update initial_status
  • progress_report details ofreason_notes, as well as the reporting app/user's attribution data)
Topic

fulfillment_orders/manually_reported_progress_stopped

When progress was manually reported (fulfillmentOrderReportProgress via)merchant-managedfulfillment order is subsequently marked as "ready for fulfillment,"moving back from IN_PROGRESS to OPENthe webhook fires.

= The app can detect that the merchant has "undone/cancelled" the previously reported "in progress" state.

The two are a pair : one signals "progress was reported," the other signals "the reported progress was undone (returned to OPEN)." Subscribing to both lets you track in-progress assignment and removal in both directions.

5reasonNotes and supportedActions

reasonNotes (up to 256 characters, optional)

You can attach a short note describing the situation, such as "picking started" or "awaiting stock." It gives merchants a clue about the current state of their shipping pipeline. It is also reflected in the webhook's reason_notes .

supportedActions with REPORT_PROGRESS

On orders where progress reporting is possible, fulfillmentOrder.supportedActions returns REPORT_PROGRESS . By checking for this action in advance before firing the mutation, you can avoid unnecessary errors.

65 key points for developers

2026-04

1. Available from API version 2026-04

This mutation, webhooks, andREPORT_PROGRESS action are available from API version 2026-04 onward. Apps still hitting older versions need to upgrade.

OPEN PROG

2. Required prior status depends on the management type

3PL-managed orders require IN_PROGRESS only; merchant-managed orders accept either OPEN/IN_PROGRESS . Check the target order's type and status before sending.

3. Merchant-managed orders require a write scope

Reporting on merchant-managed orders requires the write_merchant_managed_fulfillment_orders scope. Review your OAuth scope configuration.

Report Cancel

4. Webhooks come as a pair: "report" and "cancel"

progress_reported detects the start of work, andmanually_reported_progress_stopped detects a rollback to OPEN. The latter fires only when a merchant-managed order is returned to "ready."

5. Attribution data records "who reported it"

progress_reported The webhook payload includes attribution data for the reporting app/user and initial_status(the status before the update).Useful for audit logs and tracking "which 3PL started work and when,"especially in environments where multiple shipping apps coexist.

Details such as how progress status finalization (fulfillment confirmation) is handled and behavior on errors are not covered in this post. Check the reference for your target API version before implementing.

73 use cases for your operations

USE CASE 1

Surface "work in progress" from 3PL integrations on the merchant admin

Problem
After handing an order off to an external warehouse, there's no visibility into whether picking has actually started, leaving CS inquiries to pile up.
Approach
When the 3PL app starts work, it issues fulfillmentOrderReportProgress and attaches details like "picking started" to reasonNotes .
Outcome
Merchants can see the shipping pipeline status in real time, reducing delayed CS inquiries.
Technical note
Before sending, verify that supportedActions contains REPORT_PROGRESS before invoking it.
USE CASE 2

Notification pipeline that streams progress events to an external OMS or Slack

Problem
There was no standard event to instantly share fulfillment starts and rollbacks with an internal OMS or Slack.
Approach
fulfillment_orders/progress_reported and manually_reported_progress_stopped , and fire notifications when received.
Impact
Detect both 'start' and 'cancel (return to OPEN)' bidirectionally, unifying situational awareness across operations teams.
Technical notes
Use the payload's initial_status and progress_report to format state transitions and notes into the notification body.
Audit log
USE CASE 3

Audit trail of 'who started work, and when' across multi-3PL environments

Problem
In environments where multiple shipping apps and warehouses coexist, records of which service started processing each order — and when — get scattered.
Solution
progress_reported Store the webhook's attribution data (reporting app/user) along with the timestamp, building a per-order progress log.
Impact
Easier to verify SLA compliance, compare vendor-by-vendor performance, and isolate root causes during incidents.
Technical notes
Store attribution data and reason_notes tied to the order ID in chronological order. Cross-referencing with completion events also lets you compute start-to-completion lead time.

8One-line summary for proposals

"A new mutation (API 2026-04+) that lets 3PLs and shipping apps return a structured 'work has started' signal to the merchant.
Report start with an optional note, and detect both start and cancellation bidirectionally via a dedicated webhook.
Useful for shipping pipeline visibility, notification integrations, and audit trails."