This guide provides an overview of how subscriptions work in Shopify and explains our approach to building support for subscriptions. ## Lifecycle of a subscription app The following diagram illustrates the lifecycle of a subscription based on the actions of the merchant, customer, Shopify, and your app: ![Subscriptions lifecycle diagram](/assets/api/subscriptions/subscriptions-lifecycle.png) - Merchants create and manage how they want to sell their products. - Customers purchase subscriptions and update their subscriptions (such as changing their payment method). - When a customer purchases a subscription, Shopify first creates a transaction and then an order. After the transaction and order are created, Shopify generates a subscription contract and creates a billing attempt on the initial purchase. - Subsequent customer orders are automated by the app. The app creates a billing attempt based on the existing subscription contract using the API. When the app creates a billing attempt, a transaction and an order are created. - Your app receives webhooks when subscription-related events occur, handles billing failures and scheduling, and provides a subscription management user interface for both customers and merchants. ## Building subscriptions in your app Subscription apps need to have end-to-end workflows implemented for the following areas: - [Plan setup](#plan-setup) - [Plan purchase and checkout](#plan-purchase-and-checkout) - [Plan post-purchase and subscription management](#plan-post-purchase-and-subscription-management)
Area | Task |
---|---|
Plan setup | Save selling plans You can use the SellingPlanGroup and SellingPlan objects to store selling plans and associate them with products or variants. Regardless of whether your app has an internal representation of selling plans, you need to save the selling plans in Shopify using the SellingPlanGroup and SellingPlan objects.Learn more about GraphQL Admin API objects for selling plans. |
Set up app extensions Your app should provide the experience for users to manage their selling plans. The app should implement an embedded UX that enables the user to set up selling plans directly from the product page, using an app extension. If there aren't any app extensions to modify selling plans that are associated with a given product or variant, then the selling plans are listed in a read-only state on the product page in the Shopify admin. |
|
Plan purchase and checkout | Display selling plans in the purchase flow Shopify provides Liquid objects and the Ajax API to enable theme developers to display the selling plans for a given product in the purchase flow. To purchase a product with a purchase option, a variant ID and a selling plan ID need to be submitted through the Cart API. Learn more about how to implement subscriptions in a theme. |
Display selling plans in the checkout The Shopify checkout handles carts containing line items that have plans associated with them. It also handles pricing, messaging, payment method vaulting, and customer consent, which the user should customize to their needs. |
|
Create subscription contracts The subscription contract describes the agreement between merchant and customer. The agreement includes key information, like the variant, plan, payment method to be used for subsequent billing, and the billing and shipping addresses. Shopify automatically creates subscription contracts when products with selling plans are purchased through checkout. The contract is detached from the original plan. Updating the original plan doesn't modify pre-existing subscription contracts. |
|
Plan post-purchase and subscription management | Keep contracts updated The app should update contracts as necessary to make sure that it reflects the true current state of the agreement between the merchant and customer. |
Provide a subscription management interface The app should provide the customer-facing and merchant-facing UX for managing subscriptions, such as upgrades and downgrades, pauses, cancellations, and product changes. |
|
Automate billing The app should provide the automation for billing and renewing subscriptions. |
Responsibility | Shopify | App |
---|---|---|
Modeling and storing purchase option business data | ✔ | |
Billing and processing purchase payments (both initial purchase and renewals) | ✔ | |
Labeling the purchase option as a subscription | ✔ | |
Scheduling and automating payments, authorizing capture through the Shopify APIs and handles billing failures | ✔ | |
Providing customer & merchant UX for managing purchase options, both pre-purchase and post-purchase | ✔ |