---
updatedAt: 2026-09-04T12:51:03.000Z
agentTools:
  projectIndex: https://developers.deliverect.com/v1.1-restaurants/llms.txt
---

# How to configure Modifier Groups

## Introduction

Modifier groups support the most common product structure where standard modifications to a product e.g. allowing 'Rare', 'Medium' or 'Well Done' modifiers `(productType:2)` to be offered within a Steak product. It can also group together additional product options `(productType:1)` typically where 'Upsells' apply.

## Format

### 1.Modifier Group with Modifiers

The first example below represents a simple Product `(productType:1)` with three modifier groups attached `(productType:3)` where each modifier group contains an amount of modifiers `(productType:2)`

```mermaid
%%{init: { "theme": "base", "themeVariables": { "fontSize": "13px", "background": "transparent", "lineColor": "#64748b", "edgeLabelBackground": "transparent", "actorBkg": "#038851", "actorTextColor": "#ffffff", "actorBorder": "#026139", "actorLineColor": "#94a3b8", "signalColor": "#64748b", "signalTextColor": "#059669", "noteBkgColor": "#e6f4ee", "noteTextColor": "#02502f", "noteBorderColor": "#038851", "activationBkgColor": "#c6ebdc", "activationBorderColor": "#026139", "sequenceNumberColor": "#ffffff" }, "flowchart": { "nodeSpacing": 25, "rankSpacing": 35, "padding": 8, "useMaxWidth": true }, "sequence": { "useMaxWidth": true, "actorMargin": 70, "width": 150, "height": 60, "boxMargin": 12, "noteMargin": 14, "messageMargin": 50, "diagramMarginX": 20, "diagramMarginY": 20, "actorFontSize": 18, "actorFontWeight": 700, "noteFontSize": 15, "noteFontFamily": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace", "messageFontSize": 16, "messageFontWeight": 700, "noteAlign": "left", "mirrorActors": false } }}%%
flowchart TD
    Product["<b>Product</b><br/>'productType': 1"]
    MG1["<b>Modifier Group</b><br/>'productType': 3"]
    MG2["<b>Modifier Group</b><br/>'productType': 3"]
    MG3["<b>Modifier Group</b><br/>'productType': 3"]
    M1["<b>Modifier</b><br/>'productType': 2"]
    M2["<b>Modifier</b><br/>'productType': 2"]
    M3["<b>Modifier</b><br/>'productType': 2"]

    Product --> MG1
    Product --> MG2
    Product --> MG3
    MG1 --> M1
    MG2 --> M2
    MG3 --> M3

    classDef product fill:#fdf1dc,stroke:#8a7a4f,color:#3a2f1a,stroke-width:2px;
    classDef modgroup fill:#038851,stroke:#026139,color:#ffffff,stroke-width:2px;
    classDef modifier fill:#EBFBF1,stroke:#8fc9a8,color:#02502f,stroke-width:2px;

    class Product product;
    class MG1,MG2,MG3 modgroup;
    class M1,M2,M3 modifier;
```

### 2.Modifier Group with Products

This same structure can also be applied to group together products (`productType:1`) within modifier groups `(productType:3)`

```mermaid
%%{init: { "theme": "base", "themeVariables": { "fontSize": "13px", "background": "transparent", "lineColor": "#64748b", "edgeLabelBackground": "transparent", "actorBkg": "#038851", "actorTextColor": "#ffffff", "actorBorder": "#026139", "actorLineColor": "#94a3b8", "signalColor": "#64748b", "signalTextColor": "#059669", "noteBkgColor": "#e6f4ee", "noteTextColor": "#02502f", "noteBorderColor": "#038851", "activationBkgColor": "#c6ebdc", "activationBorderColor": "#026139", "sequenceNumberColor": "#ffffff" }, "flowchart": { "nodeSpacing": 25, "rankSpacing": 35, "padding": 8, "useMaxWidth": true }, "sequence": { "useMaxWidth": true, "actorMargin": 70, "width": 150, "height": 60, "boxMargin": 12, "noteMargin": 14, "messageMargin": 50, "diagramMarginX": 20, "diagramMarginY": 20, "actorFontSize": 18, "actorFontWeight": 700, "noteFontSize": 15, "noteFontFamily": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace", "messageFontSize": 16, "messageFontWeight": 700, "noteAlign": "left", "mirrorActors": false } }}%%
flowchart TD
    Product["<b>Product</b><br/>'productType': 1"]
    MG1["<b>Modifier Group</b><br/>'productType': 3"]
    MG2["<b>Modifier Group</b><br/>'productType': 3"]
    MG3["<b>Modifier Group</b><br/>'productType': 3"]
    P1["<b>Product</b><br/>'productType': 1"]
    P2["<b>Product</b><br/>'productType': 1"]
    P3["<b>Product</b><br/>'productType': 1"]

    Product --> MG1
    Product --> MG2
    Product --> MG3
    MG1 --> P1
    MG2 --> P2
    MG3 --> P3

    classDef product fill:#fdf1dc,stroke:#8a7a4f,color:#3a2f1a,stroke-width:2px;
    classDef modgroup fill:#038851,stroke:#026139,color:#ffffff,stroke-width:2px;

    class Product,P1,P2,P3 product;
    class MG1,MG2,MG3 modgroup;
```

## Ordering Group Rules

Both Modifier Groups and Bundles allow certain ordering "rules" to be applied as follows;

<Table align={["left","left","left"]}>
  <thead>
    <tr>
      <th>
        Rule
      </th>

      <th>
        Purpose
      </th>

      <th>
        Type
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `min`
      </td>

      <td>
        Setting a minimum value to a group of options e.g. `0`would be equivalent to **'optional'and**`1`or more would be **'required'**
      </td>

      <td>
        Integer
      </td>
    </tr>

    <tr>
      <td>
        `max`
      </td>

      <td>
        Setting a maximum value limits how many items in a group can be ordered
      </td>

      <td>
        Integer
      </td>
    </tr>

    <tr>
      <td>
        `multiMax`
      </td>

      <td>
        Setting the attribute `multiMax` allows control over the maximum quantity of any single item in a group.

        A value of '2' for example, means that each item in a group can be selected at most 2 times. The selection of a single item will still be limited by the overall `max` value allowed in a group
      </td>

      <td>
        Integer
      </td>
    </tr>

    <tr>
      <td>
        `multiply`
      </td>

      <td>
        To repeat the modifier / bundle group a specified number of times (alternative to listing the same grouping PLU multiple times)
      </td>

      <td>
        Integer
      </td>
    </tr>

    <tr>
      <td>
        maxUniqueOptions
      </td>

      <td>
        Maximum unique options that can be selected in any one modifier group
      </td>

      <td>
        Integer
      </td>
    </tr>

    <tr>
      <td>
        minUniqueOptions
      </td>

      <td>
        Minimum unique options that can be selected in any one modifier group
      </td>

      <td>
        Integer
      </td>
    </tr>
  </tbody>
</Table>

## Item Rules

Individual items can also have rules set against them to control how they can be ordered online

| Rule              | Purpose                                                                                                                                                                                                                                   | Type    |
| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
| `multiMax`        | To restrict the number of products that can be sold within one order e.g. pharmaceuticals. You can achieve this by adding the attribute `"multiMax"` e.g. `"multiMax": 1,` prevents more than one of the items being added to the basket. | Integer |
| `defaultQuantity` | This attribute makes a modifier preselected by default, where a value of `1` is equivalent to a pre-selected item. Most channels can handle a pre-selection, but not with a pre-selected quantity of more than 1                          | Integer |

###

## Nested Modifiers

A product configuration can include a sub-group of options to be selected. These options themselves can also contain their own sub-groups, this is reffered to as 'Nested Modifiers'.

```mermaid
%%{init: { "theme": "base", "themeVariables": { "fontSize": "13px", "background": "transparent", "lineColor": "#64748b", "edgeLabelBackground": "transparent", "actorBkg": "#038851", "actorTextColor": "#ffffff", "actorBorder": "#026139", "actorLineColor": "#94a3b8", "signalColor": "#64748b", "signalTextColor": "#059669", "noteBkgColor": "#e6f4ee", "noteTextColor": "#02502f", "noteBorderColor": "#038851", "activationBkgColor": "#c6ebdc", "activationBorderColor": "#026139", "sequenceNumberColor": "#ffffff" }, "flowchart": { "nodeSpacing": 25, "rankSpacing": 35, "padding": 8, "useMaxWidth": true }, "sequence": { "useMaxWidth": true, "actorMargin": 70, "width": 150, "height": 60, "boxMargin": 12, "noteMargin": 14, "messageMargin": 50, "diagramMarginX": 20, "diagramMarginY": 20, "actorFontSize": 18, "actorFontWeight": 700, "noteFontSize": 15, "noteFontFamily": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace", "messageFontSize": 16, "messageFontWeight": 700, "noteAlign": "left", "mirrorActors": false } }}%%
flowchart TD
    Product["<b>Product</b><br/>'productType': 1"]
    MGTop["<b>Modifier Group</b><br/>'productType': 3"]
    ProdOrMod["<b>Product</b><br/>'productType': 1<br/>or<br/><b>Modifier</b><br/>'productType': 2"]
    MG1["<b>Modifier Group</b><br/>'productType': 3"]
    MG2["<b>Modifier Group</b><br/>'productType': 3"]
    MG3["<b>Modifier Group</b><br/>'productType': 3"]
    M1["<b>Modifier</b><br/>'productType': 2"]
    M2["<b>Modifier</b><br/>'productType': 2"]
    M3["<b>Modifier</b><br/>'productType': 2"]

    Product --> MGTop
    MGTop --> ProdOrMod
    ProdOrMod --> MG1
    ProdOrMod --> MG2
    ProdOrMod --> MG3
    MG1 --> M1
    MG2 --> M2
    MG3 --> M3

    classDef product fill:#fdf1dc,stroke:#8a7a4f,color:#3a2f1a,stroke-width:2px;
    classDef modgroup fill:#038851,stroke:#026139,color:#ffffff,stroke-width:2px;
    classDef modifier fill:#FDECEC,stroke:#d98a8a,color:#5a1f1f,stroke-width:2px;
    classDef prodormod fill:#17a89a,stroke:#0f766e,color:#ffffff,stroke-width:2px;

    class Product,MGTop product;
    class MG1,MG2,MG3 modgroup;
    class M1,M2,M3 modifier;
    class ProdOrMod prodormod;
```

## Examples

```json Modifier Group + Modifiers
{
  "products": [
    {
      "productType": 1,
      "plu": "STK-01",
      "price": 1500,
      "name": "Delicious Steak Frites",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000,
      "subProducts": [
        "MOD"
      ]
    },
    {
      "productType": 3,
      "plu": "MOD",
      "name": "Add a side",
      "description": "Pizza made for cheese fanatics",
      "subProducts": [
        "SI-01",
        "SI-02",
        "SI-03"
      ],
      "min": 0,
      "max": 0,
      "multiMax": 3
    },
    {
      "productType": 2,
      "plu": "SI-01",
      "price": 0,
      "name": "Fries",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000
    },
    {
      "productType": 2,
      "plu": "SI-02",
      "price": 200,
      "name": "Salad",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000
    },
    {
      "productType": 2,
      "plu": "SI-03",
      "price": 100,
      "name": "Mashed Potato",
      "description": "Mashed Potato",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000
    }
  ]
}
```
```json Modifier Group + Products
{
  "products": [
    {
      "productType": 1,
      "plu": "STK-01",
      "price": 1500,
      "name": "Delicious Steak Frites",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000,
      "subProducts": [
        "DRK"
      ]
    },
    {
      "productType": 3,
      "plu": "DRK",
      "name": "Add a Drink",
      "subProducts": [
        "DR-01",
        "DR-02",
        "DR-03"
      ],
      "min": 0,
      "max": 0,
      "multiMax": 3
    },
    {
      "productType": 1,
      "plu": "DR-01",
      "price": 0,
      "name": "Coke",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000
    },
    {
      "productType": 1,
      "plu": "DR-02",
      "price": 200,
      "name": "Ginger Beer",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000
    },
    {
      "productType": 1,
      "plu": "DR-03",
      "price": 100,
      "name": "Fanta",
      "deliveryTax": 9000,
      "takeawayTax": 9000,
      "eatInTax": 9000
    }
  ]
}
```
```json Nested Modifier Group
{
 "products": [
    {
      "name": "Chicken Sate",
      "description": "Product with Nested Modifiers",
      "productType": 1,
      "plu": "P-SATE",
      "price": 450,
      "productTags": [
        104,
        108,
        109
      ],
      "imageUrl": "https://storage.googleapis.com/ikona-bucket-staging/images/5ff6ee089328c8aefeeabe33/satay-62284e3c8c506f015be60184.jpeg",
      "subProducts": [
        "MG-RICE"
      ],
      "deliveryTax": 1200,
      "takeawayTax": 1200,
      "eatInTax": 1200,
      "posCategoryIds": [
        "CHK"
      ]
    },
    {
      "name": "Rice Selection",
      "productType": 3,
      "plu": "MG-RICE",
      "min": 1,
      "max": 1,
      "subProducts": [
        "RICE-01"
      ]
    },
    {
      "name": "White Rice",
      "description": "White coloured rice",
      "productType": 1,
      "plu": "RICE-01",
      "price": 450,
      "imageUrl": "https://storage.googleapis.com/ikona-bucket-staging/images/5ff6ee089328c8aefeeabe33/nasiputi-1610290140494.jpg",
      "subProducts": [
        "MG-SAUCES"
      ],
      "deliveryTax": 1200,
      "takeawayTax": 1200,
      "eatInTax": 1200
    },
    {
      "name": "Choose a sauce",
      "productType": 3,
      "plu": "MG-SAUCES",
      "min": 0,
      "max": 1,
      "subProducts": [
        "SAUCE-01",
        "SAUCE-02"
      ]
    },
    {
      "name": "Sate Sauce",
      "productType": 2,
      "plu": "SAUCE-01",
      "price": 50,
      "deliveryTax": 1200,
      "takeawayTax": 1200,
      "eatInTax": 1200
    },
    {
      "name": "Hot Sauce",
      "productType": 2,
      "plu": "SAUCE-02",
      "price": 50,
      "deliveryTax": 1200,
      "takeawayTax": 1200,
      "eatInTax": 1200
    }
  ],
  "categories": [
    {
      "posCategoryId": "CHK",
      "name": "Chicken",
      "imageUrl": "https://storage.googleapis.com/ikona-bucket-staging/images/618a2c5306a6208df4e9d061/Chicken-6772a111d6ff7c6facadf7ea.jpeg"
    }
  ]
}
```