Query the order's fulfillmentOrders to identify which line items are assigned to each location; Shopify automatically splits fulfillment orders by assignedLocation
For each fulfillmentOrder GID, call fulfillmentCreateV2 mutation with the fulfillmentOrderLineItems subset relevant to that location and the trackingInfo for that warehouse's carrier
Set notifyCustomer to true on the last fulfillment to avoid sending duplicate shipment emails; send earlier fulfillments with notifyCustomer: false and use a custom transactional email for partial shipment
Store each fulfillment GID and its tracking number in your OMS alongside the originating fulfillmentOrder GID for traceability
Poll or webhook on fulfillments/update to detect when each location marks its fulfillment as delivered and update the order's fulfillment status accordingly
Known gotchas
Calling fulfillmentCreateV2 with line items from two different fulfillmentOrders in a single mutation is not supported; one fulfillment per fulfillmentOrder is the correct pattern
If a location's fulfillmentOrder is in a HOLD state, fulfillmentCreateV2 will fail; release the hold via fulfillmentOrderReleaseHold before creating the fulfillment
Shopify marks an order as fulfilled only when all fulfillmentOrders are complete; an order with one location shipped and another pending shows as partially_fulfilled, which may confuse downstream order status queries
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp