# fulfillmentOrderMove - admin-graphql - MUTATION Version: 2025-01 ## Description Changes the location which is assigned to fulfill a number of unfulfilled fulfillment order line items. Moving a fulfillment order will fail in the following circumstances: * The fulfillment order is closed. * The destination location has never stocked the requested inventory item. * The API client doesn't have the correct permissions. Line items which have already been fulfilled can't be re-assigned and will always remain assigned to the original location. You can't change the assigned location while a fulfillment order has a [request status](https://shopify.dev/docs/api/admin-graphql/latest/enums/FulfillmentOrderRequestStatus) of `SUBMITTED`, `ACCEPTED`, `CANCELLATION_REQUESTED`, or `CANCELLATION_REJECTED`. These request statuses mean that a fulfillment order is awaiting action by a fulfillment service and can't be re-assigned without first having the fulfillment service accept a cancellation request. This behavior is intended to prevent items from being fulfilled by multiple locations or fulfillment services. ### How re-assigning line items affects fulfillment orders **First scenario:** Re-assign all line items belonging to a fulfillment order to a new location. In this case, the [assignedLocation](https://shopify.dev/docs/api/admin-graphql/latest/objects/fulfillmentorder#field-fulfillmentorder-assignedlocation) of the original fulfillment order will be updated to the new location. **Second scenario:** Re-assign a subset of the line items belonging to a fulfillment order to a new location. You can specify a subset of line items using the `fulfillmentOrderLineItems` parameter (available as of the `2023-04` API version), or specify that the original fulfillment order contains line items which have already been fulfilled. If the new location is already assigned to another active fulfillment order, on the same order, then a new fulfillment order is created. The existing fulfillment order is closed and line items are recreated in a new fulfillment order. ### Access Scopes `write_merchant_managed_fulfillment_orders` access scope or `write_third_party_fulfillment_orders` access scope. Also: The user must have fulfill_and_ship_orders permission. ## Arguments * [fulfillmentOrderLineItems](/docs/api/admin-graphql/2025-01/input-objects/FulfillmentOrderLineItemInput): FulfillmentOrderLineItemInput - The fulfillment order line items to be moved. If left blank, all unfulfilled line items belonging to the fulfillment order are moved. * [id](/docs/api/admin-graphql/2025-01/scalars/ID): ID! - The ID of the fulfillment order to be moved. * [newLocationId](/docs/api/admin-graphql/2025-01/scalars/ID): ID! - The ID of the location where the fulfillment order will be moved. ## Returns * [movedFulfillmentOrder](/docs/api/admin-graphql/2025-01/objects/FulfillmentOrder): FulfillmentOrder The fulfillment order which now contains the moved line items and is assigned to the destination location. If the original fulfillment order doesn't have any line items which are fully or partially fulfilled, the original fulfillment order will be moved to the new location. However if this isn't the case, the moved fulfillment order will differ from the original one. * [originalFulfillmentOrder](/docs/api/admin-graphql/2025-01/objects/FulfillmentOrder): FulfillmentOrder The final state of the original fulfillment order. As a result of the move operation, the original fulfillment order might be moved to the new location or remain in the original location. The original fulfillment order might have the same status or be closed. * [remainingFulfillmentOrder](/docs/api/admin-graphql/2025-01/objects/FulfillmentOrder): FulfillmentOrder This field is deprecated. * [userErrors](/docs/api/admin-graphql/2025-01/objects/UserError): UserError! The list of errors that occurred from executing the mutation. ## Examples ### Move some of the line items in a fulfillment order to a new location Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) { fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) { movedFulfillmentOrder { id status } originalFulfillmentOrder { id status } remainingFulfillmentOrder { id status } userErrors { field message } } }\",\n \"variables\": {\n \"id\": \"gid://shopify/FulfillmentOrder/940656279\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n }\n}'\n" Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n data: {\n \"query\": `mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n }`,\n \"variables\": {\n \"id\": \"gid://shopify/FulfillmentOrder/940656279\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n },\n },\n});\n" Ruby example: "session = ShopifyAPI::Auth::Session.new(\n shop: \"your-development-store.myshopify.com\",\n access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n session: session\n)\n\nquery = <<~QUERY\n mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n }\nQUERY\n\nvariables = {\n \"id\": \"gid://shopify/FulfillmentOrder/940656279\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n}\n\nresponse = client.query(query: query, variables: variables)\n" Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n `#graphql\n mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n }`,\n {\n variables: {\n \"id\": \"gid://shopify/FulfillmentOrder/940656279\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n },\n },\n);\n\nconst data = await response.json();\n" Graphql query: "mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n}" #### Graphql Input { "id": "gid://shopify/FulfillmentOrder/940656279", "newLocationId": "gid://shopify/Location/346779380" } #### Graphql Response { "data": { "fulfillmentOrderMove": { "movedFulfillmentOrder": { "id": "gid://shopify/FulfillmentOrder/1046000780", "status": "OPEN" }, "originalFulfillmentOrder": { "id": "gid://shopify/FulfillmentOrder/940656279", "status": "OPEN" }, "remainingFulfillmentOrder": { "id": "gid://shopify/FulfillmentOrder/940656279", "status": "OPEN" }, "userErrors": [] } } } ### Moves a fulfillment order to a new location Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) { fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) { movedFulfillmentOrder { id status } originalFulfillmentOrder { id status } remainingFulfillmentOrder { id status } userErrors { field message } } }\",\n \"variables\": {\n \"id\": \"gid://shopify/FulfillmentOrder/564786110\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n }\n}'\n" Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n data: {\n \"query\": `mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n }`,\n \"variables\": {\n \"id\": \"gid://shopify/FulfillmentOrder/564786110\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n },\n },\n});\n" Ruby example: "session = ShopifyAPI::Auth::Session.new(\n shop: \"your-development-store.myshopify.com\",\n access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n session: session\n)\n\nquery = <<~QUERY\n mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n }\nQUERY\n\nvariables = {\n \"id\": \"gid://shopify/FulfillmentOrder/564786110\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n}\n\nresponse = client.query(query: query, variables: variables)\n" Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n `#graphql\n mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n }`,\n {\n variables: {\n \"id\": \"gid://shopify/FulfillmentOrder/564786110\",\n \"newLocationId\": \"gid://shopify/Location/346779380\"\n },\n },\n);\n\nconst data = await response.json();\n" Graphql query: "mutation fulfillmentOrderMove($id: ID!, $newLocationId: ID!) {\n fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {\n movedFulfillmentOrder {\n id\n status\n }\n originalFulfillmentOrder {\n id\n status\n }\n remainingFulfillmentOrder {\n id\n status\n }\n userErrors {\n field\n message\n }\n }\n}" #### Graphql Input { "id": "gid://shopify/FulfillmentOrder/564786110", "newLocationId": "gid://shopify/Location/346779380" } #### Graphql Response { "data": { "fulfillmentOrderMove": { "movedFulfillmentOrder": { "id": "gid://shopify/FulfillmentOrder/564786110", "status": "OPEN" }, "originalFulfillmentOrder": { "id": "gid://shopify/FulfillmentOrder/564786110", "status": "OPEN" }, "remainingFulfillmentOrder": null, "userErrors": [] } } }