Skip to main content
Glama

update_product

Destructive

Update an existing product's prices, variants, stock, tax, files and other settings. This is where a page's pricing lives: use it, not update_checkout_page, to change what a page sells. Only the fields you supply change; prices[] and variants[] replace the full list, so read current values with get_product first. The change applies to every page that sells the product at once: customers see it right away. There is no undo, because the previous values are not kept.

Input Schema

NameRequiredDescriptionDefault
skuNoSKU of the product.
priceNoPatch the product's single price - top-level fields you omit keep their value, but `recurring` and `paymentPlan` are replaced whole: omitted sub-fields are not kept (interval defaults to month, intervalCount to 1, and trialPeriodDays, billingCycleAnchorConfig and startDate are dropped), so read the current config with `get_product` and re-send it in full when touching either. Valid only while the product has at most one price; products with multiple prices must be updated through `prices[]`. Ignored when `prices` is also sent. `billingType` and `payWhatYouWant` are fixed once a price exists. Cannot be null.
stockNoAvailable stock of the product.
titleNoProduct title.
pricesNoReplaces the full price list. Read the current prices with `get_product` first and include `id` on every price you want to keep; entries without an id are created and existing prices missing from the list are removed. At least one entry must be enabled. `billingType` and `payWhatYouWant` cannot change on an existing price. Takes precedence over `price` when both are sent.
fileIdsNo
taxCodeNoIf Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings.
imageIdsNoReplaces the product images with these image file IDs (upload with `upload_file`). Send `[]` to remove all images; null is not accepted.
variantsNoReplaces the full variant list; nothing is merged from the stored variants. Read the current variants with `get_product` first and include `id` on every variant and option you want to keep; entries without an id are created and existing ones missing from the list are removed. Send `[]` to remove all variants. Three fields do not round-trip from `get_product`: re-send each option image as `imageId: option.image.fileId` or it is dropped; option `discountedFromPrice` is not returned at all, so re-supply it or it is lost; and an option returned with `type: "pay_what_you_want"` must be sent back as `type: "one_time"` with `payWhatYouWant: true`. To link a discount to specific options, give those options a `key` and reference it in `discounts[].variantOptionIds[].key` in the same request.
discountsNoBulk discounts for the product. Use `checkout_quantity` when the discount should apply to the total checkout quantity. Use `variant_option_quantity` when the discount should apply only to specific variant options. In that mode, you must do all of the following in the same request: 1. Include `productData.variants`. 2. Give each target variant option a temporary `key` in `variants[].options[].key`. 3. Reference those exact keys in `discounts[].variantOptionIds[].key`. - `variants[].options`: [{ name: "Red", key: "red" }, { name: "Blue", key: "blue" }] - `discounts`: [{ quantityCondition: "variant_option_quantity", variantOptionIds: [{ key: "red" }, { key: "blue" }], minQuantity: 3, percentOff: 10 }] [Learn more](https://checkoutpage.com/docs/articles/bulk-discounts)
productIdYesThe ID of the product to update. Find it on a page response as `data.product.id` (see `get_checkout_page`).
descriptionNoDescription of the product. Accepts HTML or plain text.
pricePickerNoPrice picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order.
taxBehaviorNoIf Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.
limitPaymentsNoDuplicate-payment prevention settings for this product. Applies to one-time payments only.
defaultPriceIdNoID of the price pre-selected at checkout. Must reference an existing price `id` (after this update is applied). Cannot be cleared; set a different price instead.
fixedTaxRateIdsNoTax Rate IDs applied to this product (at most one). Send `[]` to clear; null is not accepted. Call `list_tax_rates` to find an existing rate.
variantsRequiredNoUse when no variants are marked as required but you still need the customer to select at least one variant option. Ignored when any variant is individually required. Defaults to `false`.
hasUnlimitedStockNoWhether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.
limitSubscriptionsNoConfiguration to limit the number of active subscriptions for this product. Used to cap subscriptions to a specific number.
generateLicenseKeysNoIf true, on purchase a license key for the product is generated
enableFileAccessForInactiveSubscriptionsNoAllow customers with inactive subscriptions to keep accessing file downloads.

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / price / properties / reference / description
      Previous value: -"Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference."New value: +"Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong."
    • changedInput schema / properties / price / properties / reference / example
      Previous value: -"price_one_time_fixed_5000"New value: +"complete-bundle"
    • changedInput schema / properties / prices / items / properties / reference / description
      Previous value: -"Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference."New value: +"Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong."
    • changedInput schema / properties / prices / items / properties / reference / example
      Previous value: -"price_one_time_fixed_5000"New value: +"complete-bundle"
    • changedInput schema / properties / variants / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "properties": {
      -        "hidden": {
      -          "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "id": {
      -          "description": "Existing variant id. Include it to keep (and edit) an existing variant; omit it to create a new one.",
      -          "pattern": "^[0-9a-fA-F]{24}$",
      -          "type": "string"
      -        },
      -        "increasesWithQuantity": {
      -          "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "key": {
      -          "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
      -          "example": "select-package-tier",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "layout": {
      -          "anyOf": [
      -            {
      -              "properties": {
      -                "collapseVariantOptions": {
      -                  "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
      -                  "example": false,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "imageSize": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "small",
      -                        "medium",
      -                        "large",
      -                        ""
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Size of variant option images. Defaults to `small`.",
      -                  "example": "small"
      -                },
      -                "showPwywPlaceholder": {
      -                  "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
      -                  "example": true,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "showVariantName": {
      -                  "description": "Show the variant name. Defaults to `true`.",
      -                  "example": true,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "showVariantOptionNames": {
      -                  "description": "Show variant option names. Defaults to `true`.",
      -                  "example": true,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "showVariantOptionPriceSign": {
      -                  "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
      -                  "example": true,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "showVariantOptionPrices": {
      -                  "description": "Show variant option prices. Defaults to `true`.",
      -                  "example": true,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "spacing": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "comfortable",
      -                        "compact",
      -                        ""
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Spacing between variant options. Defaults to `comfortable`.",
      -                  "example": "comfortable"
      -                },
      -                "textAlign": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "left",
      -                        "center",
      -                        "stack",
      -                        ""
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Text alignment for variant options. Defaults to `left`.",
      -                  "example": "left"
      -                },
      -                "variantOptionColumns": {
      -                  "anyOf": [
      -                    {
      -                      "maximum": 10,
      -                      "minimum": 1,
      -                      "type": "number"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Number of columns for grid layout. Defaults to `2`.",
      -                  "example": 2
      -                },
      -                "variantOptionLayout": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "list",
      -                        "grid"
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Layout style for variant options. Defaults to `list`.",
      -                  "example": "list"
      -                }
      -              },
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Layout configuration for this variant."
      -        },
      -        "manageVariantOptionStock": {
      -          "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "name": {
      -          "description": "Name of the variant.",
      -          "example": "Plan Type",
      -          "type": "string"
      -        },
      -        "options": {
      -          "description": "Options for this variant. At least one is required.",
      -          "items": {
      -            "properties": {
      -              "additionalChargeAmount": {
      -                "description": "The additional charge for selecting this variant option in cents.",
      -                "example": 1000,
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "description": {
      -                "description": "Description of the variant option. Supports HTML or plain text.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "discountedFromPrice": {
      -                "anyOf": [
      -                  {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "The original price of this variant option in cents.",
      -                "example": 1500
      -              },
      -              "fileIds": {
      -                "anyOf": [
      -                  {
      -                    "items": {
      -                      "pattern": "^[0-9a-fA-F]{24}$",
      -                      "type": "string"
      -                    },
      -                    "type": "array"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "Files specific to this variant option. Available to the customer after purchase."
      -              },
      -              "id": {
      -                "description": "Existing option id. Include it to keep (and edit) an existing option; omit it to create a new one.",
      -                "pattern": "^[0-9a-fA-F]{24}$",
      -                "type": "string"
      -              },
      -              "imageId": {
      -                "anyOf": [
      -                  {
      -                    "pattern": "^[0-9a-fA-F]{24}$",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "key": {
      -                "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
      -                "example": "pro-option",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "name": {
      -                "description": "Name of the variant option.",
      -                "example": "Basic",
      -                "type": "string"
      -              },
      -              "payWhatYouWant": {
      -                "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
      -                "example": false,
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "pwywSuggestedPrice": {
      -                "anyOf": [
      -                  {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
      -                "example": 2500
      -              },
      -              "sku": {
      -                "description": "SKU for this option.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "status": {
      -                "anyOf": [
      -                  {
      -                    "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
      -                    "enum": [
      -                      "enabled",
      -                      "disabled",
      -                      "deleted"
      -                    ],
      -                    "example": "enabled",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "Status of the variant option. Defaults to `enabled`.",
      -                "example": "enabled"
      -              },
      -              "stock": {
      -                "description": "Stock quantity for this option.",
      -                "example": 10,
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "type": {
      -                "anyOf": [
      -                  {
      -                    "enum": [
      -                      "one_time",
      -                      "recurring"
      -                    ],
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
      -                "example": "one_time"
      -              }
      -            },
      -            "required": [
      -              "name"
      -            ],
      -            "type": "object"
      -          },
      -          "minItems": 1,
      -          "type": "array"
      -        },
      -        "order": {
      -          "description": "Display order of the variant. Defaults to `0`.",
      -          "example": 0,
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "preselect": {
      -          "anyOf": [
      -            {
      -              "properties": {
      -                "enabled": {
      -                  "description": "Enable preselecting a variant option. Defaults to `false`.",
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "optionId": {
      -                  "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
      -                  "example": "pro-option",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "quantity": {
      -                  "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
      -                  "example": 2,
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Preselect configuration for this variant.",
      -          "example": {
      -            "enabled": true,
      -            "optionId": "pro-option",
      -            "quantity": 1
      -          }
      -        },
      -        "priceIds": {
      -          "anyOf": [
      -            {
      -              "items": {
      -                "pattern": "^[0-9a-fA-F]{24}$",
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
      -          "example": [
      -            "507f1f77bcf86cd799439011"
      -          ]
      -        },
      -        "reference": {
      -          "anyOf": [
      -            {
      -              "maxLength": 36,
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "External reference ID. Generated from the variant name when omitted.",
      -          "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
      -        },
      -        "required": {
      -          "description": "Whether the customer must select at least one option in the variant.",
      -          "example": true,
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "selectionType": {
      -          "anyOf": [
      -            {
      -              "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
      -              "enum": [
      -                "single",
      -                "multiple",
      -                "quantity"
      -              ],
      -              "example": "single",
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
      -          "example": "single"
      -        },
      -        "showHideLogic": {
      -          "anyOf": [
      -            {
      -              "properties": {
      -                "comparison": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "is",
      -                        "is_not",
      -                        "is_empty",
      -                        "is_not_empty",
      -                        "contains"
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
      -                  "example": "is"
      -                },
      -                "element": {
      -                  "anyOf": [
      -                    {
      -                      "properties": {
      -                        "elementId": {
      -                          "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
      -                          "example": "select-package-tier",
      -                          "type": [
      -                            "string",
      -                            "null"
      -                          ]
      -                        }
      -                      },
      -                      "type": "object"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Element (variant) to compare against."
      -                },
      -                "enabled": {
      -                  "description": "Enable conditional show/hide logic. Defaults to `false`.",
      -                  "example": true,
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "value": {
      -                  "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
      -                  "example": "pro-option",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Conditional logic to show or hide this variant based on other form elements."
      -        },
      -        "status": {
      -          "anyOf": [
      -            {
      -              "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
      -              "enum": [
      -                "enabled",
      -                "disabled",
      -                "deleted"
      -              ],
      -              "example": "enabled",
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Status of the variant. Defaults to `enabled`",
      -          "example": "enabled"
      -        },
      -        "useVariantOptionSkus": {
      -          "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "name",
      -        "options"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "properties": {
      +        "hidden": {
      +          "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "description": "Existing variant id. Include it to keep (and edit) an existing variant; omit it to create a new one.",
      +          "pattern": "^[0-9a-fA-F]{24}$",
      +          "type": "string"
      +        },
      +        "increasesWithQuantity": {
      +          "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "key": {
      +          "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
      +          "example": "select-package-tier",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "layout": {
      +          "anyOf": [
      +            {
      +              "properties": {
      +                "collapseVariantOptions": {
      +                  "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
      +                  "example": false,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "imageSize": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "small",
      +                        "medium",
      +                        "large",
      +                        ""
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Size of variant option images. Defaults to `small`.",
      +                  "example": "small"
      +                },
      +                "showPwywPlaceholder": {
      +                  "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
      +                  "example": true,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "showVariantName": {
      +                  "description": "Show the variant name. Defaults to `true`.",
      +                  "example": true,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "showVariantOptionNames": {
      +                  "description": "Show variant option names. Defaults to `true`.",
      +                  "example": true,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "showVariantOptionPriceSign": {
      +                  "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
      +                  "example": true,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "showVariantOptionPrices": {
      +                  "description": "Show variant option prices. Defaults to `true`.",
      +                  "example": true,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "spacing": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "comfortable",
      +                        "compact",
      +                        ""
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Spacing between variant options. Defaults to `comfortable`.",
      +                  "example": "comfortable"
      +                },
      +                "textAlign": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "left",
      +                        "center",
      +                        "stack",
      +                        ""
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Text alignment for variant options. Defaults to `left`.",
      +                  "example": "left"
      +                },
      +                "variantOptionColumns": {
      +                  "anyOf": [
      +                    {
      +                      "maximum": 10,
      +                      "minimum": 1,
      +                      "type": "number"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Number of columns for grid layout. Defaults to `2`.",
      +                  "example": 2
      +                },
      +                "variantOptionLayout": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "list",
      +                        "grid"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Layout style for variant options. Defaults to `list`.",
      +                  "example": "list"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Layout configuration for this variant."
      +        },
      +        "manageVariantOptionStock": {
      +          "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "name": {
      +          "description": "Name of the variant.",
      +          "example": "Plan Type",
      +          "type": "string"
      +        },
      +        "options": {
      +          "description": "Options for this variant. At least one is required.",
      +          "items": {
      +            "properties": {
      +              "additionalChargeAmount": {
      +                "description": "The additional charge for selecting this variant option in cents.",
      +                "example": 1000,
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "description": {
      +                "description": "Description of the variant option. Supports HTML or plain text.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "discountedFromPrice": {
      +                "anyOf": [
      +                  {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "The original price of this variant option in cents.",
      +                "example": 1500
      +              },
      +              "fileIds": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "pattern": "^[0-9a-fA-F]{24}$",
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Files specific to this variant option. Available to the customer after purchase."
      +              },
      +              "id": {
      +                "description": "Existing option id. Include it to keep (and edit) an existing option; omit it to create a new one.",
      +                "pattern": "^[0-9a-fA-F]{24}$",
      +                "type": "string"
      +              },
      +              "imageId": {
      +                "anyOf": [
      +                  {
      +                    "pattern": "^[0-9a-fA-F]{24}$",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "key": {
      +                "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
      +                "example": "pro-option",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "name": {
      +                "description": "Name of the variant option.",
      +                "example": "Basic",
      +                "type": "string"
      +              },
      +              "payWhatYouWant": {
      +                "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
      +                "example": false,
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "pwywSuggestedPrice": {
      +                "anyOf": [
      +                  {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
      +                "example": 2500
      +              },
      +              "sku": {
      +                "description": "SKU for this option.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "status": {
      +                "anyOf": [
      +                  {
      +                    "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
      +                    "enum": [
      +                      "enabled",
      +                      "disabled",
      +                      "deleted"
      +                    ],
      +                    "example": "enabled",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Status of the variant option. Defaults to `enabled`.",
      +                "example": "enabled"
      +              },
      +              "stock": {
      +                "description": "Stock quantity for this option.",
      +                "example": 10,
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "type": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "one_time",
      +                      "recurring"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
      +                "example": "one_time"
      +              }
      +            },
      +            "required": [
      +              "name"
      +            ],
      +            "type": "object"
      +          },
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "order": {
      +          "description": "Display order of the variant. Defaults to `0`.",
      +          "example": 0,
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "preselect": {
      +          "anyOf": [
      +            {
      +              "properties": {
      +                "enabled": {
      +                  "description": "Enable preselecting a variant option. Defaults to `false`.",
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "optionId": {
      +                  "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
      +                  "example": "pro-option",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "quantity": {
      +                  "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
      +                  "example": 2,
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Preselect configuration for this variant.",
      +          "example": {
      +            "enabled": true,
      +            "optionId": "pro-option",
      +            "quantity": 1
      +          }
      +        },
      +        "priceIds": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "pattern": "^[0-9a-fA-F]{24}$",
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
      +          "example": [
      +            "507f1f77bcf86cd799439011"
      +          ]
      +        },
      +        "reference": {
      +          "anyOf": [
      +            {
      +              "maxLength": 36,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Stable ID that exports and integrations use for this variant. Generated from the variant name when omitted, and not updated when the name changes. Changing it breaks integrations that match on the old one, so only send it when the seller asks.",
      +          "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
      +        },
      +        "required": {
      +          "description": "Whether the customer must select at least one option in the variant.",
      +          "example": true,
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "selectionType": {
      +          "anyOf": [
      +            {
      +              "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
      +              "enum": [
      +                "single",
      +                "multiple",
      +                "quantity"
      +              ],
      +              "example": "single",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
      +          "example": "single"
      +        },
      +        "showHideLogic": {
      +          "anyOf": [
      +            {
      +              "properties": {
      +                "comparison": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "is",
      +                        "is_not",
      +                        "is_empty",
      +                        "is_not_empty",
      +                        "contains"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
      +                  "example": "is"
      +                },
      +                "element": {
      +                  "anyOf": [
      +                    {
      +                      "properties": {
      +                        "elementId": {
      +                          "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
      +                          "example": "select-package-tier",
      +                          "type": [
      +                            "string",
      +                            "null"
      +                          ]
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Element (variant) to compare against."
      +                },
      +                "enabled": {
      +                  "description": "Enable conditional show/hide logic. Defaults to `false`.",
      +                  "example": true,
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "value": {
      +                  "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
      +                  "example": "pro-option",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Conditional logic to show or hide this variant based on other form elements."
      +        },
      +        "status": {
      +          "anyOf": [
      +            {
      +              "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
      +              "enum": [
      +                "enabled",
      +                "disabled",
      +                "deleted"
      +              ],
      +              "example": "enabled",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Status of the variant. Defaults to `enabled`",
      +          "example": "enabled"
      +        },
      +        "useVariantOptionSkus": {
      +          "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "name",
      +        "options"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / data / properties / prices / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "description": "A single price entry on a multi-price product.",
      -      "properties": {
      -        "amount": {
      -          "description": "Price in smallest currency unit (cents).",
      -          "example": 4900,
      -          "type": "number"
      -        },
      -        "badge": {
      -          "description": "Optional short label shown over the price card.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "badgeIcon": {
      -          "anyOf": [
      -            {
      -              "description": "Icon shown before the badge text.",
      -              "enum": [
      -                "star",
      -                "sparkles",
      -                "fire",
      -                "bolt",
      -                "rocket",
      -                "trophy",
      -                "check",
      -                "x-mark",
      -                "plus",
      -                "arrow-right",
      -                "check-badge",
      -                "check-circle",
      -                "shield-check",
      -                "thumbs-up",
      -                "heart",
      -                "smile",
      -                "light-bulb",
      -                "sun",
      -                "moon",
      -                "gift",
      -                "tag",
      -                "percent",
      -                "dollar",
      -                "banknotes",
      -                "credit-card",
      -                "shopping-bag",
      -                "shopping-cart",
      -                "truck",
      -                "clock",
      -                "calendar",
      -                "bell",
      -                "megaphone",
      -                "trending-up",
      -                "chart",
      -                "refresh",
      -                "lock",
      -                "key",
      -                "ticket",
      -                "users",
      -                "academic-cap",
      -                "book",
      -                "music",
      -                "video",
      -                "document",
      -                "download",
      -                "mobile",
      -                "camera",
      -                "paint-brush",
      -                "puzzle",
      -                "cube",
      -                "globe",
      -                "map-pin",
      -                "storefront",
      -                "tools",
      -                "beaker",
      -                "lifebuoy",
      -                "chat",
      -                "envelope",
      -                "phone",
      -                "cake",
      -                "scale",
      -                "eye"
      -              ],
      -              "example": "star",
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Optional icon shown before the badge text."
      -        },
      -        "billingType": {
      -          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
      -          "enum": [
      -            "one_time",
      -            "recurring"
      -          ],
      -          "example": "one_time",
      -          "type": "string"
      -        },
      -        "currency": {
      -          "description": "Lowercase ISO 4217 currency code.",
      -          "example": "usd",
      -          "type": "string"
      -        },
      -        "discountedFromPrice": {
      -          "description": "Original price before discount, in cents.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "enabled": {
      -          "description": "Whether this price is selectable by customers.",
      -          "type": "boolean"
      -        },
      -        "hidden": {
      -          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "id": {
      -          "description": "Unique price identifier.",
      -          "example": "507f1f77bcf86cd799439011",
      -          "type": "string"
      -        },
      -        "isDefault": {
      -          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
      -          "type": "boolean"
      -        },
      -        "label": {
      -          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "order": {
      -          "description": "Dashboard display order.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "payWhatYouWant": {
      -          "description": "Whether pay-what-you-want pricing is enabled.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "paymentPlan": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "billingCycleAnchorConfig": {
      -                  "anyOf": [
      -                    {
      -                      "additionalProperties": false,
      -                      "properties": {
      -                        "dayOfMonth": {
      -                          "anyOf": [
      -                            {
      -                              "maximum": 31,
      -                              "minimum": 1,
      -                              "type": "number"
      -                            },
      -                            {
      -                              "type": "null"
      -                            }
      -                          ],
      -                          "description": "Day of month the billing cycle is anchored to."
      -                        },
      -                        "enabled": {
      -                          "type": [
      -                            "boolean",
      -                            "null"
      -                          ]
      -                        },
      -                        "month": {
      -                          "anyOf": [
      -                            {
      -                              "maximum": 12,
      -                              "minimum": 1,
      -                              "type": "number"
      -                            },
      -                            {
      -                              "type": "null"
      -                            }
      -                          ]
      -                        }
      -                      },
      -                      "type": "object"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ]
      -                },
      -                "interval": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "day",
      -                        "week",
      -                        "month",
      -                        "year"
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Billing interval (day, week, month, year).",
      -                  "example": "month"
      -                },
      -                "intervalCount": {
      -                  "description": "Number of intervals between billings.",
      -                  "example": 1,
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "planIterations": {
      -                  "description": "Number of billing cycles after which the plan completes.",
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "startDate": {
      -                  "anyOf": [
      -                    {
      -                      "format": "date-time",
      -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "The date on which the subscription begins."
      -                },
      -                "trialPeriodDays": {
      -                  "description": "Trial period in days.",
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
      -        },
      -        "pwywSuggestedPrice": {
      -          "description": "Suggested price in cents for PWYW prices.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "recurring": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "billingCycleAnchorConfig": {
      -                  "anyOf": [
      -                    {
      -                      "additionalProperties": false,
      -                      "properties": {
      -                        "dayOfMonth": {
      -                          "anyOf": [
      -                            {
      -                              "maximum": 31,
      -                              "minimum": 1,
      -                              "type": "number"
      -                            },
      -                            {
      -                              "type": "null"
      -                            }
      -                          ],
      -                          "description": "Day of month the billing cycle is anchored to."
      -                        },
      -                        "enabled": {
      -                          "type": [
      -                            "boolean",
      -                            "null"
      -                          ]
      -                        },
      -                        "month": {
      -                          "anyOf": [
      -                            {
      -                              "maximum": 12,
      -                              "minimum": 1,
      -                              "type": "number"
      -                            },
      -                            {
      -                              "type": "null"
      -                            }
      -                          ]
      -                        }
      -                      },
      -                      "type": "object"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ]
      -                },
      -                "interval": {
      -                  "anyOf": [
      -                    {
      -                      "enum": [
      -                        "day",
      -                        "week",
      -                        "month",
      -                        "year"
      -                      ],
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Billing interval (day, week, month, year).",
      -                  "example": "month"
      -                },
      -                "intervalCount": {
      -                  "description": "Number of intervals between billings.",
      -                  "example": 1,
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "startDate": {
      -                  "anyOf": [
      -                    {
      -                      "format": "date-time",
      -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "The date on which the subscription begins."
      -                },
      -                "trialPeriodDays": {
      -                  "description": "Trial period in days.",
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Recurring billing configuration. Never present together with paymentPlan."
      -        },
      -        "reference": {
      -          "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "setupFee": {
      -          "description": "One-time setup fee in cents.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "setupFeeMultipliesWithQuantity": {
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "amount",
      -        "currency",
      -        "id",
      -        "enabled",
      -        "isDefault",
      -        "billingType"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "A single price entry on a multi-price product.",
      +      "properties": {
      +        "amount": {
      +          "description": "Price in smallest currency unit (cents).",
      +          "example": 4900,
      +          "type": "number"
      +        },
      +        "badge": {
      +          "description": "Optional short label shown over the price card.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "badgeIcon": {
      +          "anyOf": [
      +            {
      +              "description": "Icon shown before the badge text.",
      +              "enum": [
      +                "star",
      +                "sparkles",
      +                "fire",
      +                "bolt",
      +                "rocket",
      +                "trophy",
      +                "check",
      +                "x-mark",
      +                "plus",
      +                "arrow-right",
      +                "check-badge",
      +                "check-circle",
      +                "shield-check",
      +                "thumbs-up",
      +                "heart",
      +                "smile",
      +                "light-bulb",
      +                "sun",
      +                "moon",
      +                "gift",
      +                "tag",
      +                "percent",
      +                "dollar",
      +                "banknotes",
      +                "credit-card",
      +                "shopping-bag",
      +                "shopping-cart",
      +                "truck",
      +                "clock",
      +                "calendar",
      +                "bell",
      +                "megaphone",
      +                "trending-up",
      +                "chart",
      +                "refresh",
      +                "lock",
      +                "key",
      +                "ticket",
      +                "users",
      +                "academic-cap",
      +                "book",
      +                "music",
      +                "video",
      +                "document",
      +                "download",
      +                "mobile",
      +                "camera",
      +                "paint-brush",
      +                "puzzle",
      +                "cube",
      +                "globe",
      +                "map-pin",
      +                "storefront",
      +                "tools",
      +                "beaker",
      +                "lifebuoy",
      +                "chat",
      +                "envelope",
      +                "phone",
      +                "cake",
      +                "scale",
      +                "eye"
      +              ],
      +              "example": "star",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Optional icon shown before the badge text."
      +        },
      +        "billingType": {
      +          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
      +          "enum": [
      +            "one_time",
      +            "recurring"
      +          ],
      +          "example": "one_time",
      +          "type": "string"
      +        },
      +        "currency": {
      +          "description": "Lowercase ISO 4217 currency code.",
      +          "example": "usd",
      +          "type": "string"
      +        },
      +        "discountedFromPrice": {
      +          "description": "Original price before discount, in cents.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "enabled": {
      +          "description": "Whether this price is selectable by customers.",
      +          "type": "boolean"
      +        },
      +        "hidden": {
      +          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "description": "Unique price identifier.",
      +          "example": "507f1f77bcf86cd799439011",
      +          "type": "string"
      +        },
      +        "isDefault": {
      +          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
      +          "type": "boolean"
      +        },
      +        "label": {
      +          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "order": {
      +          "description": "Dashboard display order.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "payWhatYouWant": {
      +          "description": "Whether pay-what-you-want pricing is enabled.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "paymentPlan": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "billingCycleAnchorConfig": {
      +                  "anyOf": [
      +                    {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "dayOfMonth": {
      +                          "anyOf": [
      +                            {
      +                              "maximum": 31,
      +                              "minimum": 1,
      +                              "type": "number"
      +                            },
      +                            {
      +                              "type": "null"
      +                            }
      +                          ],
      +                          "description": "Day of month the billing cycle is anchored to."
      +                        },
      +                        "enabled": {
      +                          "type": [
      +                            "boolean",
      +                            "null"
      +                          ]
      +                        },
      +                        "month": {
      +                          "anyOf": [
      +                            {
      +                              "maximum": 12,
      +                              "minimum": 1,
      +                              "type": "number"
      +                            },
      +                            {
      +                              "type": "null"
      +                            }
      +                          ]
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ]
      +                },
      +                "interval": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "day",
      +                        "week",
      +                        "month",
      +                        "year"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Billing interval (day, week, month, year).",
      +                  "example": "month"
      +                },
      +                "intervalCount": {
      +                  "description": "Number of intervals between billings.",
      +                  "example": 1,
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "planIterations": {
      +                  "description": "Number of billing cycles after which the plan completes.",
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "startDate": {
      +                  "anyOf": [
      +                    {
      +                      "format": "date-time",
      +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "The date on which the subscription begins."
      +                },
      +                "trialPeriodDays": {
      +                  "description": "Trial period in days.",
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
      +        },
      +        "pwywSuggestedPrice": {
      +          "description": "Suggested price in cents for PWYW prices.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "recurring": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "billingCycleAnchorConfig": {
      +                  "anyOf": [
      +                    {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "dayOfMonth": {
      +                          "anyOf": [
      +                            {
      +                              "maximum": 31,
      +                              "minimum": 1,
      +                              "type": "number"
      +                            },
      +                            {
      +                              "type": "null"
      +                            }
      +                          ],
      +                          "description": "Day of month the billing cycle is anchored to."
      +                        },
      +                        "enabled": {
      +                          "type": [
      +                            "boolean",
      +                            "null"
      +                          ]
      +                        },
      +                        "month": {
      +                          "anyOf": [
      +                            {
      +                              "maximum": 12,
      +                              "minimum": 1,
      +                              "type": "number"
      +                            },
      +                            {
      +                              "type": "null"
      +                            }
      +                          ]
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ]
      +                },
      +                "interval": {
      +                  "anyOf": [
      +                    {
      +                      "enum": [
      +                        "day",
      +                        "week",
      +                        "month",
      +                        "year"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Billing interval (day, week, month, year).",
      +                  "example": "month"
      +                },
      +                "intervalCount": {
      +                  "description": "Number of intervals between billings.",
      +                  "example": 1,
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "startDate": {
      +                  "anyOf": [
      +                    {
      +                      "format": "date-time",
      +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "The date on which the subscription begins."
      +                },
      +                "trialPeriodDays": {
      +                  "description": "Trial period in days.",
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Recurring billing configuration. Never present together with paymentPlan."
      +        },
      +        "reference": {
      +          "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "setupFee": {
      +          "description": "One-time setup fee in cents.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "setupFeeMultipliesWithQuantity": {
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "amount",
      +        "currency",
      +        "id",
      +        "enabled",
      +        "isDefault",
      +        "billingType"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed4 schema fields changed
    • changedInput schema / properties / price / properties / paymentPlan / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "billingCycleAnchorConfig": {
      -        "anyOf": [
      -          {
      -            "properties": {
      -              "dayOfMonth": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 31,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
      -                "example": 1
      -              },
      -              "enabled": {
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "month": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 12,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "interval": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "day",
      -              "week",
      -              "month",
      -              "year"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Billing interval for subscriptions.",
      -        "example": "month"
      -      },
      -      "intervalCount": {
      -        "anyOf": [
      -          {
      -            "minimum": 1,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Number of intervals between billings.",
      -        "example": 1
      -      },
      -      "planIterations": {
      -        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
      -        "example": 3,
      -        "minimum": 1,
      -        "type": "number"
      -      },
      -      "startDate": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The date on which the subscription begins.",
      -        "example": "2026-02-25T06:40:09.463Z"
      -      },
      -      "trialPeriodDays": {
      -        "anyOf": [
      -          {
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Trial period in days for subscriptions."
      -      }
      -    },
      -    "required": [
      -      "planIterations"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "billingCycleAnchorConfig": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "dayOfMonth": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 31,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
      +                "example": 1
      +              },
      +              "enabled": {
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "month": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 12,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "interval": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "day",
      +              "week",
      +              "month",
      +              "year"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Billing interval for subscriptions.",
      +        "example": "month"
      +      },
      +      "intervalCount": {
      +        "anyOf": [
      +          {
      +            "minimum": 1,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Number of intervals between billings.",
      +        "example": 1
      +      },
      +      "planIterations": {
      +        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
      +        "example": 3,
      +        "minimum": 1,
      +        "type": "number"
      +      },
      +      "startDate": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The date on which the subscription begins.",
      +        "example": "2026-02-25T06:40:09.463Z"
      +      },
      +      "trialPeriodDays": {
      +        "anyOf": [
      +          {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Trial period in days for subscriptions."
      +      }
      +    },
      +    "required": [
      +      "planIterations"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / price / properties / recurring / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "billingCycleAnchorConfig": {
      -        "anyOf": [
      -          {
      -            "properties": {
      -              "dayOfMonth": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 31,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
      -                "example": 1
      -              },
      -              "enabled": {
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "month": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 12,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "interval": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "day",
      -              "week",
      -              "month",
      -              "year"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Billing interval for subscriptions.",
      -        "example": "month"
      -      },
      -      "intervalCount": {
      -        "anyOf": [
      -          {
      -            "minimum": 1,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Number of intervals between billings.",
      -        "example": 1
      -      },
      -      "startDate": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The date on which the subscription begins.",
      -        "example": "2026-02-25T06:40:09.463Z"
      -      },
      -      "trialPeriodDays": {
      -        "anyOf": [
      -          {
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Trial period in days for subscriptions."
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "billingCycleAnchorConfig": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "dayOfMonth": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 31,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
      +                "example": 1
      +              },
      +              "enabled": {
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "month": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 12,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "interval": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "day",
      +              "week",
      +              "month",
      +              "year"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Billing interval for subscriptions.",
      +        "example": "month"
      +      },
      +      "intervalCount": {
      +        "anyOf": [
      +          {
      +            "minimum": 1,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Number of intervals between billings.",
      +        "example": 1
      +      },
      +      "startDate": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The date on which the subscription begins.",
      +        "example": "2026-02-25T06:40:09.463Z"
      +      },
      +      "trialPeriodDays": {
      +        "anyOf": [
      +          {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Trial period in days for subscriptions."
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / prices / items / properties / paymentPlan / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "billingCycleAnchorConfig": {
      -        "anyOf": [
      -          {
      -            "properties": {
      -              "dayOfMonth": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 31,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
      -                "example": 1
      -              },
      -              "enabled": {
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "month": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 12,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "interval": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "day",
      -              "week",
      -              "month",
      -              "year"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Billing interval for subscriptions.",
      -        "example": "month"
      -      },
      -      "intervalCount": {
      -        "anyOf": [
      -          {
      -            "minimum": 1,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Number of intervals between billings.",
      -        "example": 1
      -      },
      -      "planIterations": {
      -        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
      -        "example": 3,
      -        "minimum": 1,
      -        "type": "number"
      -      },
      -      "startDate": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The date on which the subscription begins.",
      -        "example": "2026-02-25T06:40:09.463Z"
      -      },
      -      "trialPeriodDays": {
      -        "anyOf": [
      -          {
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Trial period in days for subscriptions."
      -      }
      -    },
      -    "required": [
      -      "planIterations"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "billingCycleAnchorConfig": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "dayOfMonth": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 31,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
      +                "example": 1
      +              },
      +              "enabled": {
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "month": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 12,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "interval": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "day",
      +              "week",
      +              "month",
      +              "year"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Billing interval for subscriptions.",
      +        "example": "month"
      +      },
      +      "intervalCount": {
      +        "anyOf": [
      +          {
      +            "minimum": 1,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Number of intervals between billings.",
      +        "example": 1
      +      },
      +      "planIterations": {
      +        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
      +        "example": 3,
      +        "minimum": 1,
      +        "type": "number"
      +      },
      +      "startDate": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The date on which the subscription begins.",
      +        "example": "2026-02-25T06:40:09.463Z"
      +      },
      +      "trialPeriodDays": {
      +        "anyOf": [
      +          {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Trial period in days for subscriptions."
      +      }
      +    },
      +    "required": [
      +      "planIterations"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / prices / items / properties / recurring / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "billingCycleAnchorConfig": {
      -        "anyOf": [
      -          {
      -            "properties": {
      -              "dayOfMonth": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 31,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ],
      -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
      -                "example": 1
      -              },
      -              "enabled": {
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "month": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 12,
      -                    "minimum": 1,
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "interval": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "day",
      -              "week",
      -              "month",
      -              "year"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Billing interval for subscriptions.",
      -        "example": "month"
      -      },
      -      "intervalCount": {
      -        "anyOf": [
      -          {
      -            "minimum": 1,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Number of intervals between billings.",
      -        "example": 1
      -      },
      -      "startDate": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The date on which the subscription begins.",
      -        "example": "2026-02-25T06:40:09.463Z"
      -      },
      -      "trialPeriodDays": {
      -        "anyOf": [
      -          {
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Trial period in days for subscriptions."
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "billingCycleAnchorConfig": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "dayOfMonth": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 31,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
      +                "example": 1
      +              },
      +              "enabled": {
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "month": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 12,
      +                    "minimum": 1,
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "interval": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "day",
      +              "week",
      +              "month",
      +              "year"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Billing interval for subscriptions.",
      +        "example": "month"
      +      },
      +      "intervalCount": {
      +        "anyOf": [
      +          {
      +            "minimum": 1,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Number of intervals between billings.",
      +        "example": 1
      +      },
      +      "startDate": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The date on which the subscription begins.",
      +        "example": "2026-02-25T06:40:09.463Z"
      +      },
      +      "trialPeriodDays": {
      +        "anyOf": [
      +          {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Trial period in days for subscriptions."
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed1 schema field changed
    • changedOutput schema / properties / data / properties / role / anyOf
      Previous value: -[
      -  {
      -    "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles. `orderbump` products are only available for beta testing of the order bump feature.",
      -    "enum": [
      -      "product",
      -      "orderbump"
      -    ],
      -    "example": "product",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
      +    "enum": [
      +      "product",
      +      "orderbump"
      +    ],
      +    "example": "product",
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds the specific mechanics that matter: only supplied fields change, prices[]/variants[] replace the whole list, the change propagates to every page selling the product immediately, and there is no undo because previous values are not retained. This is exactly the behavioral context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, zero filler, and the ordering is deliberate: what it does, where the routing boundary is, the patch-vs-replace rule, the blast radius, then irreversibility. The riskiest fact (no undo) lands last for emphasis without burying the operational rules.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter destructive mutation with deep nesting and an output schema, the description covers everything an agent must know before calling: scope of change, replacement semantics, read-before-write, propagation, and irreversibility. Return values are covered by the output schema, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 95% schema description coverage the schema already carries the parameter detail, so the baseline applies. The description still adds value by singling out the two replace-whole-list parameters (prices[], variants[]) and pointing at get_product for their current values, which is the highest-risk semantic in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Update an existing product') and enumerates the domains it covers (prices, variants, stock, tax, files). It goes further and explicitly disambiguates from the sibling update_checkout_page by stating that pricing lives here, so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit either/or: use this, not update_checkout_page, to change what a page sells. It also states a prerequisite workflow — read current values with get_product first — which is exactly the guidance an agent needs before a replacing update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources