---
title: "Update a selling plan"
description: "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"
url: https://docs.stoqapp.com/v1/preorders/update-a-selling-plan/
api: "API v1 (legacy)"
method: PUT
path: "/external/preorders/{id}"
---

# Update a selling plan

`PUT https://app.stoqapp.com/api/v1/external/preorders/{id}`

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

- `id` (string, required): Selling plan ID

## Headers

- `X-Auth-Token` (string, required): API key for authentication

## Request body

- `selling_plan` (object): Input schema for creating or updating selling plans
  - `name` (string): Display name of the selling plan
  - `internal_name` (string): Internal name for the selling plan
  - `enabled` (boolean): Whether the selling plan is enabled
  - `billing_type` (string): Type of billing for the selling plan One of: `exact_time`, `no_remaining_balance`, `time_after_checkout`.
  - `billing_at` (string): Exact billing time if billing_type is exact_time
  - `billing_after_n_intervals` (integer): Number of intervals after checkout to bill
  - `billing_after_interval_type` (string): Type of interval for billing One of: `day`.
  - `billing_checkout_charge_amount` (number): Fixed amount to charge at checkout
  - `billing_checkout_charge_percentage` (number): Percentage to charge at checkout
  - `billing_checkout_charge_type` (string): Type of checkout charge One of: `percentage`, `price`.
  - `billing_title` (string): Title for billing section
  - `billing_description` (string): Description for billing section
  - `delivery_type` (string): Type of delivery for the selling plan One of: `anchor`, `asap`, `exact_time`, `unknown`.
  - `delivery_at` (string): Exact delivery time if delivery_type is exact_time
  - `delivery_after_n_intervals` (integer): Number of intervals after checkout for delivery
  - `delivery_after_interval_type` (string): Type of interval for delivery One of: `day`.
  - `inventory_reserve_type` (string): When to reserve inventory One of: `on_sale`, `on_fulfillment`.
  - `inventory_provider` (string): Inventory provider One of: `stoq`, `shopify`.
  - `pricing_type` (string): Type of pricing discount One of: `percentage`, `price`, `fixed_amount`, `no_discount`.
  - `pricing_amount` (number): Fixed discount amount
  - `pricing_percentage` (number): Percentage discount
  - `quantity_limit_text` (string): Text to display for quantity limits
  - `preorder_button_text` (string): Text for the preorder button
  - `preorder_button_text_color` (string): Text color for the preorder button
  - `preorder_button_background_color` (string): Background color for the preorder button
  - `preorder_button_colors_enabled` (boolean): Whether custom colors are enabled for the preorder button
  - `preorder_discounted_price_enabled` (boolean): Whether to show discounted price on the preorder button
  - `preorder_button_description` (string): Description text for the preorder button
  - `preorder_button_description_background_color` (string): Background color for the preorder button description
  - `preorder_button_description_border_radius` (string): Border radius for the preorder button description
  - `preorder_button_description_quantity_limit_suffix` (string): Suffix text for quantity limit in button description
  - `preorder_button_description_shipping_text_prefix` (string): Prefix text for shipping information in button description
  - `preorder_button_description_show_quantity_limit` (boolean): Whether to show quantity limit in button description
  - `preorder_button_description_show_shipping` (boolean): Whether to show shipping information in button description
  - `preorder_button_description_text_color` (string): Text color for the preorder button description
  - `preorder_badge_enabled` (boolean): Whether preorder badge is enabled
  - `preorder_badge_text` (string): Text for the preorder badge
  - `preorder_badge_text_color` (string): Text color for the preorder badge
  - `preorder_badge_background_color` (string): Background color for the preorder badge
  - `preorder_shipping_text` (string): Shipping text specific to preorders
  - `shipping_text` (string): Shipping information text
  - `shipping_line_item_property_enabled` (boolean): Whether to enable shipping line item properties
  - `shipping_applies_to_all_products` (boolean): Whether shipping settings apply to all products
  - `discount_text` (string): Discount information text
  - `preorder_tags` (string): Tags to apply to preorder items
  - `product_variants_source` (string): Source of product variants for this selling plan One of: `all`, `collection`, `custom`.
  - `product_variants_source_id` (integer): ID of the source (e.g., collection ID)
  - `markets_enabled` (boolean): Whether market-specific settings are enabled for this selling plan
  - `shopify_market_ids` (array of integers): List of Shopify market IDs where this selling plan is available. Required if markets_enabled is true.
  - `auto_collect_payment` (boolean): Whether to automatically collect payment when the order is ready to fulfill
  - `use_shopify_selling_plan` (boolean): Whether to use Shopify's native selling plan functionality for this preorder offer. When true, this enables advanced selling plan features in Shopify.
  - `enable_billing_widget` (boolean): Whether to display the payment/billing widget on the product page
  - `split_fulfillments_enabled` (boolean): Whether to enable split fulfillments for preorders. When enabled, preorder items can be shipped separately from regular items in the same order.
  - `split_orders_enabled` (boolean): Whether to move preorder items into a separate Shopify order after checkout (&quot;Move preorder items to a separate order&quot;). In-stock items stay on the original order. Only one of `split_orders_enabled`, `split_fulfillments_enabled` and `hold_fulfillments_enabled` can be on: turning this on turns the others off. It also turns off `use_shopify_selling_plan`, so deposits and partial payments aren't available.
  - `split_orders_per_variant` (boolean): Only applies when `split_orders_enabled` is 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_date` (boolean): Only applies when `split_orders_enabled` is 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 turns `split_orders_per_variant` off, and the other way round.
  - `require_preorder_acknowledgement` (boolean): Whether customers must accept terms and conditions before adding a preorder item to their cart.
  - `preorder_acknowledgement_text` (string): The terms and conditions text that customers must acknowledge when require_preorder_acknowledgement is enabled.
  - `allow_mixed_cart` (boolean): Whether to allow customers to mix preorder items with regular items in the same cart. When false, customers must purchase preorders separately.
  - `mixed_cart_error_message` (string): Error message displayed to customers when they attempt to mix preorder and regular items in their cart (when allow_mixed_cart is false).
  - `preorder_min_quantity` (integer): Minimum quantity required per order for preorder items. When set, customers must purchase at least this many units.
  - `preorder_max_quantity` (integer): Maximum quantity allowed per order for preorder items. When set, customers cannot purchase more than this many units.
  - `payment_line_item_property_enabled` (boolean): Whether to add payment information as a line item property (e.g., &quot;Payment - Pay in full&quot;).
  - `custom_line_item_property_text` (string): Custom text to add as a line item property for preorder items. Useful for adding custom order notes or metadata.
  - `auto_collect_payment_on_fulfillment` (boolean): Whether to automatically collect remaining payment when the order is fulfilled (for partial payment preorders).
  - `hold_fulfillments_enabled` (boolean): Whether to automatically hold fulfillments for preorder items. When enabled, fulfillments will be held until manually released.
  - `hold_fulfillments_reason_note` (string): The reason note displayed when fulfillments are held (when hold_fulfillments_enabled is true).
  - `disable_button_until_acknowledged` (boolean): Whether to disable the add to cart button until the customer acknowledges the preorder terms (when require_preorder_acknowledgement is true).

## Returns

The [preorder object](https://docs.stoqapp.com/v1/preorders/).

Rate limit: this call costs 2 points ([rate limits](https://docs.stoqapp.com/docs/rate-limits/)).

## Example request

```sh
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"
    }
  }'
```

## 200

Selling plan updated successfully

```json
{
  "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
  ]
}
```

## 401

Unauthorized

## 404

Selling plan not found

## 422

Validation errors

