Shipping and delivery for deferred purchase options
You can use delivery profiles to define shipping rates and delivery destinations for orders with purchase options. This guide explains delivery profiles and their use cases, related webhooks, and limitations.
What's a delivery profile?
Anchor link to section titled "What's a delivery profile?"A delivery profile is a set of shipping rates scoped to a set of products or variants that can be shipped from selected locations to zones. You can associate the DeliveryProfile
with the SellingPlanGroup
object to do the following tasks:
- Set free shipping for all orders with deferred purchase options
- Restrict shipping to specific countries
- Set a flat shipping rate by country for all orders with deferred purchase options
Learn more about the GraphQL Admin API queries for delivery profiles. For information on how to create deferred purchase options and associate them with products and variants, refer to Create and manage deferred purchase options.
Shipping rates displayed at checkout
Anchor link to section titled "Shipping rates displayed at checkout"Customers can buy a product as a one-time purchase ("buy now, pay now, ship now") or as a deferred purchase (pre-order or try before you buy) when both are offered by the merchant.
One-time purchases and deferred purchases
Anchor link to section titled "One-time purchases and deferred purchases"When a one-time order and a deferred purchase are in the same delivery profile and the products are coming from the same location, the shipping rate for the one-time purchase and the deferred purchase are calculated together.
If you want to calculate the shipping rate for the deferred purchase separately from the one-time purchase, then you need to do the following tasks:
- Use the
deliveryProfileCreate
mutation to create a separate delivery profile for the deferred purchase option. - Associate the
SellingPlanGroup
object for the deferred purchase to the delivery profile.
Shipping rates for multiple deferred purchases
Anchor link to section titled "Shipping rates for multiple deferred purchases"Shipping rates are consolidated if multiple deferred purchases are in the cart and the products share the same billing and delivery policies from the same deferred purchase option.
If a cart only contains deferred purchases, then the customer will pay the shipping cost when the remaining balance amount is charged.
Multiple shipping rates
Anchor link to section titled "Multiple shipping rates"Customers can select a shipping rate for products in the cart if more than one shipping rate is available. The shipping rate is applied to all one-time purchases and deferred purchases. For more information, refer to the limitations.
Customers can view the total shipping costs for one-time purchases and the total shipping costs for deferred purchases in the cart.
There are no webhooks specifically available for your app to receive information about shipping on purchase options. However, if your app needs to react to a shop's delivery profile changes, then you can use the following webhooks.
Webhook topic | Description | Payload |
---|---|---|
profiles/create |
Emitted when a delivery profile is first created | { id, } |
profiles/update |
Emitted when a delivery profile is updated | { id, } |
profiles/delete |
Emitted when a delivery profile is deleted | { id, } |
Learn about configuring webhooks for your app.
Limitations
Anchor link to section titled "Limitations"- By default, a product will have the same shipping rate whether it's bought as a one-time purchase or with purchase options.
- Pickup and local delivery methods aren't supported for purchase options. The delivery methods also don't support one-time purchases if the cart contains a product with a purchase option.
- Shipping rates that are specific to a purchase option don't display in the Shipping and delivery settings in the Shopify admin. You need to configure shipping rates for purchase options in your app.
- If the rate is inherited from your delivery profile, then the rate name is Shipping. If you define a purchase option-specific rate using the API, then the defined name is used.