Skip to main content

Use draft orders

Merchants often need to create draft orders for company approval when selling business-to-business (B2B). After creating a company, you can use the GraphQL Admin API to create draft orders for a purchasing entity. A purchasing entity is a combination of the company, company contact, and company location.


In this tutorial, you'll learn how to do the following tasks:



Anchor to Step 1: Calculate a draft order for a purchasing entityStep 1: Calculate a draft order for a purchasing entity

Before creating a draft order for a purchasing entity, you can preview information such as total taxes and prices using the draftOrderCalculate mutation:

POST https://{shop}.myshopify.com/api/{api_version}/graphql.json

GraphQL mutation

mutation{
draftOrderCalculate(
input: {
purchasingEntity: {
purchasingCompany: {
companyId: "gid://shopify/Company/1"
companyLocationId: "gid://shopify/CompanyLocation/1"
companyContactId: "gid://shopify/CompanyContact/1"
}
}
billingAddress: {
address1: "273 Lenore Stravenue",
address2: "Suite 573",
city: "Laketown",
company: "Alfredo Group",
firstName: "Avery",
lastName: "Brown",
phone: "(800) 555 0100",
provinceCode: "TN",
zip: "38103"
},
customAttributes: null,
lineItems: [
{
appliedDiscount: null,
originalUnitPrice: "132.99",
quantity: 1,
sku: "",
title: "Aerodynamic Bronze Car",
variantId: "gid://shopify/ProductVariant/349",
taxable: true,
requiresShipping: true,
customAttributes: [],
}
],
note: null,
shippingAddress: {
address1: "273 Lenore Stravenue",
address2: "Suite 573",
city: "Laketown",
company: "Alfredo Group",
firstName: "Avery",
lastName: "Brown",
phone: "(800) 555 0100",
provinceCode: "TN",
zip: "38103"
},
tags: [],
email: "averybrown@example.com",
phone: null,
taxExempt: false,
reserveInventoryUntil: null,
appliedDiscount: null,
shippingLine: null,
localizationExtensions: []
}
) {
calculatedDraftOrder{
totalPrice
}
}
}

JSON response

{
"data": {
"calculatedDraftOrder": {
"totalPrice": 132.99
}
}
}

Anchor to Step 2: Create a draft order for a purchasing entityStep 2: Create a draft order for a purchasing entity

When you're satisfied with the calculated draft order, you can create the draft order by passing the same input from your calculated draft order to the draftOrderCreate mutation:

POST https://{shop}.myshopify.com/api/{api_version}/graphql.json

GraphQL mutation

mutation{
draftOrderCreate(
input: {
purchasingEntity: {
purchasingCompany: {
companyId: "gid://shopify/Company/1"
companyLocationId: "gid://shopify/CompanyLocation/1"
companyContactId: "gid://shopify/CompanyContact/1"
}
}
billingAddress: {
address1: "273 Lenore Stravenue",
address2: "Suite 573",
city: "Laketown",
company: "Alfredo Group",
firstName: "Avery",
lastName: "Brown",
phone: "(800) 555 0100",
provinceCode: "TN",
zip: "38103"
},
customAttributes: null,
lineItems: [
{
appliedDiscount: null,
originalUnitPrice: "132.99",
quantity: 1,
sku: "",
title: "Aerodynamic Bronze Car",
variantId: "gid://shopify/ProductVariant/349",
taxable: true,
requiresShipping: true,
customAttributes: [],
}
],
note: null,
shippingAddress: {
address1: "273 Lenore Stravenue",
address2: "Suite 573",
city: "Laketown",
company: "Alfredo Group",
firstName: "Avery",
lastName: "Brown",
phone: "(800) 555 0100",
provinceCode: "TN",
zip: "38103"
},
tags: [],
email: "averybrown@example.com",
phone: null,
taxExempt: false,
reserveInventoryUntil: null,
appliedDiscount: null,
shippingLine: null,
localizationExtensions: []
}
) {
draftOrder{
id
totalPrice
}
}
}

JSON response

{
"data": {
"draftOrder": {
"id": "gid://shopify/DraftOrder/10"
"totalPrice": 132.99
}
}
}

Anchor to Step 3: Send an invoice for a draft orderStep 3: Send an invoice for a draft order

Sending an invoice for a B2B draft order is identical to sending an invoice for a consumer draft order. After creating a draft order, you can pass the draft order ID to the draftOrderInvoiceSend mutation to send the invoice to the company contact:

POST https://{shop}.myshopify.com/api/{api_version}/graphql.json

GraphQL mutation

mutation{
draftOrderInvoiceSend(
id: "gid://shopify/DraftOrder/10"
) {
draftOrder{
id
}
}
}

JSON response

{
"data": {
"draftOrder": {
"id": "gid://shopify/DraftOrder/10"
}
}
}

Anchor to Step 4: Mark a draft order as completeStep 4: Mark a draft order as complete

Marking a B2B draft order as complete is identical to marking a consumer draft order as complete. After creating a draft order, you can pass the draft order ID to the draftOrderComplete mutation to mark the draft order as complete and create a corresponding order:

POST https://{shop}.myshopify.com/api/{api_version}/graphql.json

GraphQL mutation

mutation{
draftOrderComplete(
id: "gid://shopify/DraftOrder/10"
) {
draftOrder{
id
order {
id
}
}
}
}

JSON response

{
"data": {
"draftOrder": {
"id": "gid://shopify/DraftOrder/10",
"order": {
"id": "gid://shopify/Order/1"
}
}
}
}


Was this page helpful?