Menu management
A community does not own its products — it mirrors them. Each member store’s catalogue is synced from the merchant into the community, and the community layers its own presentation on top: which stores are featured, what is currently sellable, and when each store is open.
The catalogue mirror
Section titled “The catalogue mirror”Read the mirror:
| Call | Returns |
|---|---|
GET /communities/{communityId}/catalogue | The full mirror in one call — member stores (with open state and hours), categories, and items with live availability and modifier groups. store_id limits it to one store; updated_since returns only items changed since a timestamp (incremental sync) |
GET /communities/{communityId}/catalogue/items/{itemId} | One item in detail — price, availability and snooze state, modifier groups |
The merchant side is the source of truth: names, prices and structure change when the merchant’s own catalogue changes (for POS-connected stores, that means a menu push upstream). The community’s own levers are the two writes below: item availability and snoozing, and store hours.
Item availability and snooze
Section titled “Item availability and snooze”Availability works at community level so an item can be paused on the marketplace without touching the merchant’s own storefront:
PATCH /communities/{communityId}/catalogue/items/{itemId}{ "available": false, "snoozed_until": "2026-07-31T04:00:00Z" }available: falseremoves the item from the community storefront immediately; carts containing it fail placement with a clear error. Settingavailable: truerestores it and clears any snooze.snoozed_untilrestores it automatically at the given time — use it for “back tomorrow” so nobody has to remember the un-86.- Merchant-side availability still applies: an item 86’d by the merchant is unavailable in every community regardless of the community’s setting. The effective state is the AND of both.
Store hours
Section titled “Store hours”Each member store carries opening hours within the community; the storefront
shows is_open per store, and orders against a closed store are rejected at
placement.
PUT /communities/{communityId}/stores/{storeId}/hours{ "timezone": "America/New_York", "weekly": { "monday": [{ "open": "11:00", "close": "22:00" }], "tuesday": [{ "open": "11:00", "close": "22:00" }], "wednesday": [{ "open": "11:00", "close": "22:00" }], "thursday": [{ "open": "11:00", "close": "23:00" }], "friday": [{ "open": "11:00", "close": "23:30" }], "saturday": [{ "open": "12:00", "close": "23:30" }], "sunday": [] }, "overrides": [ { "date": "2026-09-07", "closed": true, "reason": "Labor Day" } ]}Each weekday takes one or more open/close ranges; an empty array closes the
store for that day. overrides handle specific dates — holidays, closures,
or special hours. For an unplanned closure mid-service, snooze the affected
items or add a dated override — the storefront reflects it immediately and
the weekly hours stay correct for next week.
Full endpoint details are in the Hub Ordering reference.