Skip to main content
In Fire, a COMBO is a product whose price is not fixed in the catalog — it depends on which options the customer selects across its required modifier groups. When you receive a COMBO in a menu.updated event, priceInfo.price is always 0. This is intentional. Fire pre-computes the minimum reachable price and stores it in priceInfo.referencePrice.

Identifying a COMBO in the payload

Look for "type": "COMBO" in data.menu.products:
{
  "productId": "combo_001",
  "name": "Box da Torcida",
  "type": "COMBO",
  "priceInfo": {
    "price": 0,
    "referencePrice": 9990
  },
  "productModifiers": [
    {
      "modifierId": "mod_box",
      "position": 1,
      "overrides": [
        {
          "productId": "prod_tiras_6",
          "priceInfo": {
            "price": 3800,
            "referencePrice": 3800
          }
        }
      ]
    }
  ]
}
Never display priceInfo.price for a COMBO — it is always 0. Use priceInfo.referencePrice as the header price.

Modifier overrides

A product can appear in many combos and many menus. In the global products[] list it has a single base price. But when that product acts as a modifier option inside a specific combo, its price within that combo may differ — for example, a medium fries that sells for R8.00individuallymightcostR 8.00 individually might cost R 6.40 when bundled in a particular combo. That is what productModifiers[n].overrides is for: it lets each combo declare a different price for any of its modifier options without changing the product’s base catalog price.

Structure

Each entry in overrides targets one modifier option by its productId:
"productModifiers": [
  {
    "modifierId": "mod_fries",
    "position": 2,
    "overrides": [
      {
        "productId": "prod_fries_medium",
        "priceInfo": {
          "price": 640,
          "referencePrice": 640
        }
      },
      {
        "productId": "prod_fries_large",
        "priceInfo": {
          "price": 830,
          "referencePrice": 830
        }
      }
    ]
  }
]
In this example, prod_fries_medium has a base price of R8.00inproducts[],buttheoverridesetsittoR 8.00 in `products[]`, but the override sets it to R 6.40 for this combo. prod_fries_large is similarly overridden to R$ 8.30.

Resolving the effective price

When processing a modifier option, always check overrides first:
effective_price = override.priceInfo.price         // if an override exists for this productId
               ?? option_product.priceInfo.price   // otherwise: option's own price in products[]
Use the effective price — not the base catalog price — for every calculation: the reference price, the delta display, and the cart total.

Reference price

priceInfo.referencePrice is pre-computed by Fire as the minimum the customer can pay for the combo:
for each required modifier group (minOptions ≥ 1):
  baseline = cheapest effective price among the group's options
  subtotal  = baseline × minOptions

referencePrice = sum of all subtotals
Display this value as the combo’s header price or as “from BRL 99.90” on product cards. Never rely on priceInfo.price for display.

Worked example — Box da Torcida

Modifier groupminOptionsCheapest option (effective)Subtotal
Choose your box1R$ 31.00 — 12 CoxinhasR$ 31.00
Choose your fries2R$ 6.40 — Medium friesR$ 12.80
Choose your sauce2R$ 5.70 — any sauceR$ 11.40
Choose your drink3R$ 14.90 — 400 mlR$ 44.70
Reference totalR$ 99.90

Customer-facing display logic

Show prices relative to the cheapest option in the group — not the absolute catalog price. This way customers see what a premium option costs on top of the base selection.
baseline = min effective_price across all options in the group
delta    = max(0, effective_price − baseline)
deltaDisplay
0”Included” or no label — this is the base option
> 0+R$ X.XX
Apply this logic only to required groups (minOptions ≥ 1). For optional groups (minOptions = 0), show the full add-on price for each option.

Example — Choose your box (required, pick 1)

OptionEffective priceBaselineDisplayed
12 CoxinhasR$ 31.00R$ 31.00Included
8 TirasR$ 38.00R$ 31.00+R$ 7.00
6 TirasR$ 41.00R$ 31.00+R$ 10.00
The override for prod_tiras_6 (R$ 38.00) is used instead of its base catalog price.

Example — Choose your sauce (required, all same price)

OptionEffective priceBaselineDisplayed
Honey mustardR$ 5.70R$ 5.70Included
BBQR$ 5.70R$ 5.70Included
KetchupR$ 5.70R$ 5.70Included
No delta is shown when all options cost the same.

Cart total

The total displayed on the “Add to order” button updates live as the customer makes selections:
cart_total = (referencePrice + sum of selected deltas) × quantity
Before any premium option is selected, display referencePrice.