Loading...
Loading...
Reassign fulfillment orders from one location to another for warehouse overflow or regional routing.
npx skill4agent add 40rty-ai/shopify-admin-skills shopify-admin-fulfillment-location-routingshopify store auth --store <domain> --scopes read_orders,write_fulfillmentsread_orderswrite_fulfillments| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| source_location_id | string | yes | — | GID of the location to move orders FROM |
| destination_location_id | string | yes | — | GID of the location to move orders TO |
| order_filter | string | no | — | Optional order name filter (e.g., "#1001,#1002") |
| dry_run | bool | no | true | Preview moves without executing mutations |
| format | string | no | human | Output format: |
⚠️reassigns fulfillment responsibility. This affects which warehouse picks and ships the order. Verify destination location has sufficient stock for all products before moving. Run withfulfillmentOrderMoveto confirm the order list and destination before committing.dry_run: true
fulfillmentOrdersassignedLocationId: <source_location_id>status: OPENfirst: 250hasNextPage: falsefulfillmentOrderMoveid: <fulfillment_order_id>newLocationId: <destination_location_id>movedFulfillmentOrder { id, assignedLocation { name } }userErrors# fulfillmentOrders:query — validated against api_version 2025-01
query FulfillmentOrdersByLocation($locationId: ID!, $after: String) {
fulfillmentOrders(
assignedLocationId: $locationId
first: 250
after: $after
query: "status:open"
) {
edges {
node {
id
status
order {
id
name
}
assignedLocation {
location {
id
name
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}# fulfillmentOrderMove:mutation — validated against api_version 2025-01
mutation FulfillmentOrderMove($id: ID!, $newLocationId: ID!) {
fulfillmentOrderMove(id: $id, newLocationId: $newLocationId) {
movedFulfillmentOrder {
id
assignedLocation {
location {
id
name
}
}
}
originalFulfillmentOrder {
id
status
}
remainingFulfillmentOrder {
id
status
}
userErrors {
field
message
}
}
}╔══════════════════════════════════════════════╗
║ SKILL: Fulfillment Location Routing ║
║ Store: <store domain> ║
║ Started: <YYYY-MM-DD HH:MM UTC> ║
╚══════════════════════════════════════════════╝[N/TOTAL] <QUERY|MUTATION> <OperationName>
→ Params: <brief summary of key inputs>
→ Result: <count or outcome>dry_run: true[DRY RUN]format: human══════════════════════════════════════════════
OUTCOME SUMMARY
Orders at source location: <n>
Orders moved: <n>
Errors: <n>
Output: routing_log_<date>.csv
══════════════════════════════════════════════format: json{
"skill": "fulfillment-location-routing",
"store": "<domain>",
"started_at": "<ISO8601>",
"completed_at": "<ISO8601>",
"dry_run": true,
"outcome": {
"orders_at_source": 0,
"orders_moved": 0,
"errors": 0,
"output_file": "routing_log_<date>.csv"
}
}routing_log_<YYYY-MM-DD>.csvorder_namefulfillment_order_idsource_locationdestination_locationstatus| Error | Cause | Recovery |
|---|---|---|
| API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| Order already fulfilled or location inactive | Log error, skip order, continue |
| Destination location not stocked | Insufficient inventory at destination | Log warning per SKU, continue move |
| No open orders at source | Source has no pending work | Exit with summary: 0 orders found |
dry_run: truemulti-location-inventory-auditorder_filter