delete_draft_order
Permanently delete a draft order in OPEN or INVOICE_SENT status. Completed drafts are real orders and cannot be deleted.
Instructions
Permanently delete a draft order. Only OPEN/INVOICE_SENT drafts can be deleted — completed drafts are real orders and orders cannot be deleted (cancel them instead). Irreversible. Returns the deleted GID, or a no-op message if the GID didn't match anything.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | GID of a draft order to delete. Permanent. Cannot delete drafts that have been completed (those are real orders — orders cannot be deleted, only cancelled or archived). |
Implementation Reference
- src/tools/draft_orders.ts:504-522 (handler)The handler function for delete_draft_order. Executes the GraphQL mutation draftOrderDelete with the provided id, throws on user errors, and returns a success/no-op message.
async (args) => { const data = await client.graphql<{ draftOrderDelete: { deletedId: string | null; userErrors: ShopifyUserError[]; }; }>(DELETE_DRAFT_ORDER_MUTATION, { input: { id: args.id } }); throwIfUserErrors(data.draftOrderDelete.userErrors, "draftOrderDelete"); return { content: [ { type: "text" as const, text: data.draftOrderDelete.deletedId ? `Deleted draft order ${data.draftOrderDelete.deletedId}.` : "No draft order matched; nothing deleted.", }, ], }; }, - src/tools/draft_orders.ts:261-267 (schema)The input schema for delete_draft_order. Defines a single required 'id' field (string) with a descriptive message.
const deleteDraftOrderSchema = { id: z .string() .describe( "GID of a draft order to delete. Permanent. Cannot delete drafts that have been completed (those are real orders — orders cannot be deleted, only cancelled or archived).", ), }; - src/tools/draft_orders.ts:500-523 (registration)Registration of the delete_draft_order tool via server.tool(), which takes the name, description, schema, and handler. The function registerDraftOrderTools is exported and called from src/server.ts:62.
server.tool( "delete_draft_order", "Permanently delete a draft order. Only OPEN/INVOICE_SENT drafts can be deleted — completed drafts are real orders and orders cannot be deleted (cancel them instead). Irreversible. Returns the deleted GID, or a no-op message if the GID didn't match anything.", deleteDraftOrderSchema, async (args) => { const data = await client.graphql<{ draftOrderDelete: { deletedId: string | null; userErrors: ShopifyUserError[]; }; }>(DELETE_DRAFT_ORDER_MUTATION, { input: { id: args.id } }); throwIfUserErrors(data.draftOrderDelete.userErrors, "draftOrderDelete"); return { content: [ { type: "text" as const, text: data.draftOrderDelete.deletedId ? `Deleted draft order ${data.draftOrderDelete.deletedId}.` : "No draft order matched; nothing deleted.", }, ], }; }, ); - src/tools/draft_orders.ts:126-133 (helper)The GraphQL mutation string used by delete_draft_order. Defines the DraftOrderDelete mutation that returns deletedId and userErrors.
const DELETE_DRAFT_ORDER_MUTATION = /* GraphQL */ ` mutation DraftOrderDelete($input: DraftOrderDeleteInput!) { draftOrderDelete(input: $input) { deletedId userErrors { field message } } } `;