Menus
Each brand has one menu. Its locations all use it. You send the whole menu from your system, keyed by your own IDs, and Loops publishes it to the delivery apps.
What a menu contains
Section titled “What a menu contains”Menu (one per brand) ├── Categories "Burgers", "Drinks" ├── Products "Chicken Burger", in one category │ └── Variants "Regular", "Large", each with its own price └── Modifier groups "Extras", attached to any number of products └── Options "Extra cheese", with its own priceCategory
: A section of the menu. Products appear in their category, ordered by sort_order.
Product
: Something a customer orders. It has either a single price, or two or more variants.
Variant : A version of a product with its own price, such as a size. Variants can carry their own SKU and barcode, so they map to separate items in your POS.
Modifier group
: A set of choices such as “Sauce” or “Extras”. You define it once and attach it to any number of products. min_selections and max_selections set the rules:
min_selections |
max_selections |
Meaning |
|---|---|---|
| 0 | 3 | Optional, up to 3 choices |
| 1 | 1 | Required, exactly one choice |
| 1 | 2 | Required, one or two choices |
Option : One choice in a modifier group, with its own price (which can be 0).
Your IDs, not ours
Section titled “Your IDs, not ours”Every category, product, variant, modifier group and option has an external_ref: your own ID from your POS. Loops doesn’t give menu items IDs of its own.
- References connect the menu together: a product names its
category_external_refand itsmodifier_group_external_refs. - Each order item carries the same references back to you (
product_external_ref,variant_external_ref,option_external_ref), so you can match it to your menu without guessing. - Keep each reference stable. If you change it, Loops treats the item as removed and a new item added.
Prices
Section titled “Prices”- Amounts are in halalas (minor units):
{ "amount": 2500, "currency": "SAR" }is 25.00 SAR. - Prices include VAT, as customers see them.
- An order’s total for an item is the product or variant price, plus its selected options, times the quantity.
Availability
Section titled “Availability”Set available: false on a product, variant or option to show it as unavailable, then import and publish the menu again. Leave it in the menu: removing it deletes it from the delivery apps.
Import, then publish
Section titled “Import, then publish”Changing a menu takes two steps, so you control when delivery apps change:
- Import (
PUT /v1/brands/{brand_id}/menu) replaces the brand’s menu in Loops. Loops checks it as a whole: either everything is imported, or nothing is, with a list of every problem. - Publish (
POST /v1/brands/{brand_id}/menu/publish) sends the current menu to the delivery apps of the brand’s locations. Each delivery app may accept or reject items, so you get a result for each location and app.
Both steps run in the background. See Publishing menus for the full flow.
Images
Section titled “Images”Give images as public HTTPS URLs. Loops downloads and stores a copy, so the URL only needs to work while the import runs. Product images must be JPG or PNG, at least 800 × 800 px.
© 2026 Loops Technologies | شركة لووبز للتقنيات. All rights reserved.
