# draftOrderUpdate - admin - MUTATION
Version: 2025-01

## Description
Updates a draft order.

If a checkout has been started for a draft order, any update to the draft will unlink the checkout. Checkouts
are created but not immediately completed when opening the merchant credit card modal in the admin, and when a
buyer opens the invoice URL. This is usually fine, but there is an edge case where a checkout is in progress
and the draft is updated before the checkout completes. This will not interfere with the checkout and order
creation, but if the link from draft to checkout is broken the draft will remain open even after the order is
created.

### Access Scopes
`write_draft_orders` access scope. Also: The user must have access to manage draft orders.


## Arguments
* [id](/docs/api/admin/2025-01/scalars/ID): ID! - Specifies the draft order to update.
* [input](/docs/api/admin/2025-01/input-objects/DraftOrderInput): DraftOrderInput! - The draft order properties to update.


## Returns
* [draftOrder](/docs/api/admin/2025-01/objects/DraftOrder): DraftOrder The updated draft order.
* [userErrors](/docs/api/admin/2025-01/objects/UserError): UserError! The list of errors that occurred from executing the mutation.


## Examples
### Create a new metafield and update another on an existing draft order
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 updateDraftOrderMetafields($input: DraftOrderInput!, $ownerId: ID!) { draftOrderUpdate(input: $input, id: $ownerId) { draftOrder { id metafields(first: 3) { edges { node { id namespace key value } } } } userErrors { message field } } }\",\n \"variables\": {\n    \"input\": {\n      \"metafields\": [\n        {\n          \"namespace\": \"my_field\",\n          \"key\": \"delivery_instructions\",\n          \"type\": \"single_line_text_field\",\n          \"value\": \"leave on back porch\"\n        },\n        {\n          \"id\": \"gid://shopify/Metafield/1069229059\",\n          \"value\": \"123\"\n        }\n      ]\n    },\n    \"ownerId\": \"gid://shopify/DraftOrder/276395349\"\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation updateDraftOrderMetafields($input: DraftOrderInput!, $ownerId: ID!) {\n      draftOrderUpdate(input: $input, id: $ownerId) {\n        draftOrder {\n          id\n          metafields(first: 3) {\n            edges {\n              node {\n                id\n                namespace\n                key\n                value\n              }\n            }\n          }\n        }\n        userErrors {\n          message\n          field\n        }\n      }\n    }`,\n    \"variables\": {\n      \"input\": {\n        \"metafields\": [\n          {\n            \"namespace\": \"my_field\",\n            \"key\": \"delivery_instructions\",\n            \"type\": \"single_line_text_field\",\n            \"value\": \"leave on back porch\"\n          },\n          {\n            \"id\": \"gid://shopify/Metafield/1069229059\",\n            \"value\": \"123\"\n          }\n        ]\n      },\n      \"ownerId\": \"gid://shopify/DraftOrder/276395349\"\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 updateDraftOrderMetafields($input: DraftOrderInput!, $ownerId: ID!) {\n    draftOrderUpdate(input: $input, id: $ownerId) {\n      draftOrder {\n        id\n        metafields(first: 3) {\n          edges {\n            node {\n              id\n              namespace\n              key\n              value\n            }\n          }\n        }\n      }\n      userErrors {\n        message\n        field\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"input\": {\n    \"metafields\": [{\"namespace\"=>\"my_field\", \"key\"=>\"delivery_instructions\", \"type\"=>\"single_line_text_field\", \"value\"=>\"leave on back porch\"}, {\"id\"=>\"gid://shopify/Metafield/1069229059\", \"value\"=>\"123\"}]\n  },\n  \"ownerId\": \"gid://shopify/DraftOrder/276395349\"\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 updateDraftOrderMetafields($input: DraftOrderInput!, $ownerId: ID!) {\n    draftOrderUpdate(input: $input, id: $ownerId) {\n      draftOrder {\n        id\n        metafields(first: 3) {\n          edges {\n            node {\n              id\n              namespace\n              key\n              value\n            }\n          }\n        }\n      }\n      userErrors {\n        message\n        field\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"input\": {\n        \"metafields\": [\n          {\n            \"namespace\": \"my_field\",\n            \"key\": \"delivery_instructions\",\n            \"type\": \"single_line_text_field\",\n            \"value\": \"leave on back porch\"\n          },\n          {\n            \"id\": \"gid://shopify/Metafield/1069229059\",\n            \"value\": \"123\"\n          }\n        ]\n      },\n      \"ownerId\": \"gid://shopify/DraftOrder/276395349\"\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation updateDraftOrderMetafields($input: DraftOrderInput!, $ownerId: ID!) {\n  draftOrderUpdate(input: $input, id: $ownerId) {\n    draftOrder {\n      id\n      metafields(first: 3) {\n        edges {\n          node {\n            id\n            namespace\n            key\n            value\n          }\n        }\n      }\n    }\n    userErrors {\n      message\n      field\n    }\n  }\n}"
#### Graphql Input
{
  "input": {
    "metafields": [
      {
        "namespace": "my_field",
        "key": "delivery_instructions",
        "type": "single_line_text_field",
        "value": "leave on back porch"
      },
      {
        "id": "gid://shopify/Metafield/1069229059",
        "value": "123"
      }
    ]
  },
  "ownerId": "gid://shopify/DraftOrder/276395349"
}
#### Graphql Response
{
  "data": {
    "draftOrderUpdate": {
      "draftOrder": {
        "id": "gid://shopify/DraftOrder/276395349",
        "metafields": {
          "edges": [
            {
              "node": {
                "id": "gid://shopify/Metafield/1069229059",
                "namespace": "my_fields",
                "key": "purchase_order",
                "value": "123"
              }
            },
            {
              "node": {
                "id": "gid://shopify/Metafield/1069229060",
                "namespace": "my_field",
                "key": "delivery_instructions",
                "value": "leave on back porch"
              }
            }
          ]
        }
      },
      "userErrors": []
    }
  }
}

### Modify an existing DraftOrder
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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) { draftOrderUpdate(id: $id, input: $input) { draftOrder { id note2 email taxesIncluded currencyCode invoiceSentAt createdAt updatedAt taxExempt completedAt name status marketRegionCountryCode presentmentCurrencyCode shippingAddress { firstName address1 phone city zip province country lastName address2 company latitude longitude name country countryCodeV2 provinceCode } billingAddress { firstName address1 phone city zip province country lastName address2 company latitude longitude name country countryCodeV2 provinceCode } invoiceUrl appliedDiscount { title value valueType } order { id customAttributes { key value } } shippingLine { id title carrierIdentifier custom code deliveryCategory source discountedPriceSet { presentmentMoney { amount currencyCode } shopMoney { amount currencyCode } } } taxLines { channelLiable priceSet { presentmentMoney { amount currencyCode } shopMoney { amount currencyCode } } rate ratePercentage source title } tags customer { id email smsMarketingConsent { consentCollectedFrom consentUpdatedAt marketingOptInLevel marketingState } emailMarketingConsent { consentUpdatedAt marketingOptInLevel marketingState } createdAt updatedAt firstName lastName state amountSpent { amount currencyCode } lastOrder { id name currencyCode } note verifiedEmail multipassIdentifier taxExempt tags phone taxExemptions defaultAddress { id firstName lastName company address1 address2 city province country zip phone name provinceCode countryCodeV2 } } } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/DraftOrder/276395349\",\n    \"input\": {\n      \"shippingAddress\": {\n        \"address1\": \"123 shipping ave\",\n        \"city\": \"Ottawa\",\n        \"provinceCode\": \"ON\",\n        \"zip\": \"K1L 2J3\",\n        \"country\": \"Canada\"\n      },\n      \"marketRegionCountryCode\": \"CA\",\n      \"presentmentCurrencyCode\": \"CAD\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n      draftOrderUpdate(id: $id, input: $input) {\n        draftOrder {\n          id\n          note2\n          email\n          taxesIncluded\n          currencyCode\n          invoiceSentAt\n          createdAt\n          updatedAt\n          taxExempt\n          completedAt\n          name\n          status\n          marketRegionCountryCode\n          presentmentCurrencyCode\n          shippingAddress {\n            firstName\n            address1\n            phone\n            city\n            zip\n            province\n            country\n            lastName\n            address2\n            company\n            latitude\n            longitude\n            name\n            country\n            countryCodeV2\n            provinceCode\n          }\n          billingAddress {\n            firstName\n            address1\n            phone\n            city\n            zip\n            province\n            country\n            lastName\n            address2\n            company\n            latitude\n            longitude\n            name\n            country\n            countryCodeV2\n            provinceCode\n          }\n          invoiceUrl\n          appliedDiscount {\n            title\n            value\n            valueType\n          }\n          order {\n            id\n            customAttributes {\n              key\n              value\n            }\n          }\n          shippingLine {\n            id\n            title\n            carrierIdentifier\n            custom\n            code\n            deliveryCategory\n            source\n            discountedPriceSet {\n              presentmentMoney {\n                amount\n                currencyCode\n              }\n              shopMoney {\n                amount\n                currencyCode\n              }\n            }\n          }\n          taxLines {\n            channelLiable\n            priceSet {\n              presentmentMoney {\n                amount\n                currencyCode\n              }\n              shopMoney {\n                amount\n                currencyCode\n              }\n            }\n            rate\n            ratePercentage\n            source\n            title\n          }\n          tags\n          customer {\n            id\n            email\n            smsMarketingConsent {\n              consentCollectedFrom\n              consentUpdatedAt\n              marketingOptInLevel\n              marketingState\n            }\n            emailMarketingConsent {\n              consentUpdatedAt\n              marketingOptInLevel\n              marketingState\n            }\n            createdAt\n            updatedAt\n            firstName\n            lastName\n            state\n            amountSpent {\n              amount\n              currencyCode\n            }\n            lastOrder {\n              id\n              name\n              currencyCode\n            }\n            note\n            verifiedEmail\n            multipassIdentifier\n            taxExempt\n            tags\n            phone\n            taxExemptions\n            defaultAddress {\n              id\n              firstName\n              lastName\n              company\n              address1\n              address2\n              city\n              province\n              country\n              zip\n              phone\n              name\n              provinceCode\n              countryCodeV2\n            }\n          }\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/DraftOrder/276395349\",\n      \"input\": {\n        \"shippingAddress\": {\n          \"address1\": \"123 shipping ave\",\n          \"city\": \"Ottawa\",\n          \"provinceCode\": \"ON\",\n          \"zip\": \"K1L 2J3\",\n          \"country\": \"Canada\"\n        },\n        \"marketRegionCountryCode\": \"CA\",\n        \"presentmentCurrencyCode\": \"CAD\"\n      }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        id\n        note2\n        email\n        taxesIncluded\n        currencyCode\n        invoiceSentAt\n        createdAt\n        updatedAt\n        taxExempt\n        completedAt\n        name\n        status\n        marketRegionCountryCode\n        presentmentCurrencyCode\n        shippingAddress {\n          firstName\n          address1\n          phone\n          city\n          zip\n          province\n          country\n          lastName\n          address2\n          company\n          latitude\n          longitude\n          name\n          country\n          countryCodeV2\n          provinceCode\n        }\n        billingAddress {\n          firstName\n          address1\n          phone\n          city\n          zip\n          province\n          country\n          lastName\n          address2\n          company\n          latitude\n          longitude\n          name\n          country\n          countryCodeV2\n          provinceCode\n        }\n        invoiceUrl\n        appliedDiscount {\n          title\n          value\n          valueType\n        }\n        order {\n          id\n          customAttributes {\n            key\n            value\n          }\n        }\n        shippingLine {\n          id\n          title\n          carrierIdentifier\n          custom\n          code\n          deliveryCategory\n          source\n          discountedPriceSet {\n            presentmentMoney {\n              amount\n              currencyCode\n            }\n            shopMoney {\n              amount\n              currencyCode\n            }\n          }\n        }\n        taxLines {\n          channelLiable\n          priceSet {\n            presentmentMoney {\n              amount\n              currencyCode\n            }\n            shopMoney {\n              amount\n              currencyCode\n            }\n          }\n          rate\n          ratePercentage\n          source\n          title\n        }\n        tags\n        customer {\n          id\n          email\n          smsMarketingConsent {\n            consentCollectedFrom\n            consentUpdatedAt\n            marketingOptInLevel\n            marketingState\n          }\n          emailMarketingConsent {\n            consentUpdatedAt\n            marketingOptInLevel\n            marketingState\n          }\n          createdAt\n          updatedAt\n          firstName\n          lastName\n          state\n          amountSpent {\n            amount\n            currencyCode\n          }\n          lastOrder {\n            id\n            name\n            currencyCode\n          }\n          note\n          verifiedEmail\n          multipassIdentifier\n          taxExempt\n          tags\n          phone\n          taxExemptions\n          defaultAddress {\n            id\n            firstName\n            lastName\n            company\n            address1\n            address2\n            city\n            province\n            country\n            zip\n            phone\n            name\n            provinceCode\n            countryCodeV2\n          }\n        }\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/DraftOrder/276395349\",\n  \"input\": {\n    \"shippingAddress\": {\n      \"address1\": \"123 shipping ave\",\n      \"city\": \"Ottawa\",\n      \"provinceCode\": \"ON\",\n      \"zip\": \"K1L 2J3\",\n      \"country\": \"Canada\"\n    },\n    \"marketRegionCountryCode\": \"CA\",\n    \"presentmentCurrencyCode\": \"CAD\"\n  }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        id\n        note2\n        email\n        taxesIncluded\n        currencyCode\n        invoiceSentAt\n        createdAt\n        updatedAt\n        taxExempt\n        completedAt\n        name\n        status\n        marketRegionCountryCode\n        presentmentCurrencyCode\n        shippingAddress {\n          firstName\n          address1\n          phone\n          city\n          zip\n          province\n          country\n          lastName\n          address2\n          company\n          latitude\n          longitude\n          name\n          country\n          countryCodeV2\n          provinceCode\n        }\n        billingAddress {\n          firstName\n          address1\n          phone\n          city\n          zip\n          province\n          country\n          lastName\n          address2\n          company\n          latitude\n          longitude\n          name\n          country\n          countryCodeV2\n          provinceCode\n        }\n        invoiceUrl\n        appliedDiscount {\n          title\n          value\n          valueType\n        }\n        order {\n          id\n          customAttributes {\n            key\n            value\n          }\n        }\n        shippingLine {\n          id\n          title\n          carrierIdentifier\n          custom\n          code\n          deliveryCategory\n          source\n          discountedPriceSet {\n            presentmentMoney {\n              amount\n              currencyCode\n            }\n            shopMoney {\n              amount\n              currencyCode\n            }\n          }\n        }\n        taxLines {\n          channelLiable\n          priceSet {\n            presentmentMoney {\n              amount\n              currencyCode\n            }\n            shopMoney {\n              amount\n              currencyCode\n            }\n          }\n          rate\n          ratePercentage\n          source\n          title\n        }\n        tags\n        customer {\n          id\n          email\n          smsMarketingConsent {\n            consentCollectedFrom\n            consentUpdatedAt\n            marketingOptInLevel\n            marketingState\n          }\n          emailMarketingConsent {\n            consentUpdatedAt\n            marketingOptInLevel\n            marketingState\n          }\n          createdAt\n          updatedAt\n          firstName\n          lastName\n          state\n          amountSpent {\n            amount\n            currencyCode\n          }\n          lastOrder {\n            id\n            name\n            currencyCode\n          }\n          note\n          verifiedEmail\n          multipassIdentifier\n          taxExempt\n          tags\n          phone\n          taxExemptions\n          defaultAddress {\n            id\n            firstName\n            lastName\n            company\n            address1\n            address2\n            city\n            province\n            country\n            zip\n            phone\n            name\n            provinceCode\n            countryCodeV2\n          }\n        }\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/DraftOrder/276395349\",\n      \"input\": {\n        \"shippingAddress\": {\n          \"address1\": \"123 shipping ave\",\n          \"city\": \"Ottawa\",\n          \"provinceCode\": \"ON\",\n          \"zip\": \"K1L 2J3\",\n          \"country\": \"Canada\"\n        },\n        \"marketRegionCountryCode\": \"CA\",\n        \"presentmentCurrencyCode\": \"CAD\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n  draftOrderUpdate(id: $id, input: $input) {\n    draftOrder {\n      id\n      note2\n      email\n      taxesIncluded\n      currencyCode\n      invoiceSentAt\n      createdAt\n      updatedAt\n      taxExempt\n      completedAt\n      name\n      status\n      marketRegionCountryCode\n      presentmentCurrencyCode\n      shippingAddress {\n        firstName\n        address1\n        phone\n        city\n        zip\n        province\n        country\n        lastName\n        address2\n        company\n        latitude\n        longitude\n        name\n        country\n        countryCodeV2\n        provinceCode\n      }\n      billingAddress {\n        firstName\n        address1\n        phone\n        city\n        zip\n        province\n        country\n        lastName\n        address2\n        company\n        latitude\n        longitude\n        name\n        country\n        countryCodeV2\n        provinceCode\n      }\n      invoiceUrl\n      appliedDiscount {\n        title\n        value\n        valueType\n      }\n      order {\n        id\n        customAttributes {\n          key\n          value\n        }\n      }\n      shippingLine {\n        id\n        title\n        carrierIdentifier\n        custom\n        code\n        deliveryCategory\n        source\n        discountedPriceSet {\n          presentmentMoney {\n            amount\n            currencyCode\n          }\n          shopMoney {\n            amount\n            currencyCode\n          }\n        }\n      }\n      taxLines {\n        channelLiable\n        priceSet {\n          presentmentMoney {\n            amount\n            currencyCode\n          }\n          shopMoney {\n            amount\n            currencyCode\n          }\n        }\n        rate\n        ratePercentage\n        source\n        title\n      }\n      tags\n      customer {\n        id\n        email\n        smsMarketingConsent {\n          consentCollectedFrom\n          consentUpdatedAt\n          marketingOptInLevel\n          marketingState\n        }\n        emailMarketingConsent {\n          consentUpdatedAt\n          marketingOptInLevel\n          marketingState\n        }\n        createdAt\n        updatedAt\n        firstName\n        lastName\n        state\n        amountSpent {\n          amount\n          currencyCode\n        }\n        lastOrder {\n          id\n          name\n          currencyCode\n        }\n        note\n        verifiedEmail\n        multipassIdentifier\n        taxExempt\n        tags\n        phone\n        taxExemptions\n        defaultAddress {\n          id\n          firstName\n          lastName\n          company\n          address1\n          address2\n          city\n          province\n          country\n          zip\n          phone\n          name\n          provinceCode\n          countryCodeV2\n        }\n      }\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/DraftOrder/276395349",
  "input": {
    "shippingAddress": {
      "address1": "123 shipping ave",
      "city": "Ottawa",
      "provinceCode": "ON",
      "zip": "K1L 2J3",
      "country": "Canada"
    },
    "marketRegionCountryCode": "CA",
    "presentmentCurrencyCode": "CAD"
  }
}
#### Graphql Response
{
  "data": {
    "draftOrderUpdate": {
      "draftOrder": {
        "id": "gid://shopify/DraftOrder/276395349",
        "note2": "rush order",
        "email": "thomas_burnsimus_ii@shopify.com",
        "taxesIncluded": false,
        "currencyCode": "USD",
        "invoiceSentAt": null,
        "createdAt": "2021-12-01T12:42:15Z",
        "updatedAt": "2024-11-05T17:27:52Z",
        "taxExempt": false,
        "completedAt": null,
        "name": "#D1",
        "status": "OPEN",
        "marketRegionCountryCode": "CA",
        "presentmentCurrencyCode": "CAD",
        "shippingAddress": {
          "firstName": "Bob",
          "address1": "123 shipping ave",
          "phone": "+1(613)555-1212",
          "city": "Ottawa",
          "zip": "K1L 2J3",
          "province": "Ontario",
          "country": "Canada",
          "lastName": "Bobsen",
          "address2": "",
          "company": "",
          "latitude": null,
          "longitude": null,
          "name": "Bob Bobsen",
          "countryCodeV2": "CA",
          "provinceCode": "ON"
        },
        "billingAddress": {
          "firstName": "Bob",
          "address1": "124 Amoebobacterieae St",
          "phone": "+1(343)555-1212",
          "city": "Ottawa",
          "zip": "K2P0V7",
          "province": "Ontario",
          "country": "Canada",
          "lastName": "Bobsen Jr.",
          "address2": "",
          "company": null,
          "latitude": null,
          "longitude": null,
          "name": "Bob Bobsen Jr.",
          "countryCodeV2": "CA",
          "provinceCode": "ON"
        },
        "invoiceUrl": "https://www.snowdevil.ca/26371970/invoices/f1df1a91d10a6d7704cf2f0315461d4d",
        "appliedDiscount": null,
        "order": null,
        "shippingLine": null,
        "taxLines": [
          {
            "channelLiable": null,
            "priceSet": {
              "presentmentMoney": {
                "amount": "5.46",
                "currencyCode": "CAD"
              },
              "shopMoney": {
                "amount": "5.46",
                "currencyCode": "USD"
              }
            },
            "rate": 0.07,
            "ratePercentage": 7.0,
            "source": null,
            "title": "GST"
          },
          {
            "channelLiable": null,
            "priceSet": {
              "presentmentMoney": {
                "amount": "6.24",
                "currencyCode": "CAD"
              },
              "shopMoney": {
                "amount": "6.24",
                "currencyCode": "USD"
              }
            },
            "rate": 0.08,
            "ratePercentage": 8.0,
            "source": null,
            "title": "PST"
          }
        ],
        "tags": [
          "Might be fraud"
        ],
        "customer": {
          "id": "gid://shopify/Customer/544365967",
          "email": "bob@example.com",
          "smsMarketingConsent": {
            "consentCollectedFrom": "OTHER",
            "consentUpdatedAt": "2021-06-16T17:31:44Z",
            "marketingOptInLevel": "SINGLE_OPT_IN",
            "marketingState": "SUBSCRIBED"
          },
          "emailMarketingConsent": {
            "consentUpdatedAt": "2005-06-16T15:00:11Z",
            "marketingOptInLevel": "SINGLE_OPT_IN",
            "marketingState": "SUBSCRIBED"
          },
          "createdAt": "2005-06-15T15:57:11Z",
          "updatedAt": "2005-06-16T15:57:11Z",
          "firstName": "Bob",
          "lastName": "Bobsen",
          "state": "ENABLED",
          "amountSpent": {
            "amount": "8305.6",
            "currencyCode": "USD"
          },
          "lastOrder": null,
          "note": null,
          "verifiedEmail": true,
          "multipassIdentifier": null,
          "taxExempt": false,
          "tags": [
            "Bob",
            "Canadian",
            "Léon",
            "Noël"
          ],
          "phone": "+13125551212",
          "taxExemptions": [],
          "defaultAddress": {
            "id": "gid://shopify/MailingAddress/544365967?model_name=CustomerAddress",
            "firstName": "Bob",
            "lastName": "Bobsen",
            "company": "",
            "address1": "123 Amoebobacterieae St",
            "address2": "",
            "city": "Ottawa",
            "province": "Ontario",
            "country": "Canada",
            "zip": "K2P0V6",
            "phone": "+1(613)555-1212",
            "name": "Bob Bobsen",
            "provinceCode": "ON",
            "countryCodeV2": "CA"
          }
        }
      },
      "userErrors": []
    }
  }
}

### Update the draft order shipping address
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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) { draftOrderUpdate(id: $id, input: $input) { draftOrder { shippingAddress { id } } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/DraftOrder/276395349\",\n    \"input\": {\n      \"shippingAddress\": {\n        \"address1\": \"123 shipping ave\",\n        \"city\": \"Ottawa\",\n        \"provinceCode\": \"ON\",\n        \"zip\": \"K1L 2J3\",\n        \"country\": \"Canada\"\n      }\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n      draftOrderUpdate(id: $id, input: $input) {\n        draftOrder {\n          shippingAddress {\n            id\n          }\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/DraftOrder/276395349\",\n      \"input\": {\n        \"shippingAddress\": {\n          \"address1\": \"123 shipping ave\",\n          \"city\": \"Ottawa\",\n          \"provinceCode\": \"ON\",\n          \"zip\": \"K1L 2J3\",\n          \"country\": \"Canada\"\n        }\n      }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        shippingAddress {\n          id\n        }\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/DraftOrder/276395349\",\n  \"input\": {\n    \"shippingAddress\": {\n      \"address1\": \"123 shipping ave\",\n      \"city\": \"Ottawa\",\n      \"provinceCode\": \"ON\",\n      \"zip\": \"K1L 2J3\",\n      \"country\": \"Canada\"\n    }\n  }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        shippingAddress {\n          id\n        }\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/DraftOrder/276395349\",\n      \"input\": {\n        \"shippingAddress\": {\n          \"address1\": \"123 shipping ave\",\n          \"city\": \"Ottawa\",\n          \"provinceCode\": \"ON\",\n          \"zip\": \"K1L 2J3\",\n          \"country\": \"Canada\"\n        }\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n  draftOrderUpdate(id: $id, input: $input) {\n    draftOrder {\n      shippingAddress {\n        id\n      }\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/DraftOrder/276395349",
  "input": {
    "shippingAddress": {
      "address1": "123 shipping ave",
      "city": "Ottawa",
      "provinceCode": "ON",
      "zip": "K1L 2J3",
      "country": "Canada"
    }
  }
}
#### Graphql Response
{
  "data": {
    "draftOrderUpdate": {
      "draftOrder": {
        "shippingAddress": {
          "id": "gid://shopify/MailingAddress/639215345?model_name=Address"
        }
      }
    }
  }
}

### Updating a draft order that doesn't exist returns an error
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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) { draftOrderUpdate(id: $id, input: $input) { draftOrder { id } userErrors { message field } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/DraftOrder/1\",\n    \"input\": {\n      \"note\": \"This is a really awesome draft order\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n      draftOrderUpdate(id: $id, input: $input) {\n        draftOrder {\n          id\n        }\n        userErrors {\n          message\n          field\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/DraftOrder/1\",\n      \"input\": {\n        \"note\": \"This is a really awesome draft order\"\n      }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        id\n      }\n      userErrors {\n        message\n        field\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/DraftOrder/1\",\n  \"input\": {\n    \"note\": \"This is a really awesome draft order\"\n  }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        id\n      }\n      userErrors {\n        message\n        field\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/DraftOrder/1\",\n      \"input\": {\n        \"note\": \"This is a really awesome draft order\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n  draftOrderUpdate(id: $id, input: $input) {\n    draftOrder {\n      id\n    }\n    userErrors {\n      message\n      field\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/DraftOrder/1",
  "input": {
    "note": "This is a really awesome draft order"
  }
}
#### Graphql Response
{
  "data": {
    "draftOrderUpdate": {
      "draftOrder": null,
      "userErrors": [
        {
          "message": "Draft order not found",
          "field": null
        }
      ]
    }
  }
}

### Updating a draft order with a company, location and company contact
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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) { draftOrderUpdate(id: $id, input: $input) { draftOrder { purchasingEntity { ... on PurchasingCompany { company { id } } } } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/DraftOrder/276395349\",\n    \"input\": {\n      \"purchasingEntity\": {\n        \"purchasingCompany\": {\n          \"companyId\": \"gid://shopify/Company/426793626\",\n          \"companyLocationId\": \"gid://shopify/CompanyLocation/441870438\",\n          \"companyContactId\": \"gid://shopify/CompanyContact/207808057\"\n        }\n      }\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n      draftOrderUpdate(id: $id, input: $input) {\n        draftOrder {\n          purchasingEntity {\n            ... on PurchasingCompany {\n              company {\n                id\n              }\n            }\n          }\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/DraftOrder/276395349\",\n      \"input\": {\n        \"purchasingEntity\": {\n          \"purchasingCompany\": {\n            \"companyId\": \"gid://shopify/Company/426793626\",\n            \"companyLocationId\": \"gid://shopify/CompanyLocation/441870438\",\n            \"companyContactId\": \"gid://shopify/CompanyContact/207808057\"\n          }\n        }\n      }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        purchasingEntity {\n          ... on PurchasingCompany {\n            company {\n              id\n            }\n          }\n        }\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/DraftOrder/276395349\",\n  \"input\": {\n    \"purchasingEntity\": {\n      \"purchasingCompany\": {\n        \"companyId\": \"gid://shopify/Company/426793626\",\n        \"companyLocationId\": \"gid://shopify/CompanyLocation/441870438\",\n        \"companyContactId\": \"gid://shopify/CompanyContact/207808057\"\n      }\n    }\n  }\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 draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n    draftOrderUpdate(id: $id, input: $input) {\n      draftOrder {\n        purchasingEntity {\n          ... on PurchasingCompany {\n            company {\n              id\n            }\n          }\n        }\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/DraftOrder/276395349\",\n      \"input\": {\n        \"purchasingEntity\": {\n          \"purchasingCompany\": {\n            \"companyId\": \"gid://shopify/Company/426793626\",\n            \"companyLocationId\": \"gid://shopify/CompanyLocation/441870438\",\n            \"companyContactId\": \"gid://shopify/CompanyContact/207808057\"\n          }\n        }\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation draftOrderUpdate($id: ID!, $input: DraftOrderInput!) {\n  draftOrderUpdate(id: $id, input: $input) {\n    draftOrder {\n      purchasingEntity {\n        ... on PurchasingCompany {\n          company {\n            id\n          }\n        }\n      }\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/DraftOrder/276395349",
  "input": {
    "purchasingEntity": {
      "purchasingCompany": {
        "companyId": "gid://shopify/Company/426793626",
        "companyLocationId": "gid://shopify/CompanyLocation/441870438",
        "companyContactId": "gid://shopify/CompanyContact/207808057"
      }
    }
  }
}
#### Graphql Response
{
  "data": {
    "draftOrderUpdate": {
      "draftOrder": {
        "purchasingEntity": {
          "company": {
            "id": "gid://shopify/Company/426793626"
          }
        }
      }
    }
  }
}