> ## Documentation Index
> Fetch the complete documentation index at: https://firespark.cloud/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Modifier group overrides

> Different price and selection rules for the same modifier product across groups.

The same modifier product can appear in more than one group — for example cola as an included drink on a combo and as a paid add-on on a fountain drink. **`pricing.modifiers` on the modifier product** describes how it behaves inside each group. **`modifier_group_id`** must match a group that lists this product in `modifier_ids`.

Parent products only attach groups through `pricing.modifier_group_ids`. They do not carry `modifiers` entries.

## What this example includes

| Layer             | Where it lives                  | Included drink group | Paid add-on group |
| ----------------- | ------------------------------- | -------------------- | ----------------- |
| Group rules       | `modifier_groups`               | min 1 · max 1        | min 0 · max 3     |
| Modifier price    | `cola.pricing.modifiers[]`      | \$0                  | \$2.50            |
| Parent attachment | `meal-combo` / `fountain-drink` | `free-drink`         | `add-drink`       |

```mermaid theme={null}
flowchart TB
    COMBO["meal-combo"] --> G1["free-drink\nmin 1 · max 1"]
    FOUNTAIN["fountain-drink"] --> G2["add-drink\nmin 0 · max 3"]
    G1 --> COLA["cola · $0 in included group"]
    G1 --> SPRITE["sprite · $0 in included group"]
    G2 --> COLA2["cola · $2.50 in add-on group"]
    G2 --> SPRITE2["sprite · $2.50 in add-on group"]
```

## Request

Define both groups in `modifier_groups`. List `cola` and `sprite` in each group's `modifier_ids`. On each modifier product, add one `pricing.modifiers` entry per group with the `modifier_group_id` and economics for that context.

```bash theme={null}
curl --request PUT \
  --url 'https://firespark.cloud/api/integrations/v1/menus?fulfillment_id=delivery&store_id=downtown&channel_id=app&brand_id=0001' \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @modifier-group-overrides.json
```

```json modifier-group-overrides.json theme={null}
{
  "style": "DEFAULT",
  "products": [
    {
      "id": "meal-combo",
      "name": { "en_us": "Meal combo" },
      "description": { "en_us": "Main plus one included drink." },
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 1,
        "maximum_quantity": 5,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 11.99,
        "anchor_price": 11.99,
        "anchor_price_percentage": 0,
        "modifier_group_ids": ["free-drink"],
        "modifiers": []
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    },
    {
      "id": "fountain-drink",
      "name": { "en_us": "Fountain drink" },
      "description": { "en_us": "Sold alone with optional paid refills." },
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 1,
        "maximum_quantity": 5,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 2.49,
        "anchor_price": 2.49,
        "anchor_price_percentage": 0,
        "modifier_group_ids": ["add-drink"],
        "modifiers": []
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    },
    {
      "id": "cola",
      "name": { "en_us": "Cola" },
      "description": null,
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 0,
        "maximum_quantity": 3,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 2.5,
        "anchor_price": 2.5,
        "anchor_price_percentage": 0,
        "modifier_group_ids": [],
        "modifiers": [
          {
            "modifier_group_id": "free-drink",
            "minimum_quantity": 0,
            "maximum_quantity": 1,
            "is_tax_inclusive": true,
            "tax_rate": 0.15,
            "price": 0,
            "anchor_price": 0,
            "anchor_price_percentage": 0,
            "default_quantity": 1,
            "charge_above_quantity": 0,
            "display_type": "RADIO"
          },
          {
            "modifier_group_id": "add-drink",
            "minimum_quantity": 0,
            "maximum_quantity": 3,
            "is_tax_inclusive": true,
            "tax_rate": 0.15,
            "price": 2.5,
            "anchor_price": 2.5,
            "anchor_price_percentage": 0,
            "default_quantity": 0,
            "charge_above_quantity": 0,
            "display_type": "CHECKBOX"
          }
        ]
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    },
    {
      "id": "sprite",
      "name": { "en_us": "Sprite" },
      "description": null,
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 0,
        "maximum_quantity": 3,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 2.5,
        "anchor_price": 2.5,
        "anchor_price_percentage": 0,
        "modifier_group_ids": [],
        "modifiers": [
          {
            "modifier_group_id": "free-drink",
            "minimum_quantity": 0,
            "maximum_quantity": 1,
            "is_tax_inclusive": true,
            "tax_rate": 0.15,
            "price": 0,
            "anchor_price": 0,
            "anchor_price_percentage": 0,
            "default_quantity": 0,
            "charge_above_quantity": 0,
            "display_type": "RADIO"
          },
          {
            "modifier_group_id": "add-drink",
            "minimum_quantity": 0,
            "maximum_quantity": 3,
            "is_tax_inclusive": true,
            "tax_rate": 0.15,
            "price": 2.5,
            "anchor_price": 2.5,
            "anchor_price_percentage": 0,
            "default_quantity": 0,
            "charge_above_quantity": 0,
            "display_type": "CHECKBOX"
          }
        ]
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    }
  ],
  "categories": [
    {
      "id": "combos",
      "name": { "en_us": "Combos" },
      "description": null,
      "status": "ACTIVE",
      "items": [
        { "type": "PRODUCT", "id": "meal-combo" },
        { "type": "PRODUCT", "id": "fountain-drink" }
      ],
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    }
  ],
  "modifier_groups": [
    {
      "id": "free-drink",
      "title": { "en_us": "Choose your included drink" },
      "description": null,
      "display_type": "LIST",
      "modifier_ids": ["cola", "sprite"],
      "minimum_quantity": 1,
      "maximum_quantity": 1,
      "charge_above_quantity": null,
      "metadata": {}
    },
    {
      "id": "add-drink",
      "title": { "en_us": "Add a drink" },
      "description": null,
      "display_type": "LIST",
      "modifier_ids": ["cola", "sprite"],
      "minimum_quantity": 0,
      "maximum_quantity": 3,
      "charge_above_quantity": null,
      "metadata": {}
    }
  ],
  "menus": [
    {
      "id": "all-day-delivery",
      "name": { "en_us": "All-day delivery" },
      "description": null,
      "schedules": null,
      "metadata": {},
      "category_ids": ["combos"],
      "status": "ACTIVE"
    }
  ]
}
```

## Override fields

Each `pricing.modifiers` entry on `cola` configures how cola renders inside one group:

| Field               | Included group | Add-on group | Effect                                                 |
| ------------------- | -------------- | ------------ | ------------------------------------------------------ |
| `modifier_group_id` | `free-drink`   | `add-drink`  | Ties the entry to the group context                    |
| `price`             | 0              | 2.50         | Free on the combo, paid when added to a fountain drink |
| `default_quantity`  | 1              | 0            | Pre-selects cola on the combo                          |
| `display_type`      | `RADIO`        | `CHECKBOX`   | Single choice vs optional multi-select                 |

<Info>
  Group-level min/max live on `modifier_groups`. Per-modifier price, default
  quantity, and display type live on the modifier product's `pricing.modifiers`
  entry for that `modifier_group_id`.
</Info>

## Related

<CardGroup cols={2}>
  <Card title="Upsert menus — pricing" icon="dollar-sign" href="/docs/integrations-api/menus/put">
    Full `pricing.modifiers` field reference
  </Card>

  <Card title="Simple menu" icon="utensils" href="/docs/integrations-api/examples/menu-sync/simple-menu">
    Baseline modifier group setup
  </Card>
</CardGroup>
