zoneStores on
updateItemPrice) is the
lighter tool.
How a store price is resolved
For each item on a store (brand × branch) menu:- Does the branch have a
price_group_id? - Does the item’s
groupPricesmap have an entry for that group id? - If yes to both → that entry’s provider/currency prices are used for the store.
- Otherwise → the item’s base
pricesmap applies.
"1" included), same as the base
PriceMap.
Managing your groups
Full CRUD lives under/v1/partner/price/groups — reads behind
brands:read, writes behind brands:update:
Two catalog realities behind create/rename/disable:
- The catalog is shared and capped at 64 groups platform-wide.
POSTreuses an existing entry with the same title (case-insensitive) instead of minting a duplicate; a full catalog returns400— pick an existing title from?all=trueinstead. - Rename and disable never touch other businesses. Rename is rejected while another business has the group enabled, and disable only clears the group from your set — the catalog entry survives.
listBranches /
getBranch: each branch carries
price_group_id and price_group_title (null = base prices).
Setting per-group prices on items
groupPrices is accepted anywhere prices is:
createItem,
updateItem, and
updateItemPrice. The
shape is one extra nesting level over PriceMap — the outer key is the
group id as a string:
2 (“Mall”) sell at
65,000; branches in group 3 (“Airport”) at 80,000. Prices are in
display units (not cents), exactly like the base PriceMap.
Tier prices can also be set at creation time — when building a menu
via createItem, include
groupPrices next to prices in the same payload:
onlyModifier: true), so a
“Large” upcharge can differ per tier too.
Business-level edits like the one above follow the same rollout
round-trip as any other menu change — see the
menu-publish reference:
POST /menus/sync— replay business state into the store overrides.POST /menus/publish— rebuild the cached store menu blob thatgetMenuserves.
Assigning a branch to a pricing group
Setprice_group_id via
updateBranch:
The full recipe
POST /price/groups {"title": "Mall"}→ note the returnedid.PATCH /branches/{id}withprice_group_idon each mall branch.PATCH /menus/items/price/{itemID}withgroupPriceskeyed by that group id, for every item that prices differently.POST /menus/sync, thenPOST /menus/publish.- Verify with
getMenufor a branch on the group.
Gotchas
- The omit-clears-it PATCH semantic on branch updates (warning above). This is the most common way an integration silently knocks a branch back to base prices.
- Group entries don’t inherit. A
groupPrices["2"]entry with only provider"1"leaves your aggregator providers without a price on mall branches — repeat every provider/currency pair you sell on. - Disabling a group doesn’t unprice it. Branches keep their
price_group_idand items keep theirgroupPricesentries; disable only trims the list. Move branches off the group first if you want them back on base prices. - Sync + publish still apply. A group price edit that “didn’t take”
is almost always a skipped
publishMenu— the same trap as every other menu write.