Skip to content

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.

Read the mirror:

CallReturns
GET /communities/{communityId}/catalogueThe 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.

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: false removes the item from the community storefront immediately; carts containing it fail placement with a clear error. Setting available: true restores it and clears any snooze.
  • snoozed_until restores 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.

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.