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.
Anchor to RequirementsRequirements
- Most subscriptions, pre-order and try before you buy apps need to request API access through the Partner Dashboard. 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 to be published on the Shopify App Store.
- Custom apps created in the Shopify 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 to the GraphQL Admin API.
- Your app has the
merchant_managed_fulfillment_orders
andthird_party_fulfillment_orders
access scopes. Learn how to configure your access scopes using Shopify CLI.
- You're familiar with how prepaid subscriptions work.
- You have a prepaid subscription order that has scheduled fulfillment orders.
Anchor to Manually open a fulfillment orderManually 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.

You can also use the 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
JSON response
Anchor to Skip a fulfillment orderSkip 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.
Anchor to Reschedule a fulfillment orderReschedule a fulfillment order
Pass a new fulfillAt
date to the 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
JSON response
Anchor to Change the contract renewal dateChange the contract renewal date
To change the contract renewal date, you can use the 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
JSON response
Anchor to Refund a scheduled fulfillmentRefund a scheduled fulfillment
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.
A customer might want to refund one or more of their scheduled fulfillments. Fulfillment order cancellations and refunds are processed in reverse chronological order. You can pass the quantity
to the 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
JSON response
Anchor to Next stepsNext steps
- Learn how to manage orders for prepaid subscriptions by keeping subscription contract and order information in sync.