{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/bigcommerce/main/json-schema/bigcommerce-product-option-full-schema.json", "title": "productOption_Full", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/bigcommerce-product-variant-options-api-openapi.yml#/components/schemas/productOption_Full", "allOf": [ { "$ref": "#/$defs/productOption_Base" }, { "type": "object", "properties": { "name": { "type": "string", "description": "The unique option name, auto-generated from the display name, a timestamp, and the product ID.\n" } } } ], "x-internal": false, "$defs": { "productOptionConfig_Full": { "title": "productOptionConfig_Full", "type": "object", "properties": { "default_value": { "type": "string", "description": "(date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string.\n" }, "checked_by_default": { "type": "boolean", "description": "(checkbox) Flag for setting the checkbox to be checked by default.\n" }, "checkbox_label": { "type": "string", "description": "(checkbox) Label displayed for the checkbox option.\n" }, "date_limited": { "type": "boolean", "description": "(date) Flag to limit the dates allowed to be entered on a date option.\n" }, "date_limit_mode": { "type": "string", "description": "(date) The type of limit that is allowed to be entered on a date option.\n", "enum": [ "earliest", "range", "latest" ] }, "date_earliest_value": { "type": "string", "description": "(date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string.\n", "format": "date" }, "date_latest_value": { "type": "string", "description": "(date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string.\n", "format": "date" }, "file_types_mode": { "type": "string", "description": "(file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types.\n", "enum": [ "specific", "all" ] }, "file_types_supported": { "type": "array", "description": "(file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values:\n `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`).\n `other` - Allows file types defined in the `file_types_other` array.\n", "items": { "type": "string" } }, "file_types_other": { "type": "array", "description": "(file) A list of other file types allowed with the file upload option.\n", "items": { "type": "string" } }, "file_max_size": { "type": "integer", "description": "(file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server.\n" }, "text_characters_limited": { "type": "boolean", "description": "(text, multi_line_text) Flag to validate the length of a text or multi-line text input.\n" }, "text_min_length": { "type": "integer", "description": "(text, multi_line_text) The minimum length allowed for a text or multi-line text option.\n" }, "text_max_length": { "type": "integer", "description": "(text, multi_line_text) The maximum length allowed for a text or multi line text option.\n" }, "text_lines_limited": { "type": "boolean", "description": "(multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input.\n" }, "text_max_lines": { "type": "integer", "description": "(multi_line_text) The maximum number of lines allowed on a multi-line text input.\n" }, "number_limited": { "type": "boolean", "description": "(numbers_only_text) Flag to limit the value of a number option.\n" }, "number_limit_mode": { "type": "string", "description": "(numbers_only_text) The type of limit on values entered for a number option.\n", "enum": [ "lowest", "highest", "range" ] }, "number_lowest_value": { "type": "number", "description": "(numbers_only_text) The lowest allowed value for a number option if `number_limited` is true.\n" }, "number_highest_value": { "type": "number", "description": "(numbers_only_text) The highest allowed value for a number option if `number_limited` is true.\n" }, "number_integers_only": { "type": "boolean", "description": "(numbers_only_text) Flag to limit the input on a number option to whole numbers only.\n" }, "product_list_adjusts_inventory": { "type": "boolean", "description": "(product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list.\n" }, "product_list_adjusts_pricing": { "type": "boolean", "description": "(product_list, product_list_with_images) Flag to add the optional product's price to the main product's price.\n" }, "product_list_shipping_calc": { "type": "string", "description": "(product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions.\n", "enum": [ "none", "weight", "package" ] } }, "description": "The values for option config can vary based on the Modifier created.", "x-internal": false }, "productOptionOptionValue_Base": { "title": "productOptionOptionValue_Base", "required": [ "label", "sort_order" ], "type": "object", "properties": { "is_default": { "type": "boolean", "description": "The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers.\n" }, "label": { "type": "string", "description": "The text display identifying the value on the storefront. Required in a /POST.\n", "x-required": [ "post" ] }, "sort_order": { "maximum": 2147483647, "minimum": -2147483648, "type": "integer", "description": "The order in which the value will be displayed on the product page. Required in a /POST.\n", "x-required": [ "post" ] }, "value_data": { "type": [ "object", "null" ], "properties": {}, "description": "Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. If no data is available, returns `null`.\n" } }, "description": "Common Product Option `option_value` properties.", "x-internal": false }, "productOptionOptionValue_Full": { "title": "productOptionOptionValue_Full", "description": "Product Option `option_value`.", "allOf": [ { "$ref": "#/$defs/productOptionOptionValue_Base" }, { "type": "object", "properties": { "id": { "type": "integer", "description": "The unique numeric ID of the value; increments sequentially.\n" } } } ], "x-internal": false }, "productOption_Base": { "title": "productOption_Base", "type": "object", "properties": { "id": { "type": [ "integer", "null" ], "description": "The unique numerical ID of the option, increments sequentially.\n" }, "product_id": { "type": "integer", "description": "The unique numerical ID of the product to which the option belongs.\n", "x-required": [ "post", "put" ] }, "display_name": { "maxLength": 255, "minLength": 1, "type": "string", "description": "The name of the option shown on the storefront.\n", "x-required": [ "post", "put" ] }, "type": { "type": "string", "description": "The type of option, which determines how it will display on the storefront. Acceptable values: `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. For reference, the former v2 API values are: RB = radio_buttons, RT = rectangles, S = dropdown, P = product_list, PI = product_list_with_images, CS = swatch.\n", "enum": [ "radio_buttons", "rectangles", "dropdown", "product_list", "product_list_with_images", "swatch" ], "x-required": [ "post", "put" ] }, "config": { "$ref": "#/$defs/productOptionConfig_Full" }, "sort_order": { "type": "integer", "description": "Order in which the option is displayed on the storefront. " }, "option_values": { "type": "array", "items": { "$ref": "#/$defs/productOptionOptionValue_Full" } } }, "description": "Common Option properties.", "x-internal": false } } }