Query `order.fulfillmentOrders` via the Admin GraphQL API to retrieve the fulfillmentOrder IDs associated with the order, along with their `status` and `assignedLocation`.
Filter for fulfillmentOrders with status `OPEN` to find the ones that can be fulfilled.
Call the `fulfillmentCreateV2` mutation, passing a `fulfillment` input that includes the `fulfillmentOrderId` (or partial line items for split fulfillment), tracking information, and `notifyCustomer`.
Check the mutation response for `userErrors`; a non-empty array indicates the fulfillment was not created — inspect the error message and field to diagnose.
Optionally call `fulfillmentTrackingInfoUpdateV2` later if tracking information becomes available after initial fulfillment creation.
For third-party logistics (3PL) or fulfillment service integrations, respond to `fulfillment_orders/fulfillment_request` webhooks and use `fulfillmentOrderAccept` / `fulfillmentOrderReject` mutations rather than directly creating fulfillments.
Known gotchas
The legacy `FulfillmentCreate` mutation (non-V2) is deprecated and no longer works for orders assigned to custom fulfillment services — always use `fulfillmentCreateV2`.
Attempting to fulfill a fulfillmentOrder that belongs to a third-party fulfillment service without that service accepting the request first will return an error.
Partial fulfillments require specifying `fulfillmentOrderLineItems` with exact quantities; omitting items creates a fulfillment only for those explicitly listed.
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