Update a selling plan
API v1 is the older API. It still works, but new integrations should use API v2. Migrating from v1 to v2
/external/preorders/{id}Costs 2 rate-limit points · Rate limits
Update an existing preorder selling plan. Supply a selling_plan object with the fields you want to change; omitted fields are left unchanged. Returns the updated selling plan, or 422 with validation errors if the changes are invalid.
Path parameters
idstringRequiredSelling plan ID
Headers
X-Auth-TokenstringRequiredAPI key for authentication
Request body
selling_planobjectInput schema for creating or updating selling plans
Show 68 child attributesHide child attributes
namestringDisplay name of the selling plan
internal_namestringInternal name for the selling plan
enabledbooleanWhether the selling plan is enabled
billing_typestringType of billing for the selling plan
One ofexact_timeno_remaining_balancetime_after_checkoutbilling_atstringExact billing time if billing_type is exact_time
billing_after_n_intervalsintegerNumber of intervals after checkout to bill
billing_after_interval_typestringType of interval for billing
One ofdaybilling_checkout_charge_amountnumberFixed amount to charge at checkout
billing_checkout_charge_percentagenumberPercentage to charge at checkout
billing_checkout_charge_typestringType of checkout charge
One ofpercentagepricebilling_titlestringTitle for billing section
billing_descriptionstringDescription for billing section
delivery_typestringType of delivery for the selling plan
One ofanchorasapexact_timeunknowndelivery_atstringExact delivery time if delivery_type is exact_time
delivery_after_n_intervalsintegerNumber of intervals after checkout for delivery
delivery_after_interval_typestringType of interval for delivery
One ofdayinventory_reserve_typestringWhen to reserve inventory
One ofon_saleon_fulfillmentinventory_providerstringInventory provider
One ofstoqshopifypricing_typestringType of pricing discount
One ofpercentagepricefixed_amountno_discountpricing_amountnumberFixed discount amount
pricing_percentagenumberPercentage discount
quantity_limit_textstringText to display for quantity limits
preorder_button_textstringText for the preorder button
preorder_button_text_colorstringText color for the preorder button
preorder_button_background_colorstringBackground color for the preorder button
preorder_button_colors_enabledbooleanWhether custom colors are enabled for the preorder button
preorder_discounted_price_enabledbooleanWhether to show discounted price on the preorder button
preorder_button_descriptionstringDescription text for the preorder button
preorder_button_description_background_colorstringBackground color for the preorder button description
preorder_button_description_border_radiusstringBorder radius for the preorder button description
preorder_button_description_quantity_limit_suffixstringSuffix text for quantity limit in button description
preorder_button_description_shipping_text_prefixstringPrefix text for shipping information in button description
preorder_button_description_show_quantity_limitbooleanWhether to show quantity limit in button description
preorder_button_description_show_shippingbooleanWhether to show shipping information in button description
preorder_button_description_text_colorstringText color for the preorder button description
preorder_badge_enabledbooleanWhether preorder badge is enabled
preorder_badge_textstringText for the preorder badge
preorder_badge_text_colorstringText color for the preorder badge
preorder_badge_background_colorstringBackground color for the preorder badge
preorder_shipping_textstringShipping text specific to preorders
shipping_textstringShipping information text
shipping_line_item_property_enabledbooleanWhether to enable shipping line item properties
shipping_applies_to_all_productsbooleanWhether shipping settings apply to all products
discount_textstringDiscount information text
preorder_tagsstringTags to apply to preorder items
product_variants_sourcestringSource of product variants for this selling plan
One ofallcollectioncustomproduct_variants_source_idintegerID of the source (e.g., collection ID)
markets_enabledbooleanWhether market-specific settings are enabled for this selling plan
shopify_market_idsarray of integersList of Shopify market IDs where this selling plan is available. Required if markets_enabled is true.
auto_collect_paymentbooleanWhether to automatically collect payment when the order is ready to fulfill
use_shopify_selling_planbooleanWhether to use Shopify's native selling plan functionality for this preorder offer. When true, this enables advanced selling plan features in Shopify.
enable_billing_widgetbooleanWhether to display the payment/billing widget on the product page
split_fulfillments_enabledbooleanWhether to enable split fulfillments for preorders. When enabled, preorder items can be shipped separately from regular items in the same order.
split_orders_enabledbooleanWhether to move preorder items into a separate Shopify order after checkout ("Move preorder items to a separate order"). In-stock items stay on the original order. Only one of
split_orders_enabled,split_fulfillments_enabledandhold_fulfillments_enabledcan be on: turning this on turns the others off. It also turns offuse_shopify_selling_plan, so deposits and partial payments aren't available.split_orders_per_variantbooleanOnly applies when
split_orders_enabledis on.false(default): all preorder items from this offer in a checkout move to one new order.true: each preorder variant from this offer moves to its own new order, so products sharing one offer still ship separately.split_orders_per_ship_datebooleanOnly applies when
split_orders_enabledis on.true: preorder items from this offer that ship on the same date (the same batch, or the same shipping text) move to one new order, and each other ship date gets its own. Turning it on turnssplit_orders_per_variantoff, and the other way round.require_preorder_acknowledgementbooleanWhether customers must accept terms and conditions before adding a preorder item to their cart.
preorder_acknowledgement_textstringThe terms and conditions text that customers must acknowledge when require_preorder_acknowledgement is enabled.
allow_mixed_cartbooleanWhether to allow customers to mix preorder items with regular items in the same cart. When false, customers must purchase preorders separately.
mixed_cart_error_messagestringError message displayed to customers when they attempt to mix preorder and regular items in their cart (when allow_mixed_cart is false).
preorder_min_quantityintegerMinimum quantity required per order for preorder items. When set, customers must purchase at least this many units.
preorder_max_quantityintegerMaximum quantity allowed per order for preorder items. When set, customers cannot purchase more than this many units.
payment_line_item_property_enabledbooleanWhether to add payment information as a line item property (e.g., "Payment - Pay in full").
custom_line_item_property_textstringCustom text to add as a line item property for preorder items. Useful for adding custom order notes or metadata.
auto_collect_payment_on_fulfillmentbooleanWhether to automatically collect remaining payment when the order is fulfilled (for partial payment preorders).
hold_fulfillments_enabledbooleanWhether to automatically hold fulfillments for preorder items. When enabled, fulfillments will be held until manually released.
hold_fulfillments_reason_notestringThe reason note displayed when fulfillments are held (when hold_fulfillments_enabled is true).
disable_button_until_acknowledgedbooleanWhether to disable the add to cart button until the customer acknowledges the preorder terms (when require_preorder_acknowledgement is true).
Returns
The preorder object.
Errors
Unauthorized
Selling plan not found
Validation errors
curl -X PUT "https://app.stoqapp.com/api/v1/external/preorders/79b44c6c-ebc7-41d4-8a1b-573d7c693454" \
-H "X-Auth-Token: $STOQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"selling_plan": {
"enabled": false,
"preorder_button_text": "Coming soon"
}
}'const res = await fetch("https://app.stoqapp.com/api/v1/external/preorders/79b44c6c-ebc7-41d4-8a1b-573d7c693454", {
method: "PUT",
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"selling_plan": {
"enabled": false,
"preorder_button_text": "Coming soon"
}
}),
});
const data = await res.json();import os
import requests
res = requests.put(
"https://app.stoqapp.com/api/v1/external/preorders/79b44c6c-ebc7-41d4-8a1b-573d7c693454",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
json={
"selling_plan": {
"enabled": False,
"preorder_button_text": "Coming soon"
}
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.stoqapp.com/api/v1/external/preorders/79b44c6c-ebc7-41d4-8a1b-573d7c693454")
req = Net::HTTP::Put.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"], "Content-Type" => "application/json")
req.body = {
selling_plan: {
enabled: false,
preorder_button_text: "Coming soon"
}
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"id": "79b44c6c-ebc7-41d4-8a1b-573d7c693454",
"name": "Summer Preorder",
"internal_name": "summer-2026",
"enabled": false,
"billing_type": "time_after_checkout",
"billing_checkout_charge_type": "percentage",
"billing_checkout_charge_percentage": 20,
"delivery_type": "asap",
"pricing_type": "no_discount",
"preorder_button_text": "Coming soon",
"preorder_badge_enabled": true,
"preorder_badge_text": "Preorder",
"selling_plan_product_variants_count": 12,
"shopify_selling_plan_id": 645123456,
"shopify_selling_plan_group_id": 9912345,
"shop_id": 43,
"created_at": "2026-06-20T10:00:00Z",
"updated_at": "2026-06-24T08:30:00Z",
"ongoing_job": false,
"shopify_variant_ids": [
43900910010503,
43900910010999
]
}