Skip to main content

Configurable products

Some products have configurations associated with them. For example, customers can add a variety of things to sandwiches, such as lettuce, tomatoes, and onions. To define these configurations, use the configurable_products column.

info

To enable configurable products for your storefront, contact your Instacart representative.

ColumnData typeDescriptionExample
configurable_productsJSONThe configurations available for the product.See Example.

JSON data

Field DefinitionsRequiredTypeDescriptionExample
config_idYesstringA unique product configuration ID provided for this specific configuration."1234"
lead_timeNointegerLead time for this configuration in minutes.1440 (24 hours)
config_typeYesstringType of product configuration. Possible values:
prep_style: Use for scenarios such as a cut of a deli meat or cheese
- custom: Use for scenarios such as a cake with custom text
- builder: Use for scenarios such as a sandwich, pizza, or burger with configurable toppings
"builder"
statusYesbooleanIndicates whether to enable this configuration.TRUE
FALSE
optionsYesarrayAn array with all the configuration options.
options[]
.config_option_id
YesstringUnique product configuration option ID."12341"
options[]
.name
YesstringOption name displayed to the customer."Bread"
options[]
.type
YesstringThe type of option. Possible values:
- base_selection: Base item allowing additional options.
- single_selection: single item must be selected
multiple_selection: multiple items can be selected
- text: single line text field
- text_field: multi line text field
"single_selection"
options[]
.status
YesbooleanIndicates whether to enable this option.TRUE
FALSE
options[]
.mandatory
YesbooleanIndicates whether this option is mandatory for a customer to select.TRUE
FALSE
options[]
.default_text
NostringDefault text when options[].type is text or text_field"Happy Birthday!"
options[]
.price
NostringPrice of the option."5.00"
options[]
.items
NoarrayArray of product configuration option items.
options[]
.max_length
NointegerMaximum length of text or text_field types.30
options[]
.maximum_selection
NointegerWhen options[].type is multiple_selection, the maximum number of items that can be selected for this option.8
options[]
.incompatible_configuration_options
NoarrayArray consisting of child arrays of incompatible option item IDs.[
["config_option_123",
"config_option_456"]
["config_option_456"]
]
options[]
.incompatible_configuration_options[]
NoarrayArray of incompatible option item IDs. Used to hide this option when another option is enabled.["config_option_321"]
options[]
.required_configuration_options
NoarrayArray consisting of child arrays of required option item IDs.[
["config_option_123",
"config_option_456"]
["config_option_321"]
]
options[]
.required_configuration_options[]
NoarrayArray of required option item IDs. Used to hide this option unless another option is enabled.["config_option_321"]
options[]
.items[]
.config_option_item_id
YesstringUnique option item ID. This is unique within the entire object."123411"
options[]
.items[]
.name
NostringThe name of the option item displayed to the customer."Whole wheat"
options[]
.items[]
.default
NobooleanIndicates whether the item is selected by default.TRUE
FALSE
options[]
.items[]
.price
NostringPrice of the option."1.00"
options[]
.items[]
.status
YesbooleanIndicates whether to enable this item in the option.TRUE
FALSE
options[]
.items[]
.lead_time_change
NointegerHow much extra time (minutes) this option adds to the lead_time.15 (minutes)
options[]
.items[]
.storage_temp_override
NostringOverride the base storage temperature setting with additional heating or freezing."heated"
options[]
.items[]
.incompatible_configuration_options
NoarrayArray consisting of child arrays of incompatible option item IDs.[
["config_option_123",
"config_option_456"]
["config_option_321"]
]
options[]
.items[]
.incompatible_configuration_options[]
NoarrayArray of incompatible option item IDs. Used to hide this option when another option is enabled.["config_option_321"]
options[]
.items[]
.required_configuration_options
NoarrayArray consisting of child arrays of required option item IDs.[
["config_option_123",
"config_option_456"]
["config_option_456"]
]
options[]
.items[]
.nutri_info
NoobjectNutrition information
options[]
.items[]
.nutri_info.calories_per_serving
NointegerCalories added by this option.180
options[]
.items[]
.selection_options[]
NoarrayArray of additional options. For example, after a customer selects a pizza sauce, they can select "Light", "Normal", or "Extra" sauce.
options[]
.items[]
.selection_options[]
.selection_option_id
YesstringUnique selection_option_id for each parent selection_option.“152”
options[]
.items[]
.selection_options[]
.default_option_id
NostringDefault for the additional option.“152-2”
options[]
.items[]
.selection_options[]
.name
YesstringName displayed to customer.“What side?”
options[]
.items[]
.selection_options[]
.options[].id
YesstringUnique option ID.“152-2”
options[]
.items[]
.selection_options[]
.options[].name
YesstringName displayed to customer.“Sweet potato fries”

Example

note

When you include a JSON object in a CSV file, you must use double quotes.

"{
""config_id"": ""sandwich-120"",
""lead_time"": 1440,
""config_type"": ""builder"",
""options"": [
{
""config_option_id"": ""10"",
""name"": ""Bread"",
""type"": ""single_selection"",
""mandatory"": true,
""price"": null,
""items"": [
{
""config_option_item_id"": ""10-1"",
""name"": ""Whole Wheat"",
""nutri_info"": {
""calories_per_serving"": 120
},
""default"": true,
""price"": null
},
{
""config_option_item_id"": ""10-2"",
""name"": ""White"",
""nutri_info"": {
""calories_per_serving"": 80
},
""default"": false,
""price"": null
}
]
},
{
""config_option_id"": ""11"",
""name"": ""Premium Addons"",
""type"": ""multiple_selection"",
""mandatory"": true,
""price"": null,
""items"": [
{
""config_option_item_id"": ""11-1"",
""name"": ""Avocado"",
""nutri_info"": {
/* Avocado adds 60 calories to the total calorie count */
""calories_per_serving"": 60
},
/* Avocado adds 60 cents to the base price of the item */
""price"": 0.60
},
{
""config_option_item_id"": ""11-2"",
""name"": ""Bacon"",
""nutri_info"": {
/* Bacon adds 200 calories to the total calorie count */
""calories_per_serving"": 200
},
/* Bacon adds $1.50 to the base price of the item */
""price"": 1.50
}
]
}
]
}"