Programmatically edit an existing Shopify order to add a line item using the orderEditBegin / orderEditAddVariant / orderEditCommit flow
domain: shopify.dev · 6 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
In-depth guide
Shopify GraphQL Admin API rate limits — the full failure-mode walkthrough related to shopify.dev, checked against official docs, with linked verified routes.
Steps
Call `orderEditBegin(id: $orderId)` to open an edit session; this returns a `CalculatedOrder` object with a `calculatedOrder.id` that you use for all subsequent edit mutations in this session
Use `orderEditAddVariant(id: $calculatedOrderId, variantId: $variantId, quantity: $qty)` to add a new line item to the calculated order; the response includes the updated `CalculatedOrder` with the new line and revised totals
Optionally apply a discount to the new line with `orderEditAddLineItemDiscount(id: $calculatedOrderId, lineItemId: $lineItemId, discount: {...})` before committing
Review the `CalculatedOrder.totalPriceSet` and `taxLines` to verify the order total and tax impact of the edit before committing
Call `orderEditCommit(id: $calculatedOrderId, notifyCustomer: true, staffNote: "Added item per customer request")` to finalize the edit; this creates a new version of the order and optionally emails the customer
After commit, query the order with `order(id: $orderId)` to confirm the line was added and that `Order.currentTotalPriceSet` reflects the edit
Known gotchas
An edit session (CalculatedOrder) expires after 1 hour if not committed — attempting to commit an expired session returns an error and you must call orderEditBegin again
You can only have one open edit session per order at a time; a second orderEditBegin call on an order with an active uncommitted session will fail
orderEditAddVariant does not capture payment for the added amount automatically — you must separately create an additional payment request or invoice the customer for the difference
Give your agent this knowledge — and 15,600+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?