Skip to main content

Use draft orders

Plus

Only stores on the Shopify Plus plan can use apps with B2B features.

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?