Shopify’s latest Merchant Changelog entry unlocks a powerful new workflow: subscription products can now be added directly to draft orders. This change bridges the gap between one‑off invoicing and recurring purchases, giving merchants a smoother way to set up recurring revenue without building a custom checkout flow. In this post we unpack what’s new, who needs to pay attention, and exactly how to start using the feature today.
What’s New?
Previously, subscription apps could only create recurring orders through their own checkout experiences or via the standard subscription APIs. Draft orders—Shopify’s native tool for creating invoices, custom bundles, or B2B quotes—didn’t support subscription line items. The update adds first‑class support for subscription products inside draft orders, letting you generate an invoice, send a checkout link, and let the customer confirm the recurring purchase in the familiar Shopify checkout.
Who Is Affected?
*Merchants* – Any store that uses draft orders for quoting, B2B sales, or manual invoicing can now attach subscription products. The workflow is identical to adding a regular product: select the subscription SKU, set the quantity, and optionally adjust the billing interval if the app exposes it. When the draft order is saved, the subscription is scheduled according to the app’s rules.
*Developers* – Subscription app developers must expose the subscription SKU to the merchant’s admin UI and ensure their app can handle the “draft_order” source when creating or updating a subscription. No new API endpoints are required, but the app should listen for the draft_order trigger in webhooks and treat it like any other subscription order.
How to Add Subscription Products to Draft Orders
API Changes & Code Example
While the core REST and GraphQL schemas remain unchanged, the DraftOrderLineItem type now accepts a subscription object when the product belongs to a subscription app. Below is a GraphQL mutation that creates a draft order with a subscription line item.
graphql
mutation CreateDraftOrderWithSubscription {
draftOrderCreate(input: {
lineItems: [{
variantId: "gid://shopify/ProductVariant/1234567890",
quantity: 1,
properties: [{ name: "subscription_interval", value: "30" }]
}]
customerId: "gid://shopify/Customer/987654321",
useCustomerDefaultAddress: true,
note: "Created via API – includes subscription"
}) {
draftOrder {
id
lineItems(first: 10) {
edges { node { title, quantity, properties { name value } } }
}
invoiceUrl
}
userErrors { field message }
}
}
Key points:
properties field is used to pass subscription‑specific metadata (most apps read a subscription_interval key).draftOrderCreate, call draftOrderInvoiceSend to email the checkout link.draft_orders/create and draft_orders/update webhooks to sync the subscription schedule when a merchant finalises the order.Billing & Invoicing Flow
When the merchant sends the invoice, Shopify generates a one‑time checkout link that also captures the subscription consent. The customer pays the first invoice amount (which can include the first billing period or a setup fee). After payment, the subscription app receives a orders/paid webhook with the source_name set to draft_order. The app then creates the recurring schedule based on the interval passed in the line‑item properties. From that point forward, future billing cycles are handled entirely by the app, just as if the subscription had been created via the regular storefront checkout.
Best Practices & Common Pitfalls
*Validate the subscription metadata.* Not all apps read the same property keys. Test with the specific app you use and confirm which keys trigger the correct interval.
*Communicate clearly on the invoice.* Since the checkout page now mixes one‑time items with a recurring subscription, add a note in the draft order’s Note field to explain the recurring nature to the customer.
*Handle cancellations gracefully.* If a merchant later cancels the draft order before the customer pays, the subscription never activates—so your app should ignore draft_order webhooks that lack a payment status.
*Watch for tax settings.* Subscription‑based taxes may differ from one‑off purchases. Verify that your tax overrides (if any) are applied at the draft order level.
*Test both REST and GraphQL paths.* Some older apps still use the REST draft_orders.json endpoint; the same properties array works there as well.
Conclusion & Next Steps
Adding subscriptions to draft orders removes a major friction point for merchants selling recurring products to B2B clients, wholesale buyers, or any scenario where an invoice first is required. For merchants, the immediate benefit is a single place to create quotes and recurring orders without juggling external tools. For developers, the update is a call to ensure your app reads the draft order source and respects the subscription metadata you expose.
Ready to try it? Open a draft order in your store, add a subscription product, and send an invoice. If you’re a developer, update your webhook handlers and test the GraphQL mutation above. Share your experience in the Shopify Community forums—feedback will help Shopify refine the feature further.
Happy selling!
