--- title: Manage fulfillments for prepaid subscriptions description: Learn how to manage prepaid subscriptions with scheduled fulfillments based on future fulfillment dates. source_url: html: https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments md: https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments.md --- ExpandOn this page * [Requirements](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#requirements) * [Manually open a fulfillment order](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#manually-open-a-fulfillment-order) * [Skip a fulfillment order](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#skip-a-fulfillment-order) * [Refund a scheduled fulfillment](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#refund-a-scheduled-fulfillment) * [Next steps](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#next-steps) # Manage fulfillments for prepaid subscriptions After a prepaid subscription has been billed for, the merchant or customer might want to make changes to the subscription contract or order. For example, they might want to reschedule a shipment or refund one of the scheduled fulfillments. This guide shows how to manage and make changes to scheduled fulfillments for prepaid subscriptions. *** ## Requirements Note * Most subscriptions, pre-order and try before you buy apps need to request API access through the [Partner Dashboard](https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/authorization-code-grant#ask-for-permission). We give API access to apps that are designed according to our \[principles for subscriptions, pre-order and TBYB apps] (/docs/apps/selling-strategies/purchase-options#shopifys-principles). * Public apps that use subscriptions, pre-order or TBYB need to meet [specific requirements](https://shopify.dev/docs/apps/launch/app-requirements-checklist#purchase-option-apps) to be published on the Shopify App Store. * Custom apps [created in the Shopify admin](https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/generate-app-access-tokens-admin) can't use subscriptions, pre-order or TBYB because these apps can't use extensions or request access to protected scopes. If you're building a solution for a single store, then build your custom app in the Partner Dashboard. - Your app can make [authenticated requests](https://shopify.dev/docs/api/admin-graphql#authentication) to the GraphQL Admin API. - Your app has the `merchant_managed_fulfillment_orders` and `third_party_fulfillment_orders` [access scopes](https://shopify.dev/docs/api/usage/access-scopes). Learn how to [configure your access scopes using Shopify CLI](https://shopify.dev/docs/apps/build/cli-for-apps/app-configuration). * You're familiar with [how prepaid subscriptions work](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments). * You have a prepaid subscription order that has scheduled fulfillment orders. *** ## Manually open a fulfillment order Merchants can opt to **Fulfill early** for scheduled fulfillments in the Shopify admin. For scheduled fulfillment orders, this changes the fulfillment order's status to `OPEN` ahead of the `fulfillAt` date. ![Early fulfillment for prepaid subscriptions on a fulfillment order in the Shopify admin](https://cdn.shopify.com/shopifycloud/shopify-dev/production/assets/assets/images/api/subscriptions/fulfill-early-CxiWeC0I.png) You can also use the [`fulfillmentOrderOpen`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentorderopen) mutation to set a fulfillment order's status to `OPEN`, as demonstrated in the following example: ## POST https\://{shop}.myshopify.com/api/{api\_version}/graphql.json ## GraphQL mutation ```graphql mutation { fulfillmentOrderOpen(id: "gid://shopify/FulfillmentOrder/1899849515064") { fulfillmentOrder { id status } userErrors { field message } } } ``` ## JSON response ```json { "data": { "fulfillmentOrderOpen": { "fulfillmentOrder": { "id": "gid://shopify/FulfillmentOrder/1899849515064", "status": "OPEN" }, "userErrors": [] } }, ... } ``` *** ## Skip a fulfillment order A customer might want to skip a scheduled fulfillment of a product. For example, in the case of a three-month prepaid coffee subscription, a customer might decide to skip fulfillment because they already have enough coffee that month. To skip a fulfillment order, you need to reschedule the fulfillment order and change the subscription contract's renewal date if applicable. ### Reschedule a fulfillment order Pass a new `fulfillAt` date to the [`fulfillmentOrderReschedule`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentorderreschedule) mutation to reschedule a fulfillment order. In this example, the fulfillment order is rescheduled from Feb 15 to Apr 15. ## POST https\://{shop}.myshopify.com/api/{api\_version}/graphql.json ## GraphQL mutation ```graphql mutation { fulfillmentOrderReschedule( id: "gid://shopify/FulfillmentOrder/1899851251768" fulfillAt: "2022-04-15” ) { fulfillmentOrder { fulfillAt } userErrors { field message } } } ``` ## JSON response ```json { "data": { "FulfillmentOrderReschedule": { "fulfillmentOrder": { "fulfillAt": "2022-04-15T00:00:00Z" }, "userErrors": [] } }, ... } ``` ### Change the contract renewal date To change the contract renewal date, you can use the [`subscriptionContractSetNextBillingDate`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/subscriptioncontractsetnextbillingdate) mutation. Because the previous example rescheduled a fulfillment order from Feb 15 to Apr 15, the renewal date is changed to May 15 for the following example: ## POST https\://{shop}.myshopify.com/api/{api\_version}/graphql.json ## GraphQL mutation ```graphql mutation { subscriptionContractSetNextBillingDate( contractId: "gid://shopify/SubscriptionContract/1671224" date: "2022-05-15" ) { contract { nextBillingDate } userErrors { field message } } } ``` ## JSON response ```json { "data": { "subscriptionContractSetNextBillingDate": { "contract": { "nextBillingDate": "2022-05-15T00:00:00Z" }, "userErrors": [] } }, ... } ``` *** ## Refund a scheduled fulfillment Caution When you refund fulfillment orders, it doesn't automatically cancel the renewal that's associated with the subscription contract. To cancel the renewal, you also need to [update the subscription contract](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/update-a-subscription-contract). A customer might want to refund one or more of their scheduled fulfillments. Fulfillment order cancellations and refunds are processed [in reverse chronological order](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments#how-refunds-work). You can pass the `quantity` to the [`refundCreate`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/refundcreate) mutation to determine how many subscription cycles should be cancelled. The following example cancels the last four months of a six-month prepaid subscription: ## POST https\://{shop}.myshopify.com/api/{api\_version}/graphql.json ## GraphQL mutation ```graphql mutation { refundCreate( input: { orderId: "gid://shopify/Order/2067697074232" refundLineItems: { lineItemId: "gid://shopify/LineItem/4780880232504" quantity: 4 restockType: CANCEL locationId: "gid://shopify/Location/9562054" } } ) { refund { id } userErrors { field message } } } ``` ## JSON response ```json { "data": { "refundCreate": { "refund": { "id": "gid://shopify/Refund/659856" }, "userErrors": [] } }, ... } ``` *** ## Next steps * Learn how to [manage orders for prepaid subscriptions](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/sync-orders-subscriptions) by keeping subscription contract and order information in sync. *** * [Requirements](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#requirements) * [Manually open a fulfillment order](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#manually-open-a-fulfillment-order) * [Skip a fulfillment order](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#skip-a-fulfillment-order) * [Refund a scheduled fulfillment](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#refund-a-scheduled-fulfillment) * [Next steps](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments/manage-subscription-fulfillments#next-steps)