Add-Ons
Modifier groups (toppings, extras, upgrades) returned as part of the product detail response.
Add-ons are not accessed via a separate endpoint. They are included in the response from GET /api/v1/catalogue/products/{id}.
Structure
Each add-on is a group containing options. Groups define selection rules (single vs. multiple, required vs. optional). Each option has its own price.
Example
JSON
{
"add_ons": [
{
"id": "addon_toppings",
"name": "Pizza Toppings",
"selection_type": "multiple",
"is_required": false,
"min_selections": 0,
"max_selections": 5,
"options": [
{ "id": "opt_pepperoni", "name": "Pepperoni", "price": "1.50" },
{ "id": "opt_mushrooms", "name": "Mushrooms", "price": "1.00" },
{ "id": "opt_cheese", "name": "Extra Cheese", "price": "2.00" }
]
},
{
"id": "addon_size",
"name": "Size",
"selection_type": "single",
"is_required": true,
"min_selections": 1,
"max_selections": 1,
"options": [
{ "id": "opt_medium", "name": "Medium", "price": "0.00" },
{ "id": "opt_large", "name": "Large", "price": "3.00" }
]
}
]
}Selection Types
| Type | Description |
|---|---|
single | Only one option can be selected (radio buttons) |
multiple | Multiple options can be selected (checkboxes) |
quantity | Options can be added multiple times (counters) |
Add-On Group Object
| Field | Type | Description |
|---|---|---|
id | string | Unique add-on group identifier |
name | string | Display name |
selection_type | string | single, multiple, or quantity |
is_required | boolean | Whether selection is mandatory |
min_selections | integer | Minimum required selections |
max_selections | integer | Maximum allowed selections |
options | array | List of option objects |
Option Object
| Field | Type | Description |
|---|---|---|
id | string | Unique option identifier |
name | string | Option display name |
price | string | Additional price (decimal string) |
Using Add-Ons
Pass selected option IDs to the quote endpoint or when adding items to the cart:
JSON
// POST /api/v1/catalogue/quote
{
"product_id": "prod_pizza",
"add_on_option_ids": ["opt_pepperoni", "opt_mushrooms", "opt_large"]
}
// POST /api/v1/cart/items
{
"item_id": "prod_pizza",
"quantity": 1,
"add_on_options": ["opt_pepperoni", "opt_mushrooms", "opt_large"]
}