GraphQL draftOrderComplete generates random results in orders & send order confirmation duplicately

Topic summary

A developer is experiencing issues with the draftOrderComplete mutation (API version 2022-10) that produces inconsistent results:

Core Problems:

  • Order confirmation emails are sent twice to customers despite draftOrderComplete being called only once
  • Two variants of orders appear after completion: one “successful” (subtitle: “APP NAME (via import)”, single email) and one “error” (subtitle: “APP NAME”, duplicate emails)
  • No errors appear in the userErrors property of the mutation response

Implementation Details:

  • Developer uses DRAFT_ORDERS_CREATE webhook to trigger draftOrderComplete (instead of calling it immediately after draftOrderCreate)
  • Waits for draft order “Ready” status via polling before completing
  • Forwards mutation results to debug email for verification

Current Status:

  • Developer provided X-Request-IDs for both errored and successful orders
  • Shopify support confirmed their development team is investigating
  • Similar issues with draft orders and email confirmations have been reported by others
  • No timeline or guaranteed resolution provided yet

The issue remains under investigation by Shopify’s development team.

Summarized with AI on November 24. AI used: claude-sonnet-4-5-20250929.

Hello,

please let me share a strange phenomenon while processing draft orders with draftOrderComplete mutation here and I need your help to solve this. Attachment is a figure explaining this problem.

I’m using API version 2022-10

[Problem]

  • Order confirmation mail sent to customer twice despite that draftOrderComplete was invoked just once.
  • Strangely, there are 2 variants of order after draftOrderComplete (successful and error).
  • Successful order has subtitle of “APP NAME (via import)” and sending order confirmation email just once.
  • Error order has subtitle of just APP NAME and sending duplicated order confirmation emails as mentioned above.

[Flow of my current code]

  1. Invoke draftOrderCreate mutation
  2. Catch DRAFT_ORDERS_CREATE topic in a webhook and wait for the draft order’s “Ready” status with polling loop
  3. Once the draft order is ready, invoke draftOrderComplete mutation
  4. Forward a result of draftOrderComplete mutation to my email address as debug information (that’s why I confirmed draftOrderComplete was surely called just once even though it send order confirmation email twice)

The reason why I use webhook catching DRAFT_ORDERS_CREATE instead of calling draftOrderComplete just after draftOrderCreate is, to guarantee my code calls draftOrderComplete just once. (but it seems using webhook doesn’t solve the trouble)

Let me share one result of draftOrderComplete which generating “error” order (sending duplicated order confirmation email as shown in the previously attached .pptx file).
I don’t see any errors at userErrors property though..

{
  "draftOrderComplete": {
    "draftOrder": {
      "id": "gid://shopify/DraftOrder/923981775032",
      "name": "#D533",
      "order": {
        "id": "gid://shopify/Order/4884808106168",
        "name": "#1526",
        "__typename": "Order"
      },
      "__typename": "DraftOrder"
    },
    "userErrors": [],
    "__typename": "DraftOrderCompletePayload"
  }
}
1 Like

Hey @mktb , could you share a plain text X-Request-ID that would have been sent in the responses headers you received back from us for the draft order that errored?

We can use that to take a look into the exact API call in our logs and see if we can potentially track down what’s causing the draft order creation process to duplicate.

Thanks - hope to hear from you soon!

Hello @ShopifyDevSup ,

Thank you for your reply!
Please let me share the X-Request-IDs of two errored orders and one successful order here.

I’m logging IDs of both draftOrderCreate & draftOrderComplete mutations for your reference.

[Errored order 1]
draftOrderCreate
Creating: gid://shopify/DraftOrder/924191916216
X-Request-ID: 8b9d20b3-0ad9-495d-a58e-d21510963324

draftOrderComplete
Converting from: gid://shopify/DraftOrder/924191916216
To: gid://shopify/Order/4888265752760
X-Request-ID: 06968e17-4fb4-4719-a301-818daabe64e6

[Errored order 2]
draftOrderCreate
Creating: gid://shopify/DraftOrder/924195586232
X-Request-ID: 292b2a22-518b-41b1-bb80-5801784af3fd

draftOrderComplete
Converting from: gid://shopify/DraftOrder/924195586232
To: gid://shopify/Order/4888377721016
X-Request-ID: 6b7ab838-8c52-4f99-8726-f9d1e8bb652e

[Successful order (for reference)]
draftOrderCreate
Creating: gid://shopify/DraftOrder/924197519544
X-Request-ID: ffb2a532-ed2a-4dda-887d-95590ecefe49

draftOrderComplete
Converting from: gid://shopify/DraftOrder/924197519544
To: gid://shopify/Order/4888388993208
X-Request-ID: 411071c4-324e-442f-9bcf-b14004915bcf

Thank for sending that info over @mktb - really appreciated! I wanted to get back in touch to confirm that our developers are currently looking into this. I can’t guarantee a turnaround time or an exact resolution at the moment, but did want to update you on this. I’ll reach back out once I have more information - just wanted to confirm that it does appear that similar issues relating to draft orders/email confirmations have been reported by others.

Thanks for bringing this to us - please keep an eye out for a response from me or one of my colleagues.

1 Like